• 締切済み

ExcelVBAでピボットテーブルの値を取得したい

ExcelVBAでグループ化したピボットテーブルからグループ化した内容を取得したいのですが、うまくいきません。詳しい方いらっしゃったらご教示をお願いしたいです。 具体的に言うと、下記ピボットテーブルの行ヘッダの場合、「グループ1-1」を指定したら「分類1」と「分類2」だけを取得したいです。 分類 ----------------------------- + グループ1  + グループ1-1   分類1   分類2  + グループ1-2   分類3   分類4

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

既にpivotテーブルの集計結果があり、 その中から 「グループ2-2」の下階層の行たち 添付のサンプル画像で言えば、 A6:B7を取得したいということなんですね? サンプル画像なら2行ですが、 実際は行数が変動しますでしょうから 第2階層がブレイクする行を特定する必要が出てきます。 少なくとも私には、これを特定することができません。 先に述べましたように、 pivotテーブルを介する必要はなく 後記コードで取得ができます。 よかったら参考にしてください。 なお、画像の左から1,2つ目が集計元ブック 3つ目が集計ブックの集計テーブル(ダイジェスト版)です。 Sub xxx()  Dim SQL As String  Dim cn As Object  Dim rs As Object  Dim i As Long    Const tgBook = "C:\work\SQL対象sampleブック.xlsx"    'SQL全文を組み立て  SQL = ""  SQL = SQL & "SELECT" & vbCrLf  SQL = SQL & "[1階層目分類],[2階層目分類],[3階層目分類],count([3階層目分類]) as [数]" & vbCrLf  SQL = SQL & "FROM [" & "Sheet4" & "$A1:Z50000]" & vbCrLf  SQL = SQL & "WHERE (([1階層目分類] = 'Group2') and ([2階層目分類] = 'Group2-2'))" & vbCrLf  SQL = SQL & "group by [1階層目分類],[2階層目分類],[3階層目分類]" & vbCrLf    'SQLを実行  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1"  cn.Open tgBook  rs.Open SQL, cn    '結果セットを出力  With ThisWorkbook.Sheets("集計結果")   .Cells.ClearContents '出力先クリアー   For i = 0 To (rs.Fields.Count - 1) '列名を出力    .Cells(1, i + 1).Value = rs.Fields(i).Name   Next   .Cells(2, 1).CopyFromRecordset rs  End With    '後処理  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing End Sub

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

課題となるものは ・私の掲示した画面のA1:B2を表示する ・VBAでこのA1:B2をコントロールする ・VBAでこのA3:B6の分類と値を取得する ということになりますか? まず、A1:B2を表示する設定は、添付画像個所の赤囲みの設定です。 もし、ゴールが、 >グループや分類のうち、特定の項目だけを抽出したダイジェスト版。 ならば、あえてpivotテーブルを介する必要はない むしろ、介在させると、VBAの実装が複雑になり 私だったらやりません。 テーブルの構造と >グループや分類のうち、特定の項目だけを抽出したダイジェスト版。 の仕様を説明してもらえれば、 >●集計元ブック(このブックが多数あります) >・データシート から、直接 >グループや分類のうち、特定の項目だけを抽出したダイジェスト版。 をVBAで作成するサンプルコードを提示できるんじゃないかと思います。

EXCEL21th
質問者

補足

ゴールは、下記シート全てを作成することです。 ●集計元ブック(このブックが多数あります)  ・集計テーブル(複数あるデータシートの全てを集計) ●集計ブック(1つしかありません)  ・集計テーブル(ダイジェスト版) 集計元のピボットテーブルでデータシートを集計してある必要があり、列は変わりませんが行がよく変わるので、ピボットテーブルを選択しています。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

期待していることがよくわからないんです。 既に添付画像のようなピボットテーブルがあって、 このテーブルをVBAで制御したいということですか? それとも、 データの一覧(リスト)があって、 ピボットテーブルを介することなく、ここから 第一階層、第二階層の条件を指定して 第三階層ごとのごとの合計表をVBAで作成したいですか? 後者であれば、リストの構造を紹介してもらえれば SQLをつかったサンプルなコードを紹介することが可能と思います。

EXCEL21th
質問者

補足

どちらかというと前者だと思います。 説明がわかりにくくて申し訳ないです。 ●集計元ブック(このブックが多数あります)  ・データ  ・ピボットテーブルがあるシート・・・①   →データシートから作成。    分類を特定条件でグループ化。    グループ化はピボットテーブルの機能を使用。    貼り付けていただいた画像の右側のような感じですが、    上の絞り込み条件?の部分がないのと、    グループが下の表に含まれています。    その結果が質問に書いた表になります。 ●集計ブック(1つしかありません)  ・集計テーブル(ダイジェスト版)・・・②   →集計元ブックのピボットテーブルから    グループや分類のうち、特定の項目だけを抽出した    ダイジェスト版。    集計元ブックがなくても開けるよう、    非ピボットテーブルにしたい。 があり、①から②を作成するVBAを作成しています。 ①のピボットテーブルが質問に記載したようなレイアウトになっており、うまくグループ/分類の情報が取得したいのです。 ※書き忘れていましたが、環境はOffice Professional Plus 2016(永続版)です。 ※補足で画像が貼れれば、サンプルを貼った方が速そうですが、  文字欄しかなさそうですね...

関連するQ&A

専門家に質問してみよう