|
こんにちは。かみちゃん です。
>やはり、具体的な例がなければご教授をいただくのは難しいですよね。
>サンプルのフォーマットをもう一度考え直してから質問させていただきます。
今までのサンプルデータを再度整理してみました。
【db.xls】
A B C D
1 得意先 営業部門 商品 受注総額
2 AAA 京都 ○ 100
3 AAA 京都 ■ 200
4 AAA 京都 △ 300
5 AAA 大阪 ○ 400
6 AAA 大阪 ■ 500
7 AAA 大阪 △ 500
8 AAA 神戸 ○ 400
9 AAA 神戸 ■ 300
10 AAA 神戸 △ 200
11 BBB 京都 ○ 100
12 BBB 京都 ■ 600
13 BBB 京都 △ 700
14 BBB 大阪 ○ 800
15 BBB 大阪 ■ 900
【db.xls】ピボットテーブル集計
A B C D E F G
1
2
3 合計 / 受注総額 得意先 営業部門
4 AAA BBB 総計
5 商品 京都 神戸 大阪 京都 大阪
6 ■ 200 300 500 600 900 2500
7 △ 300 200 500 700 1700
8 ○ 100 400 400 100 800 1800
9 総計 600 900 1400 1400 1700 6000
【d.xls】得意先AAA
A B C D E
京都 大阪 神戸 合計
1 ○ 100 400 400 900
2 ■ 200 500 300 1000
3 △ 300 500 200 1000
4 合計 600 1400 900 2900
【制約条件】
1.d.xlsにある項目が、db.xlsにないものもある。
2.db.xlsの、ピボットテーブルで集計した複数の値を、d.xlsの1つのレンジに反映させなくてはい
けない部分がある。(例えば、db.xlsでは「商品○」は、「○A」と「○B」の二つがあるのでピ
ボットテーブル集計では当然「○A」「○B」の項目がでてくるけど、d.xls上では、○として○A,
○Bの合計を入力しなくてはいけない。)
以上のことを整理してさらに疑問が出てきました。
1.d.xlsは、得意先別にシートがわかれているのでしょうか?
2.db.xlsのレコードは、得意先、営業部門、集計した商品で重複しているのでしょうか?
この例では、重複していないことになります。
3.重複していないのであれば、d.xlsはピボットテーブルから参照するのではなく、VLOOKUP関数を
使った参照をすることもできます。d.xlsに直接、数式を設定することができないならば、db.xls
の別シートにd.xlsと同様のフォーマットを用意して、そこで、数式による参照をさせ、結果を
d.xlsの対象範囲に値貼り付けすることができます。
4.重複しているのであれば、やはりピボットテーブルによる集計を行ない、その集計結果のシート
をd.xlsからVBAで参照する形になります。
この参照の考え方ですが、d.xlsのB1は、「京都」の商品「○」ですが、db.xlsのピボットテーブル
集計のA列から「○」を探し、行番号を取得します。次に5行目から「京都」でかつ得意先が
「AAA」を探し、列番号を取得します。行番号と列番号が交差したところが値となります。
もっとも、決まったフォーマットでないならば、こんなややこしいことをしなくてもすむのです
が、とりあえず、一番複雑な方法で、コードを用意しています。
一度、ご検討ください。
|
|