我对 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 中不存在,并且没有数据)。然后我会遍历每个组并进行计算。这听起来太乱了。Group
Category
201402
我目前正在考虑为YearMon
and创建一个范围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
按照下面的答案,我只是简单地否定了第二个数据集的值以获得差异。