• 締切済み

Excelのピボットの項目をVBAで追加するには

ExcelでRaw dataからVBAでピボットテーブルを作成しています。 現在のピボットの項目には「個別の売り上げ金額」と「個別の売り上げ目標」が個人ごとに集計されているところまでできています。 私はこれから個人ごとの達成率(「個別の売り上げ金額」/「個別の売り上げ目標」 )を追加で出したいと考えています。 VBAを使わずに手動であればピボットフィールドテーブルツールの集計フィールドから「個別の売り上げ金額」/「個別の売り上げ目標」を行って簡単にできなくもないですが、VBA(コード)で達成率まで出したいです。 今回のようにすでにピボットで出ている項目から追加して新たな項目をVBAで出すにはどのようにすればよいでしょうか? 参考となるサイトなどでもあれば教えて下さい。

みんなの回答

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

使ったことがないので解説はできませんが https://tonari-it.com/excel-vba-pivotcache-create-pivot-table/ の下のほうにリンクがあり、参考になるかもしれません。 VBAを使うのであれば、私だったら ピボットテーブルを使わず sql文で集計します。 Option Explicit Sub SampleSQL()  Dim cn As Object  Dim rs As Object  Dim wkSQL As String  Dim i As Long    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 ThisWorkbook.FullName  With ThisWorkbook.Sheets("Sheet2")     .Cells.ClearContents '出力先クリアー     wkSQL = "SELECT" & vbCrLf      'SQL文組み立て   wkSQL = wkSQL & "[名前] as 名前," & vbCrLf   wkSQL = wkSQL & "sum([売上]) as 売上," & vbCrLf   wkSQL = wkSQL & "sum([目標]) as 目標," & vbCrLf   wkSQL = wkSQL & "(sum([売上])/sum([目標])) as 割合" & vbCrLf   wkSQL = wkSQL & "FROM [Sheet1$A1:Z65000]" & vbCrLf   wkSQL = wkSQL & "GROUP BY [名前]" & vbCrLf   wkSQL = wkSQL & "order BY [名前]" & vbCrLf   rs.Open wkSQL, cn   'SQL文実行     For i = 1 To rs.Fields.Count  '列名を出力    .Cells(1, i) = rs.Fields(i - 1).Name   Next     .Cells(2, 1).CopyFromRecordset rs   '結果セットを格納  End With  rs.Close           '以下、後処理  Set rs = Nothing  cn.Close  Set cn = Nothing End Sub

englaw
質問者

お礼

丁寧な回答ありがとうございます。 SQL文はデータベースなどで用いられているようで便利そうですね。 勉強になりました。