Excelのテーブル(ListObject)は、データの追加や管理に強力な機能を持っています。
特に便利なのが 集計処理(合計・件数・平均など) です。通常のセル範囲でも集計は可能ですが、テーブルを使うことで「列名をキーにして参照できる」「行が増減しても自動対応できる」といったメリットがあります。
この記事では、VBAを使って テーブルの特定列を対象に集計処理を行う方法 を解説します。
目次
1. テーブルの列を参照して合計(SUM)を求める
例えば「売上金額」列の合計を計算したい場合、以下のように書けます。
Sub TableSumExample()
Dim ws As Worksheet
Dim tbl As ListObject
Dim sumValue As Double
'対象のシートを指定
Set ws = ThisWorkbook.Sheets("Sheet1")
'シート内の1つ目のテーブルを取得
Set tbl = ws.ListObjects(1)
'「売上金額」列の合計を取得
sumValue = Application.WorksheetFunction.Sum(tbl.ListColumns("売上金額").DataBodyRange)
'結果を表示
MsgBox "売上金額の合計は " & sumValue & " です。"
End Sub
ポイント
tbl.ListColumns("売上金額").DataBodyRange
→ 「売上金額」列のデータ範囲を取得。Application.WorksheetFunction.Sum(...)
→ その範囲に対して合計を計算。
2. 件数(COUNT)を求める
次に、データ件数をカウントする例です。
Sub TableCountExample()
Dim ws As Worksheet
Dim tbl As ListObject
Dim cnt As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
Set tbl = ws.ListObjects(1)
'「数量」列の件数を取得
cnt = Application.WorksheetFunction.Count(tbl.ListColumns("数量").DataBodyRange)
MsgBox "数量の入力件数は " & cnt & " 件です。"
End Sub
ポイント
Countは「数値が入力されているセルの数」を数えます。- 文字列も含めたい場合は
CountAを使うと便利です。
3. 平均(AVERAGE)を求める
平均値を求めたい場合は Average を利用します。
Sub TableAverageExample()
Dim ws As Worksheet
Dim tbl As ListObject
Dim avgValue As Double
Set ws = ThisWorkbook.Sheets("Sheet1")
Set tbl = ws.ListObjects(1)
'「売上金額」列の平均を取得
avgValue = Application.WorksheetFunction.Average(tbl.ListColumns("売上金額").DataBodyRange)
MsgBox "売上金額の平均は " & avgValue & " です。"
End Sub
4. 複数列を組み合わせた集計(例:売上=数量×単価)
テーブル列を組み合わせて計算することも可能です。
Sub TableCustomCalculation()
Dim ws As Worksheet
Dim tbl As ListObject
Dim i As Long
Dim total As Double
Set ws = ThisWorkbook.Sheets("Sheet1")
Set tbl = ws.ListObjects(1)
'ループして「数量 × 単価」を合計
For i = 1 To tbl.ListRows.Count
total = total + tbl.DataBodyRange(i, tbl.ListColumns("数量").Index) * _
tbl.DataBodyRange(i, tbl.ListColumns("単価").Index)
Next i
MsgBox "総売上は " & total & " です。"
End Sub
ポイント
tbl.DataBodyRange(i, 列番号)で「i行目の特定列の値」を取得できる。- 複数列を掛け算・足し算して集計可能。
5. テーブルを使った集計のメリット
- 列名で参照できる → 列の位置が変わってもコードが壊れにくい。
- テーブルは動的に拡張 → 行が追加されても自動で範囲に含まれる。
- WorksheetFunctionを活用 → SUM・COUNT・AVERAGEなどExcel標準関数をそのまま利用可能。
6. まとめ
tbl.ListColumns("列名").DataBodyRangeを使えば特定列の範囲を簡単に取得できる。WorksheetFunction.Sum / Count / Averageを使えば集計処理を自動化できる。- 複数列を組み合わせれば自由なカスタム集計も可能。
- 列名参照により、列の位置変更やデータ追加にも柔軟に対応できる。
ExcelテーブルとVBAを組み合わせることで、集計作業を完全自動化でき、業務効率化につながります。
コメント