・はじめに
取引先の担当者様から「決算月なので、取引先別 × 年月単位の売上一覧を提出してほしい」と依頼を受けたことが、今回のVBA作成のきっかけでした。
売上データは請求日ごとに管理されており、フィルターを使えば手作業でも集計できます。しかし、
- 集計ミスが起きやすい
- 作業時間がかかる
- 毎月のルーティン作業としては非効率
といった課題があり、より正確で効率的な方法を探す必要がありました。
そこで、Excel VBAでピボットテーブルを自動生成し、月別・取引先別の売上を一瞬で集計できる仕組みを作成しました。本記事では、その実際のコードと使い方を紹介します。
・今回のVBAでできること
このVBAを使うと、次のような処理を自動化できます。
- 明細(1行ごと)で管理している売上データを自動で集計
- 月別 × 取引先別の売上表をピボットテーブルで作成
- ボタン1つで集計表を更新
- 手作業のフィルター作業や転記作業をゼロにできる
実務で使える形にしているので、月次資料の作成が大幅に楽になります。
・こんな方におすすめ
- 明細データを区分ごとに手作業で集計している
- 毎回ピボットテーブルを作成して集計している
- 月次資料の作成に時間がかかっている
- VBAで業務を自動化したい
- 集計ミスを減らしたい
・サンプル(完成イメージ)
「取引先別集計」ボタンをクリックすると、次のようなピボットテーブルが自動で作成されます。
縦軸:年月別
横軸:取引先別
値:売上金額(合計)
毎月の売上推移や取引先別の比較が一目でわかる表が完成します。

・VBAコード(ボタンに設定する処理)
Private Sub CommandButton1_Click()
'ピボットテーブルの作成
Dim pvCacheData As PivotCache, pvTableData As PivotTable
'ピボットテーブルが1つの場合は更新をする。
If ActiveSheet.PivotTables.Count = 1 Then
ActiveSheet.PivotTables(1).PivotCache.Refresh
Exit Sub
End If
'ピボットの範囲を設定
Set pvCacheData = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=Range("A2:D" & Range("A2").CurrentRegion.Rows.Count & ""))
'ピボットテーブルを作成
Set pvTableData = pvCacheData.CreatePivotTable _
(TableDestination:=Range("G2"), TableName:="売上集計")
With pvTableData
.PivotFields("請求日").Orientation = xlRowField
.PivotFields("取引先").Orientation = xlColumnField
.AddDataField Field:=pvTableData.PivotFields("金額"), _
Caption:="合計金額", Function:=xlSum
.PivotFields("合計金額").NumberFormat = "#,##0"
'年月単位で集計
Range("G4").Group periods:=Array(False, False, False, False, True, False, True)
End With
End Sub
・まとめ
ピボットテーブルを知るまでは、フィルターを使って手作業で集計していました。しかし、VBAで自動化することで、
- 集計ミスが減る
- 作業時間が大幅に短縮される
- 毎月のルーティン作業が効率化される
といったメリットを実感しています。
この記事の内容は、私自身の実務経験をもとにまとめています。
同じように売上集計で悩んでいる方の助けになれば嬉しいですし、この記事をきっかけにVBAに興味を持っていただけたら幸いです。
ここまで読んでいただき、ありがとうございます。
・ご注意
・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
Excel2021、2019、2016


コメント