首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA -基于单独的范围值复制非空白单元格值

Excel VBA -基于单独的范围值复制非空白单元格值
EN

Stack Overflow用户
提问于 2019-03-06 20:28:36
回答 2查看 44关注 0票数 0

我有一个包含数千行发票信息的电子表格,数据中提供了不完整的采购订单信息。我试图填充基于发票的购买信息,因为发票上至少有一行将包含采购订单号。我想使用VBA,因为我计划使用它作为更大宏的一部分来自动格式化和更新报表。

示例原始数据:

代码语言:javascript
运行
复制
+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000    | -              |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | -              |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | -              |
+---------+----------------+
| 2000    | -              |
+---------+----------------+
| 3000    | -              |
+---------+----------------+
| 3000    | -              |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+

作为输出,我想要的是:

代码语言:javascript
运行
复制
+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+

我已经搜索了相当多的解决方案,但我还没有找到适合这一需求的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-06 21:41:16

我确信有一种更高级的方法可以做到这一点,但是这里有一些东西可以让您在Power Query领域中开始工作。

将数据放入一个名为Table1的表中。单击表格中的单元格,然后单击带状的From Table区域的Get and Transform区域。

当查询编辑器出现时,通过高级编辑器输入以下内容:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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"

最终的结果是一个表格,填补了所有的空白。

票数 0
EN

Stack Overflow用户

发布于 2019-03-06 21:05:39

实现这一目标的方法有很多。下面是没有VBA的。

步骤1:从按A列(升序)+B列(升序)排序表开始。这就让你明白了:

步骤2:使用此公式添加第三列:

=IF(B2<>"-",B2,C1)

步骤3:将其复制到所有行中。

结果:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55031664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档