- 締切済み
Excelのピボットの項目をVBAで追加するには
ExcelでRaw dataからVBAでピボットテーブルを作成しています。 現在のピボットの項目には「個別の売り上げ金額」と「個別の売り上げ目標」が個人ごとに集計されているところまでできています。 私はこれから個人ごとの達成率(「個別の売り上げ金額」/「個別の売り上げ目標」 )を追加で出したいと考えています。 VBAを使わずに手動であればピボットフィールドテーブルツールの集計フィールドから「個別の売り上げ金額」/「個別の売り上げ目標」を行って簡単にできなくもないですが、VBA(コード)で達成率まで出したいです。 今回のようにすでにピボットで出ている項目から追加して新たな項目をVBAで出すにはどのようにすればよいでしょうか? 参考となるサイトなどでもあれば教えて下さい。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
使ったことがないので解説はできませんが 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
お礼
丁寧な回答ありがとうございます。 SQL文はデータベースなどで用いられているようで便利そうですね。 勉強になりました。