2012-09-28 79 views
1

我對VBA相當陌生,但是我有一個編程背景。我正在編寫VBA以打開兩個excel工作簿,複製數據透視表並將特殊值粘貼到分段工作簿中。從那裏,我需要比較數據透視並輸出差異。但是,我不確定該從哪裏出發。高效的數據透視/數據比較

示例數據

樞軸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       ..  ..  .. ... 

樞軸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       ..  ..  .. ... 

所需的結果(樞軸2 - 樞軸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       ..  ..  ..   ... 

我的第一個衝動是將YearMonGroup放入基於每個Category的數組中,然後遍歷它們以移除兩個樞軸中不存在的屬性(即,在Pivot 1中不存在黃色蘋果,並且沒有201402的數據)。然後,我將循環遍歷每個組並進行計算。這聽起來太亂了。

我目前正在考慮爲YearMonGroup創建一個範圍,然後在每個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

按照下面的答案,我簡單地否定了第二個數據集,以獲得差的值。

+1

你可以得到數據透視表後面的數據集嗎?如果是這樣,你可以使用SUMIFS來獲得每個分組的總數,然後減去這兩個組。只是另一種方法...可能不適合你的情況。 –

+1

我同意,獲取數據透視表背後的數據可以使它更容易。將兩個數據集組合成一個長數據集,並將一個集合中的數量乘以-1,然後基於此組合數據集執行新的數據透視表。然後,您的透視表會自動顯示兩者之間的差異,並且您仍然可以以任何想要的方式重新排列/切分和旋轉透視表。 –

+0

Rob G的解決方案顯然是做到這一點的正確方法。學習如何做到這一點,你會變得更好excel –

回答

1

爲了證明我的建議。把你的數據1,乘以-1的所有款項,並添加數據2吧,給你:

Combined Data

做基於該組合數據透視表爲您提供:

New Pivot Table

數據透視表SUM爲您做出了不同的選擇,無論您想要的任何行/列組合。訣竅是乘以-1數據設置爲-1

特技:在新單元格中鍵入-1,在該單元格中鍵入Ctrl-C,然後選擇數據1組中的所有值,然後執行選擇性粘貼並選擇「乘「

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

我不認爲有任何內置的功能來透視表結合起來。所以通常這個問題似乎並不是特定於數據透視表 - 而是如何組合/減去/添加兩個獨立的數據表。

SubtractTwoTables

不知道,如果你正在尋找一個VBA解決方案,但這是與(非常詳細)電子表格公式做這件事。你也可以使用像Scott提到的SUMIF公式或只使用原始數據。祝你好運。

+0

感謝您的回答,我會研究並儘快跟進。 – Kermit

+0

此方法要求您爲結果表創建您自己的模板,其中包含您將需要的所有標題和行標籤(複製/粘貼唯一值在此可能會有所幫助)。 – Stepan1010

+0

+1,但是如果將公式分割並添加到上面的行中,並且在結果表旁邊添加一列,則公式會更簡單 - 更具可讀性和可審覈性。 – whytheq