我对VBA很新,但我有编程背景。我正在编写VBA来打开两个excel工作簿,复制数据透视表并将特殊值粘贴到一个临时工作簿中。从那里,我需要比较枢轴数据并输出差异。但是,我不知道从那里去哪里。
示例数据
Pivot 1
Sum of Fruits YearMon Category Group 201205 201206 201207 201208 201209 ... 201401 Apples Green 1.3 2.1 3.0 ... Red 1.0 1.5 2.0 ... Apples Total .. .. .. ... Berries Straw 1 1 1.1 2.0 2.1 ... Black 1 1 1.0 0.9 0.9 ... Berroes Total .. .. .. ...
Pivot 2
Sum of Fruits YearMon Category Group 201206 201207 201208 201209 201210 ... 201402 Apples Green 1.5 2.3 3.2 ... Red 0.8 1.3 1.9 ... Yellow 1 0.9 0.9 1 ... Apples Total .. .. .. ... Berries Straw 1 1 1.3 1.8 2.1 ... Black 1 1 0.9 0.8 0.8 ... Berroes Total .. .. .. ...
所需结果(Pivot 2 - Pivot 1)
Sum of Fruits YearMon Category Group 201205 201206 201207 201208 201209 201210 ... 201402 Apples Green -0.6 -0.7 ... Red -0.7 -0.7 ... Apples Total .. .. .. ... Berries Straw 0 -0.1 -0.7 -0.3 ... Black 0 0 0 -0.1 ... Berries Total .. .. .. ...
我的第一个冲动是根据每个YearMon
将Group
和Category
放入数组中,然后循环遍历它们以删除两个枢轴中不存在的属性(即黄色) Pivot 1中不存在apples,并且201402
没有数据。然后我会遍历每个组并进行计算。听起来太乱了。
我目前正在考虑为YearMon
和Group
创建一个范围,然后为每个Category
在垂直和水平范围内循环,以比较这些值。我不确定如何确切地找到每个Category
停止的位置,或者我是否可以使用VLOOKUP
?或者是否有一些更简单的方法来比较两个支点?
更新1
大多数评论建议我尝试使用数据透视后面的源数据来完成此任务。我能够获得数据并遵循上面的方案,如下所示:
数据1
Category Group YearMon Value Apples Green 201207 1.3 Apples Green 201208 2.1 Apples Green 201209 3.0 Apples Red 201207 1.0 Apples Red 201208 1.5 Apples Red 201209 2.0 Berries Straw 201205 1.0 Berries Straw 201206 1.0 Berries Straw 201207 1.1 Berries Straw 201208 2.0 Berries Straw 201209 2.1 Berries Black 201205 1.0 Berries Black 201206 1.0 Berries Black 201207 1.0 Berries Black 201208 0.9 Berries Black 201209 0.9
数据2
Category Group YearMon Value Apples Green 201208 1.5 Apples Green 201209 2.3 Apples Green 201210 3.2 Apples Red 201208 0.8 Apples Red 201209 1.3 Apples Red 201210 1.9 Apples Yellow 201207 1.0 Apples Yellow 201208 0.9 Apples Yellow 201209 0.9 Apples Yellow 201210 1.0 Berries Straw 201206 1.0 Berries Straw 201207 1.0 Berries Straw 201208 1.3 Berries Straw 201209 1.8 Berries Straw 201210 2.1 Berries Black 201206 1.0 Berries Black 201207 1.0 Berries Black 201208 0.9 Berries Black 201209 0.8 Berries Black 201210 0.8
按照以下建议尝试SUMIFS
后,似乎我需要为每个数据集指定每个条件(Category,Group,YearMon)以进行比较。也许还有一些其他功能可行吗?
更新2
另一个建议是组合数据集来计算枢轴中的差异。在组合这两个数据集之后,我似乎无法找到一种方法来进行差异计算,而不包括标识每个数据集(1或2)的另一列。从那里我可以做比较。我做错了吗?
更新3
根据下面的答案,我只是否定了第二个数据集的值来获得差异。
答案 0 :(得分: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公式,或者只使用原始数据。祝你好运。
答案 1 :(得分:1)
要证明我的建议。获取数据1,将所有数量乘以-1,然后将数据2添加到其中,为您提供:
根据组合数据执行数据透视表可以:
对于您想要的任何行/列组合,数据透视表SUM会为您带来不同。诀窍是将一个数据集乘以-1
技巧:在新单元格中键入-1,在该单元格上键入Ctrl-C,然后选择数据1组中的所有值,然后选择“选择性粘贴”并选择“乘法”