excel - VBA 函数根据列值复制到新行

标签 excel vba unpivot

我不是一个经验丰富的 VBA 开发人员,主要依赖宏记录器,因此非常感谢社区提供的任何帮助来帮助我解决这个问题。我过去没有使用过循环,但想象这将是解决我的问题的最佳应用程序。

我有下表;

<表类=“s-表”> <标题> 名称 年份 第二段A Sec B Sec C <正文> 乔 2020 15 20 30 玛丽 2019 5 25 0 彼得 2020 7 0 0

我想将名称、年份和大于零的金额复制/粘贴到新工作表上,如下所示;

<表类=“s-表”> <标题> 名称 年份 部分 总计 <正文> 乔 2020 A 15 乔 2020 B 20 乔 2020 C 30 玛丽 2019 A 5 玛丽 2019 B 25 彼得 2020 A 7

复制/粘贴操作将继续,直到在部分列上达到“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/

相关文章:

c# - 使用 C# 将公式添加到 Excel - 制作显示的公式

excel - 查找给定单元格所属的命名范围

excel - 在模板工作表和变量工作表之间进行 VBA 复制和粘贴

excel - Excel 单元格有 GotFocus 事件吗?

excel - VBA将对象传递到另一个对象集合

xml - VBA XML 子节点

sql - Snowflake 如何对字段数组运行逆透视查询而不是显式声明每个字段?

SQL Server PIVOT 功能

arrays - 将数组传递给函数时,Variant 与 String 类型不匹配

SQL 动态旋转 "Week"表