• 締切済み

VBA エクセル ピボットテーブル

皆様、こんにちは。 VBAでいくつかの表を合わせたピボットテーブルのようなものを作ろうとしていますが、やり方がよく分かりません。 例えば、次のような表があって 表1 350 Mat1 5674 t 640 Mat2 247 l 43 Ax1 24 t 0 … 0 表2 458 Mat3 5467 t 674 Mat1 674 t 98 Ax2 13 t 15 Ax3 87 l … 次のようなピボットテーブルを考えています ↓ ピボットテーブル 1024 Mat1 6318 t 640 Mat2 247 l 458 Mat3 5467 t 43 Ax1 24 t 98 Ax2 13 t 15 Ax3 87 l つまり、同様な項目を合計し、異なるものを別々に入力したいです。ただし、対象となる表の数はユーザーが決めるので、固定したものではない。対象となる表の形式は同様です。 もしご存知の方がいらっしゃったら、教えてください。 どうぞよろしくお願いいたします m(_ _)m

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

例えば、 『表がシートごとになっていて、必ずA1セルを起点とする』 『対象となる表の数はユーザーがシートを選択する事によって決定する』 というルールの元、ご提示のレイアウト通りに処理しようとすると、一例ですが Sub try()   Dim ws As Worksheet   Dim dic As Object   Dim r  As Range   Dim s  As String   Dim i  As Long   Dim j  As Long   Dim ix As Long   Dim x  As Long   Dim v  As Variant   Dim w(1 To 65535, 1 To 4)   Set dic = CreateObject("scripting.dictionary")   For Each ws In ActiveWindow.SelectedSheets     With ws.Range("A1").CurrentRegion.Resize(, 4)       Set r = Intersect(.Cells, .Offset(1))     End With     If Not r Is Nothing Then       v = r.Value       For i = 1 To UBound(v)         s = v(i, 2) & vbTab & v(i, 4)         If dic.Exists(s) Then           ix = dic(s)           w(ix, 1) = w(ix, 1) + v(i, 1)           w(ix, 3) = w(ix, 3) + v(i, 3)         Else           x = x + 1           dic(s) = x           ix = x           For j = 1 To 4             w(ix, j) = v(i, j)           Next         End If       Next       Set r = Nothing     End If   Next   ActiveSheet.Select   If x > 0 Then     With Sheets.Add       .Range("A1:D1").Value = Array("field1", "field2", "field3", "field4")       .Range("A2:D2").Resize(x).Value = w     End With   End If   Set dic = Nothing End Sub こんな感じで処理できます。 ですが"scripting.dictionary"という外部オブジェクトを使いますし、 配列に対して理解しておく事も必要になります。 コード内容が理解できなければメンテナンスも難しいのでハードルは高いです。 でも『いくつかの表をまずコピーしてまとめてしまえば』ピボットテーブルが使えます。 (画像) そのコピーでまとめる作業と、ピボットテーブルを作る作業をマクロにしてしまえば良いです。 完成形を妥協すればここまででもいいですし、 必要であればピボットテーブルを[コピー]-[値貼り付け]する事でピボットを解除し、 列を組みかえれば良いです。

lyu05665
質問者

お礼

end-u様、ありがとうございます。 >コード内容が理解できなければメンテナンスも難しいのでハードルは高いです。 そうですね、難しそうです。とりあえず、全部の表を一つの表にコピーして、そこからフィルターで整理し選び出すようなプロシージャを考えてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.2

こんにちは  VBAでなくてもピボットウィザードの「複数のワークシート範囲」を選べば画像のようなものは作れますが..  その前に表自体を設計し直した方がよさげな気がします。  ピボットテーブルを作ると無条件に集計されるので集計して意味のあるものと無いものをしっかり区別しないと。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の表現が問題あり、もっと丁寧に表現すること。 表1、表2、・・はシートが別か?別として。 シートの例を挙げるなら、項目見出し(列)ぐらいそれらしきものを考えてあげよ。Mat1に関しては商品名とか。 列見出しは各シートで同じ内容で同じ順序なんですね?。 行の(例で言うとB列?)のMat1などの(例えば商品別の)合計を 各シートに渉って合計したいと言うことか。 ーー ピボットや「串刺し演算」や「統合」がエクセルの機能にあるのに、なぜVBAを持ち出すのか? それにこの問題はVBAでコードを書いてくださいという丸投げではないか。丸投げは規約上ダメです。 >存知の方がいらっしゃったら 誰かだけが知っているというより、色んな方法が考えられて、どの方法でやるかの問題です。 中には(統合)その操作をして、マクロの記録を取り、必要箇所を修正すると言う方法もあり、エクセルVBAらしいやり方である。 >異なるものを別々に入力したいです 手作業で出すわけでないなら、入力とは言わない。コンピュタ処理の結果は、どちらかと言えば出力である。 表現は、「商品別に別シートに合計したい」で良い。 数字項目は合計らしいが、tやlはどうする? これは単位記号か? ーーーー 例えばMat1は1つのシートに2度以上現れないのか? ーー およそのシート数の最多上限や最大行数はどんなものか?

lyu05665
質問者

補足

ご返答をどうもありがとうございます。 >シートの例を挙げるなら、項目見出し(列)ぐらいそれらしきもの>を考えてあげよ。Mat1に関しては商品名とか。 >列見出しは各シートで同じ内容で同じ順序なんですね?。 こちらのサイトでどうやって画像をアップロードすればいいか分からなくて、文章で作ってみましたが、ダメでした。さっき、画像の追加という機能を見つけて、追加しましたが、小さすぎて何もわかりませんね。列見出しは各シートで同じ内容で同じ順序です。 >ピボットや「串刺し演算」や「統合」がエクセルの機能にあるのに、なぜVBAを持ち出すのか? それは、ユーザーが1回くりっくするだけで簡単に結果を得るために作っているからです。 >それにこの問題はVBAでコードを書いてくださいという丸投げではないか。丸投げは規約上ダメです。 コードを書けと言うのではなく、アイディアやヒントをいただきたいです。VBAの初心者なので、どこから考えればいいかさえ分からなくて、コードを書きたくても書けません。 >誰かだけが知っているというより、色んな方法が考えられて、どの方法でやるかの問題です。 中には(統合)その操作をして、マクロの記録を取り、必要箇所を修正すると言う方法もあり、エクセルVBAらしいやり方である。 対象とする表の数をユーザーが決める(ユーザーがあるフォームに従ってそれぞれの表を作ることになっている)ので、マクロの記録でコードを作ることが難しいかと思います。 >手作業で出すわけでないなら、入力とは言わない。コンピュタ処理の結果は、どちらかと言えば出力である。 表現は、「商品別に別シートに合計したい」で良い。 外国人なので、日本語のおかしいところをお許しください。それでも一所懸命考えて書いていますから。 >数字項目は合計らしいが、tやlはどうする? これは単位記号か? そのとおりです。表には数値と文字列、両方入っています。 >例えばMat1は1つのシートに2度以上現れないのか? そのとおりです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのピボットテーブルについて

    お世話になります。 エクセル2010のピボットテーブルの使い方について 教えてください。 ピボットテーブルである項目Aの合計と別の項目Bの合計を 求めてその合計の割り算(Aの合計/Bの合計)を表示させたいのですが Aの合計・Bの合計は求められますがその商の表示のさせ方がわかりません 初歩的な質問かもしれませんが 教えていただけないでしょうか よろしくお願いします。

  • ピボットテーブルについて

    以前誰かが作ったピボットテーブルを見て、同じようなものを作りたいと思って挑戦しているのですが、どうしてもうまくいかないので、教えていただきたいのです。 ずらずらと項目と数字がならんでいる表があり、売上予定と粗利予定の合計、その二つの数字から粗利率を出して表示させるというものです。 表の中には「粗利率」という項目はありませんが、以前作られたピボットには、「粗利率」が表示されています。計算もあっています。 新規で作ろうとすると、「粗利率」の項目が無いため、表示されません。 項目が無いのに表示され、しかもきちんと計算されている。 できれば同じように作りたいのですが、どうすればいいでしょうか?

  • エクセルピボットテーブルのフィールドアイテムについて

    はじめまして。質問させていただきます。 売上報告表を集計するためにピボットテーブルを使っています。(エクセル2003) 必要項目はフィールドのプルダウンにチェックを入れることで選択していますが、元データ側に今まで集計したことのない項目が増えるたびにピボットテーブル側でも表示されてしまいます。(取引先フィールドに新規取引会社が増えていく) 表示する項目は固定ですので、現在は増えてしまった項目のチェックを手作業ではずして対応していますが、この作業を行うピボットテーブルが20個近くあるので正直煩雑でたまりません。 (ピボットテーブルは全て一つのブック内にあります。シートは2枚です。参照データ範囲は同一です。) この状態でも選択した項目のみ固定で表示できる設定、もしくはマクロ等ありましたら教えて下さい。 よろしくお願いします。

  • EXCELのピボットテーブルで質問があります

    EXCELのピボットテーブルで質問があります 実際には品物は「りんご」ではないし「原価率」の話でもないのですが・・・ 日付 品物 個数 定価 原価率 2月1日 りんご 1 100 0.9 2月2日 りんご 1 100 0.9 上の表からピボットテーブルを作り「定価」*「原価率」の数式を入れると 原価率も合計されてしまうので欲しい答えではなくなってしまいます がピボットテーブルだと表の外からの参照が出来ないようです ピボットテーブルで定価の合計に対し「0.9」をかける方法はありませんか? EXCELは2002、2003、2007を使っています よろしくお願いします

  • ピボットテーブルを使用して出納表を作りたい。

    vistaでoffice2007を使用しています。 エクセル2007で出納表を作成しているのですが・・・ 合計・集計の際にSUMIFを使用しています。 でも当方としてはピボットテーブルを使用して項目ごとに集計を出したほうが 楽なのでは?と思い、ピボットテーブルで出た合計(集計結果)をコピペしたりするのですが・・ よく考えると月ごとに項目は変わりまして・・・ 1月には?という項目があっても2月には?がない場合があります。 その場合ピボットテーブルの項目まで変えないとダメなので、手間がかかるようにも思います。 出納表でピボットテーブルをウマく活用して集計結果を簡単に作ることはできないのでしょうか? 項目ごとに合計出したり・・・ また、月ごとに項目を変えて合計を出したりがしたいのですが・・・。 GETPIVOTDATAでの活用方法も出来ればご一緒に 教えていただけますでしょうか・・・!? 説明がまとまっていなくて申し訳ありません・・・。 ※複雑な関数やマクロなどは使用しません。

  • 【Excel2003】テーブルからピボットテーブル

    【Excel2003】で、リスト形式の表ではなく、テーブル形式の表からピボットテーブルの枠を作成するにはどうすればいいのでしょうか? Excel2007や2010バージョンでは、すぐにできるのですが。。

  • ピボットテーブルについて

    基本的なことかもしれませが、教えて下さい。 ピボットテーブルで縦が支店別、横が種類別の売上合計を作成しました。ところが、キャンセルになったものも含まれてしまっていて売上があいません。キャンセル又は成約データは元の表「ステータス」という項目です。この「ステータス」から成約だけを抜き出して合計を求めたいのですが、、、。よろしくお願い致します。

  • ピボットテーブルについて

    こんにちは、困っているので教えてください。 名前 データ           商品1   商品2    商品3   商品4    商品5    商品6    総計 合計 / 売上       100000  10000    10000   10000    10000   10000      150000 合計 / 使用量      800     100     100     100     100     100      1300 合計 / 原価       80000   8000    8000    8000    8000    8000      120000 平均 / 興研利益    25      20      20     20      20      20       20.83333333 上記のような表をピボットテーブルにて作成しております。最後の総計箇所ですが現在【20.83333333】になっております。これは【25+20+20+20+20+20/6=20.83333333】となっております。 ですがこちらが求めたい総計は、【(150000-120000)/1300=23.0769】のようにしたいのですが、ピボットテーブル内で関数組む事が出来ませんので困っています。 そもそもピボットテーブルは上記のような計算方法以外には存在しないのでしょうか? どなたか良い案をお持ちの方がいらっしゃいましたらご教授願います。 ※ピボットテーブルに拘らなくてもOKです。

  • エクセルのピボットテーブルを使った集計

    ピボットテーブルで項目ごとの合計を出して、その項目の全体に対する比率を出したいと思っています。 最終的には、項目の合計を棒グラフ、比率を折れ線グラフにしたいのですが、一度の作業でできるのでしょうか? 教えてください。

  • VBAでピボットテーブルは作れるものでしょうか

    2つ連続して質問してしまい申し訳ありません。 以下のようなExcelデータがあります。 このデータを用いて、ピボットテーブルを作りたいと考えています。 縦項目に変数A(氏名)、横項目に変数B(科目) クロス表に示される値を変数C(得点) としたいと考えています。 変数Dは過去の試験結果で今回は用いません。 手操作でのピボットテーブルは自分で作成できるのですが、今後のために 自動的に処理させる一環として、VBAのプログラムでピボットテーブルを 作成したいと考えています。 そのようなことは可能でしょうか? もし可能でしたらどのようなコードになるのでしょうか。 お手数ですが、教えていただけると幸いです。 よろしくお願いいたします。 A    B C  D Xさん 国 60 65 Xさん 社 90 85 Xさん 数 70 55 Xさん 理 80 75 Xさん 英 65 70 Yさん 国 85 85 Yさん 社 95 90 Yさん 数 95 100 Yさん 理 90 90 Yさん 英 85 90 Zさん 国 55 60 Zさん 社 40 35 Zさん 数 40 50 Zさん 理 60 65 Zさん 英 35 30

専門家に質問してみよう