excel - 如何按特定列值转置标题行值组

标签 excel vba excel-formula powerquery unpivot

我在 excel 中有一些数据,格式如下:

Cust_Name    Prod1     Prod2    Prod3     Prod4    Prod5
A            0         100      120       0        0
B            145       120      168       0        200
C            350       300      0        340       0
我需要将以下格式转换为下面提到的报告格式。
我想通过 Cust_Name 将这些产品转置在一个列组中,其值 >0 否则它不应该成为最终输出报告的一部分。
我尝试了许多枢轴选项,但没有奏效。
所需输出:
Cust_Name      Product       Price
A              Prod2         100
               Prod3         120
Total A        -             220
B              Prod1         145
               Prod2         120
               Prod3         168
               Prod5         200
Total B        -             633
C              Prod1         350
               Prod2         300
               Prod4         340
Total C        -             890

最佳答案

您可以使用 PowerQuery 执行此操作。
选择源数据中的任何单元格。使用数据>获取和转换数据>从表/范围。
PowerQuery 编辑器将打开,如下所示:
enter image description here
通过单击列标题选择 Cust_Name 列。使用变换>反透视列>反透视其他列:
enter image description here
此时,可选择过滤值列以排除 0。
现在使用 Home>Close & Load 将数据放回您的工作簿。
您现在可以创建一个数据透视表来获取您的小计:
enter image description here
这是 PowerQuery 编辑器中“高级编辑器”对话框中的查询:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Cust_Name", type text}, {"Prod1", Int64.Type}, {"Prod2", Int64.Type}, {"Prod3", Int64.Type}, {"Prod4", Int64.Type}, {"Prod5", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Cust_Name"}, "Attribute", "Value")
in
    #"Unpivoted Other Columns"

关于excel - 如何按特定列值转置标题行值组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71000421/

相关文章:

Excel 宏 : how do I change all row heights, 但是如果 cell.value = bold 会使单元格高度变大?

excel - 如何从 Excel 中的日期列表创建日期范围?

excel - 使用 "if"函数识别特定时间

python - 如何在不使用外部库(例如 Numpy、Pandas)的情况下读取 CSV 文件?

excel - 保留从 Excel 到 PDF 的超链接

VBA循环条件在任意行数后停止评估

excel - 在excel中突出显示重复的 "Q&A"但不是第一个

Excel 公式返回最新日期旁边的值

vba - 使用部分文件名打开文件的 Excel 宏

vba - 如何使用行号自动填充 VBA 编辑器?