我有一个包含数千行发票信息的电子表格,数据中提供了不完整的采购订单信息。我试图填充基于发票的购买信息,因为发票上至少有一行将包含采购订单号。我想使用VBA,因为我计划使用它作为更大宏的一部分来自动格式化和更新报表。
示例原始数据:
+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000 | - |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 1000 | - |
+---------+----------------+
| 2000 | 4321 |
+---------+----------------+
| 2000 | - |
+---------+----------------+
| 2000 | - |
+---------+----------------+
| 3000 | - |
+---------+----------------+
| 3000 | - |
+---------+----------------+
| 3000 | 9876 |
+---------+----------------+作为输出,我想要的是:
+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 1000 | 1234 |
+---------+----------------+
| 2000 | 4321 |
+---------+----------------+
| 2000 | 4321 |
+---------+----------------+
| 2000 | 4321 |
+---------+----------------+
| 3000 | 9876 |
+---------+----------------+
| 3000 | 9876 |
+---------+----------------+
| 3000 | 9876 |
+---------+----------------+我已经搜索了相当多的解决方案,但我还没有找到适合这一需求的东西。
发布于 2019-03-06 21:41:16
我确信有一种更高级的方法可以做到这一点,但是这里有一些东西可以让您在Power Query领域中开始工作。
将数据放入一个名为Table1的表中。单击表格中的单元格,然后单击带状的From Table区域的Get and Transform区域。
当查询编辑器出现时,通过高级编辑器输入以下内容:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Invoice", Int64.Type}, {"Purchase Order", type any}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type",{"Invoice"},Filtered,{"Invoice"},"Table1 (2)",JoinKind.LeftOuter),
#"Expanded Table1 (2)" = Table.ExpandTableColumn(#"Merged Queries", "Table1 (2)", {"Purchase Order"}, {"Purchase Order.1"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Table1 (2)",{"Purchase Order"})
in
#"Removed Columns"使用此方法,您将需要创建一个重复的查询,以便合并数据并填补所有空白。右键单击第一个查询并选择Duplicate Query
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Invoice", Int64.Type}, {"Purchase Order", type any}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Purchase Order] <> "-"))
in
#"Filtered Rows"最终的结果是一个表格,填补了所有的空白。
发布于 2019-03-06 21:05:39
实现这一目标的方法有很多。下面是没有VBA的。
步骤1:从按A列(升序)+B列(升序)排序表开始。这就让你明白了:

步骤2:使用此公式添加第三列:
=IF(B2<>"-",B2,C1)
步骤3:将其复制到所有行中。
结果:

注意:如果更改A和B的排序,则C列中的结果会出现混乱。如果排序不可避免,则在更改排序顺序之前,复制和粘贴C列的值(即删除公式)。
https://stackoverflow.com/questions/55031664
复制相似问题