带有宏的Excel数据透视表,根据字段名称合并值?

时间:2017-03-24 05:13:28

标签: excel excel-vba excel-formula pivot-table vba

我有一个包含两个相关列“ src ”和“手头”的表格。在 src 列中,我有两种类型的条目,我想在创建数据透视表时以不同的方式处理每一行。

  
      
  1. 对于在src列中具有值的任何条目,其长度为> 2,我想在数据透视表中创建一个新行   值。
  2.   
  3. 对于“手头”字段,我希望得到该行下最后一个条目的“onhand”值,其中src值的长度为   字段名称是2;
  4.   

例如,原始表读取的位置(产品名称= src):

-------------------------
|Name of Product|on Hand|
-------------------------
|foo            |(1.000)|
-------------------------
|xx             |0.000  |
-------------------------
|xx             |(1.000)|
-------------------------
|xx             |7.000  |
-------------------------
|bar            |0.000  |
-------------------------
|xx             |(1.000)|
-------------------------
|xx             |2.000  |
-------------------------

数据透视表变为:

-------------------------
|Name of Product|on Hand|
-------------------------
|foo            |7.000  |
-------------------------
|bar            |2.000  |
-------------------------

不幸的是,我没有这方面的感觉,也不确定从哪里开始。对这类问题有一般的解决方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用两个辅助列来完成此操作。在列CD中输入以下详细公式,然后将其复制下来。然后,您可以在列CD上运行数据透视表。

见截图:

enter image description here

类别基于以下公式:

=IF(ROW()=2,A2,IF(LEN(A2)=2,C1,A2))

其中说:

  • 如果行是2只是拿产品(因为它的第一行我们不能查看'以上'值)
  • 否则,如果产品长度为2,则取上述值
  • 其他,取出产品 - 意味着bar成为新值,因为长度> 3

关闭基于以下公式:

=IF(C2<>C3,B2,0)

其中说:

  • 如果以下类别相同,则我们未达到期末余额
  • 否则,以下类别是新的,因此我们已达到期末余额