有效的数据透视/数据比较

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

样本数据

枢轴1

水果的一年YearMon
类别组201205 201206 201207 201208 201209 ... 201401
苹果绿色1.3 2.1 3.0 ...
                Red 1.0 1.5 2.0 ...
苹果总计.. .. ..
浆果秸秆1 1 1.1 2.0 2.1 ...
               黑1 1 1.0 0.9 0.9 ...
 Berroes Total .. .. ..

枢轴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 ...
 Berroes Total .. .. ..

预期结果(数据透视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 ...
浆果总计.. .. ..

我的第一个冲动是把YearMonGroup放入基于每个Category数组中,然后通过循环遍历它们来移除两个枢轴中不存在的属性(即,在第一个数据透视表中不存在黄色苹果,并且没有数据201402 )。 然后,我会循环通过每个组,并进行计算。 这听起来太乱了。

我目前正在考虑为YearMonGroup创build一个范围,然后在每个Category垂直和水平地遍历该范围,以比较这些值。 我不知道如何正确地find每个Category停止的地方,或者我是否可以使用VLOOKUP ? 还是有一些简单的方法来比较两个枢纽?

更新1

大多数评论build议我尝试使用数据透视背后的源数据来完成此任务。 我能够获得数据并遵循上面的scheme,如下所示:

数据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

按照下面的build议尝试SUMIFS之后,似乎需要为每个数据集指定每个标准(Category,Group,YearMon)来进行比较。 也许还有一些其他function可以工作?

更新2

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

更新3

在下面的答案之后,我简单地否定了第二个数据集的值来获得差异。

为了certificate我的build议。 把你的数据1,所有的数量乘以-1,并添加数据2,给你:

组合数据

根据这些组合数据做一个数据透视表,可以:

新的枢轴表

数据透视表SUM为你做了不同的事情,无论你想要的任何行/列组合。 诀窍是乘以-1的数据

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

这可能会帮助你:

 =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))) 

我不认为有任何内置函数来组合数据透视表。 所以通常这个问题似乎不是特定于数据透视表 – 而是如何组合/扣除/添加两个单独的数据表。

SubtractTwoTables

不知道你是否正在寻找一个VBA解决scheme,但是这是一个使用(非常详细的)电子表格公式来实现的方法。 你也可以使用像Scott提到的SUMIF公式,或者只使用原始数据。 祝你好运。