我不是一个经验丰富的 VBA 开发人员,主要依赖宏记录器,因此非常感谢社区提供的任何帮助来帮助我解决这个问题。我过去没有使用过循环,但想象这将是解决我的问题的最佳应用程序。
我有下表;
我想将名称、年份和大于零的金额复制/粘贴到新工作表上,如下所示;
复制/粘贴操作将继续,直到在部分列上达到“0”值,然后继续下一行,直到到达行的末尾。
非常感谢!!!
最佳答案
@BigBen 的评论是正确的。
在 Excel 中,突出显示源表,选择“插入表”(或按 ctrl-t),确保检查表是否有标题行。
然后,在表格功能区中(当光标位于表格中时)将表格重命名为“源”
然后,在数据功能区的“获取和转换”部分中,单击“来自表”。这将创建一个从此表中提取的查询,并将其呈现在 Power Query 编辑器中进行编辑。
在 Power Query 编辑器的主页功能区中,单击“管理 - 引用”。这将创建一个使用当前查询/从当前查询开始的新查询。我建议重命名它(在右侧边栏中)。
在 Power Query 编辑器的主页功能区中,单击“高级编辑器”并粘贴以下内容:
let
Source = Source,
#"Renamed Columns" = Table.RenameColumns(Source,{{"Sec A", "A"}, {"Sec B", "B"}, {"Sec C", "C"}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Renamed Columns", {"Name", "Year"}, "Attribute", "Value"),
#"Filtered Rows" = Table.SelectRows(#"Unpivoted Columns", each [Value] <> 0)
in
#"Filtered Rows"
您现在将拥有您想要的东西。
顺便说一句,不要害怕该代码。我真的没有输入所有内容!创建第二个查询后,
- 我双击列标题来重命名它们。
- 我突出显示了最后三列,并点击了“变换”功能区中的“取消透视列”。
- 我点击了“值”列的过滤器,仅获取值不为 0 的行。
就是这样!
关于excel - VBA 函数根据列值复制到新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65691735/