1

我对 VBA 很陌生,但是我有编程背景。我正在编写 VBA 来打开两个 Excel 工作簿,复制数据透视表并将特殊值粘贴到临时工作簿中。从那里,我需要比较数据透视数据并输出差异。但是,我不确定从那里去哪里。

样本数据

枢轴 1

水果之和 YearMon
类别组 201205 201206 201207 201208 201209 ... 201401
苹果绿 1.3 2.1 3.0 ...
               红色 1.0 1.5 2.0 ...
苹果总数.. .. .. ...
浆果吸管 1 1 1.1 2.0 2.1 ...
               黑色 1 1 1.0 0.9 0.9 ...
贝罗斯总计 .. .. .. ...

支点 2

水果之和 YearMon
类别组 201206 201207 201208 201209 201210 ... 201402
苹果绿 1.5 2.3 3.2 ...
               红色 0.8 1.3 1.9 ...
               黄色 1 0.9 0.9 1 ...
苹果总数.. .. .. ...
浆果吸管 1 1 1.3 1.8 2.1 ...
               黑色 1 1 0.9 0.8 0.8 ...
贝罗斯总计 .. .. .. ...

期望的结果(枢轴 2 - 枢轴 1)

水果之和 YearMon
类别组 201205 201206 201207 201208 201209 201210 ... 201402
苹果绿 -0.6 -0.7 ...
               红色 -0.7 -0.7 ...
苹果总数.. .. .. ...
浆果吸管 0 -0.1 -0.7 -0.3 ...
               黑色 0 0 0 -0.1 ...
浆果总数 .. .. .. ...

我的第一个冲动是基于 each放入YearMon和放入数组,然后循环遍历它们以删除两个枢轴中都不存在的属性(即,黄色苹果在枢轴 1 中不存在,并且没有数据)。然后我会遍历每个组并进行计算。这听起来太乱了。GroupCategory201402

我目前正在考虑为YearMonand创建一个范围Group,然后垂直和水平地循环遍历该范围,Category以比较每个值。我不确定如何准确地找到每个Category停止的位置,或者我是否可以使用VLOOKUP?还是有一些更简单的方法来比较两个枢轴?

更新 1

大多数评论建议我尝试使用数据透视背后的源数据来完成这项任务。我能够获取数据并遵循上面的方案,如下所示:

数据 1

类别组 YearMon 值
苹果绿 201207 1.3
苹果绿 201208 2.1
苹果绿 201209 3.0
苹果红 201207 1.0
苹果红201208 1.5
苹果红201209 2.0
浆果吸管 201205 1.0
浆果吸管 201206 1.0
浆果吸管 201207 1.1
浆果吸管 201208 2.0
浆果吸管 201209 2.1
浆果黑 201205 1.0
浆果黑 201206 1.0
浆果黑 201207 1.0
浆果黑 201208 0.9
浆果黑 201209 0.9

数据 2

类别组 YearMon 值
苹果绿 201208 1.5
苹果绿 201209 2.3
苹果绿 201210 3.2
苹果红 201208 0.8
苹果红201209 1.3
苹果红201210 1.9
苹果黄 201207 1.0
苹果黄 201208 0.9
苹果黄 201209 0.9
苹果黄 201210 1.0
浆果吸管 201206 1.0
浆果吸管 201207 1.0
浆果吸管 201208 1.3
浆果吸管 201209 1.8
浆果吸管 201210 2.1
浆果黑 201206 1.0
浆果黑 201207 1.0
浆果黑 201208 0.9
浆果黑 201209 0.8
浆果黑 201210 0.8

按照下面的建议尝试后SUMIFS,我似乎需要为每个数据集指定每个标准(类别、组、YearMon)来进行比较。也许还有其他一些可以工作的功能?

更新 2

另一个建议是结合数据集来计算与枢轴的差异。在组合这两个数据集之后,我似乎无法找到一种方法来进行差异计算,而不包括另一个标识每个数据集(1 或 2)的列。从那里我可以进行比较。我做错了什么吗?

更新 3

按照下面的答案,我只是简单地否定了第二个数据集的值以获得差异。

4

2 回答 2

2

这可能会帮助您:

=INDEX($B$11:$H$14,MATCH($A18,$A$11:$A$14,0),MATCH(B$17,$B$10:$H$10,0))-(INDEX($B$3:$H$7,MATCH($A18,$A$3:$A$7,0),MATCH(B$17,$B$2:$H$2,0)))

我认为没有任何内置函数可以组合数据透视表。所以一般来说,这个问题似乎并不特定于数据透视表——而只是如何组合/减去/添加两个单独的数据表。

减去两个表

不确定您是否正在寻找 VBA 解决方案,但这是使用(非常冗长)电子表格公式的一种方法。您也可以使用 Scott 提到的 SUMIF 公式,或者只使用原始数据。祝你好运。

于 2012-09-28T19:09:51.097 回答
1

为了证明我的建议。取您的数据 1,将所有金额乘以 -1,然后将数据 2 添加到其中,为您提供:

组合数据

根据该组合数据制作数据透视表可为您提供:

新数据透视表

对于您想要的任何行/列组合,数据透视表 SUM 都会为您带来不同。诀窍是将一个数据集乘以-1

技巧:在新单元格中键入 -1,在该单元格上按 Ctrl-C,然后选择数据 1 组中的所有值,然后执行选择性粘贴并选择“相乘”

于 2012-10-02T23:05:14.823 回答