1

私はVBAにかなり慣れていませんが、プログラミングのバックグラウンドがあります。2つのExcelブックを開き、ピボットテーブルをコピーして、特別な値をステージングブックに貼り付けるために、VBAを作成しています。そこから、ピボットデータを比較し、違いを出力する必要があります。しかし、そこからどこへ行けばいいのかわかりません。

サンプルデータ

ピボット1

果物の合計YearMon
カテゴリグループ201205201206201207 201208 201209 ... 201401
アップルグリーン1.32.13.0..。
               赤1.01.52.0..。
りんご合計........。
ベリーストロー111.1 2.02.1..。
               黒111.0 0.90.9..。
ベラコ合計........。

ピボット2

果物の合計YearMon
カテゴリグループ201206201207201208 201209 201210 ... 201402
アップルグリーン1.52.33.2..。
               赤0.81.31.9..。
               黄色10.90.91..。
りんご合計........。
ベリーストロー111.3 1.82.1..。
               黒110.9 0.80.8..。
ベラコ合計........。

望ましい結果(ピボット2-ピボット1)

果物の合計YearMon
カテゴリグループ201205201206201207 201208 201209 201210 ... 201402
アップルグリーン-0.6-0.7..。
               赤-0.7-0.7..。
りんご合計........。
ベリーストロー0-0.1-0.7-0.3..。
               黒000-0.1..。
ベリー合計........。

私の最初の衝動は、それぞれに基づいて配列を配置しYearMon、それらをループして、両方のピボットに存在しない属性を削除することです(つまり、黄色いリンゴはピボット1に存在せず、のデータはありません)。次に、各グループをループして計算を行います。これはあまりにも厄介に聞こえます。GroupCategory201402

私は現在、との範囲を作成しYearMon、次にそれぞれの値を比較するGroupために、範囲を垂直方向と水平方向にループすることを考えています。それぞれが止まるCategory場所を正確に見つける方法、またはおそらく使用できるかどうかわかりませんか?または、2つのピボットを比較する簡単な方法はありますか?CategoryVLOOKUP

アップデート1

コメントの大部分は、このタスクを実行するためにピボットの背後にあるソースデータを使用することを試みることを推奨しています。私はデータを取得し、上記のスキームに従うことができます。これは次のようになります。

データ1

カテゴリグループYearMon値
アップルグリーン2012071.3
アップルグリーン2012082.1
アップルグリーン2012093.0
アップルレッド2012071.0
アップルレッド2012081.5
アップルレッド2012092.0
ベリーストロー2012051.0
ベリーストロー2012061.0
ベリーストロー2012071.1
ベリーストロー2012082.0
ベリーストロー2012092.1
ベリーブラック2012051.0
ベリーブラック2012061.0
ベリーブラック2012071.0
ベリーブラック2012080.9
ベリーブラック2012090.9

データ2

カテゴリグループYearMon値
アップルグリーン2012081.5
アップルグリーン2012092.3
アップルグリーン2012103.2
アップルレッド2012080.8
アップルレッド2012091.3
アップルレッド2012101.9
アップルイエロー2012071.0
アップルイエロー2012080.9
アップルイエロー2012090.9
アップルイエロー2012101.0
ベリーストロー2012061.0
ベリーストロー2012071.0
ベリーストロー2012081.3
ベリーストロー2012091.8
ベリーストロー2012102.1
ベリーブラック2012061.0
ベリーブラック2012071.0
ベリーブラック2012080.9
ベリーブラック2012090.8
ベリーブラック2012100.8

以下に提案するように試みた後SUMIFS、比較を行うために、各データセットの各基準(Category、Group、YearMon)を指定する必要があるようです。おそらく、機能する他の機能がいくつかありますか?

アップデート2

もう1つの提案は、データセットを組み合わせてピボット内からの差を計算することでした。これらの2つのデータセットを組み合わせた後、各データセット(1または2)を識別する別の列を含めずに、差の計算を行う方法を理解できないようです。そこから比較を行うことができます。私は何か間違ったことをしていますか?

アップデート3

以下の回答に従って、違いを取得するために2番目のデータセットの値を単純に否定しました。

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

ピボットテーブルを組み合わせるための組み込み関数はないと思います。したがって、一般的に、この問題はピボットテーブルに固有の問題ではなく、2つの別々のデータテーブルを結合/減算/追加する方法に固有の問題ではないようです。

SubtractTwoTables

VBAソリューションを探しているかどうかはわかりませんが、それは(非常に冗長な)スプレッドシートの数式を使用してそれを行う1つの方法です。また、Scottが言及したようなSUMIF式を使用することも、元のデータを操作することもできます。幸運を。

于 2012-09-28T19:09:51.097 に答える
1

私が提案していたことを示すため。データ1を取得し、すべての金額に-1を掛けて、それにデータ2を追加すると、次のようになります。

結合されたデータ

その結合されたデータに基づいてピボットテーブルを実行すると、次のようになります。

新しいピボットテーブル

ピボットテーブルSUMは、必要な行/列の組み合わせに応じて違いをもたらします。秘訣は、1つのデータセットに-1を掛けることです。

トリック:新しいセルに-1と入力し、そのセルでCtrl-Cを押してから、データ1グループのすべての値を選択し、[形式を選択して貼り付け]を実行して[乗算]を選択します。

于 2012-10-02T23:05:14.823 に答える