スポンサーリンク

【VBA応用】テーブル内の特定列を使って集計処理(SUM・COUNTなど)を自動化する方法

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を組み合わせることで、集計作業を完全自動化でき、業務効率化につながります。

コメント

タイトルとURLをコピーしました