我有一个包含两千行发票信息的电子表格,并且为数据提供了不完整的采购订单信息。我正在尝试根据发票填充购买信息,因为发票的至少一行将包含采购订单号。我想使用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 |
+---------+----------------+
我已经搜索了很多解决方案,但是我运气不高,无法找到适合此需求的东西。
答案 0 :(得分:0)
完成此任务的许多方法。以下是没有VBA的情况。
步骤1:首先,按照表格的A列(升序)+ B列(升序)对表格进行排序。这可以带你到这里:
步骤2:使用此公式添加第三列:
=IF(B2<>"-",B2,C1)
第3步:将其复制到所有行中。
结果:
注意:如果更改A和B的排序,C列中的结果会混乱。如果不可避免,请在更改C列的值之前复制并粘贴(即删除公式)。排序顺序。
答案 1 :(得分:0)
我敢肯定,有一种更高级的方法可以做到这一点,但这可以使您开始进入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"
最终结果是一张表格,其中所有空白均被填充。