集計処理(合計・平均・件数など)
Excel VBAでよく使うのが「集計処理」です。売上データや数量データをまとめて 合計・平均・件数・最大値・最小値 を求める場面は多いです。初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- Rangeを配列に読み込む → 大量データでも高速。
- ループで集計 → 合計・件数・条件付き集計。
- WorksheetFunctionを活用 →
Sum、Average、Count、Max、Minなど。 - Dictionaryを使えばグループ集計も可能。
テンプレ1:合計を求める(ループ)
Sub Sum_Loop()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C100") ' 数量列
Dim v As Variant: v = rg.Value
Dim sumVal As Double, r As Long
For r = 1 To UBound(v, 1)
sumVal = sumVal + v(r, 1)
Next r
MsgBox "合計=" & sumVal
End Sub
VB- ポイント: 配列に読み込んでループで合計。
テンプレ2:平均を求める(WorksheetFunction)
Sub Average_Function()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C100")
Dim avgVal As Double
avgVal = WorksheetFunction.Average(rg)
MsgBox "平均=" & avgVal
End Sub
VB- ポイント:
WorksheetFunction.Averageを使えば簡単。
テンプレ3:件数を求める(Count)
Sub Count_Function()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C100")
Dim cnt As Long
cnt = WorksheetFunction.Count(rg)
MsgBox "件数=" & cnt
End Sub
VB- ポイント: 数値セルの件数を数える。
テンプレ4:最大値・最小値
Sub MaxMin_Function()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C100")
Dim maxVal As Double, minVal As Double
maxVal = WorksheetFunction.Max(rg)
minVal = WorksheetFunction.Min(rg)
MsgBox "最大値=" & maxVal & vbCrLf & "最小値=" & minVal
End Sub
VB- ポイント:
MaxとMinで範囲の最大・最小を取得。
テンプレ5:条件付き集計(If文)
Sub Sum_Condition()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("C2:C100") ' 数量列
Dim v As Variant: v = rg.Value
Dim sumVal As Double, r As Long
For r = 1 To UBound(v, 1)
If v(r, 1) >= 100 Then
sumVal = sumVal + v(r, 1)
End If
Next r
MsgBox "100以上の合計=" & sumVal
End Sub
VB- ポイント: 条件を満たすデータだけ集計。
テンプレ6:グループごとの集計(Dictionary)
Sub Sum_ByGroup()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C100") ' A=商品名, C=数量
Dim v As Variant: v = rg.Value
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim r As Long, key As String
For r = 1 To UBound(v, 1)
key = v(r, 1) ' 商品名
If dict.Exists(key) Then
dict(key) = dict(key) + v(r, 3)
Else
dict(key) = v(r, 3)
End If
Next r
' 結果出力
Dim k As Variant
For Each k In dict.Keys
Debug.Print k, dict(k)
Next k
End Sub
VB- 結果例:
りんご 250 みかん 180 バナナ 300
例題で練習
'例1:合計を求める
Sub Example1()
Sum_Loop
End Sub
'例2:平均を求める
Sub Example2()
Average_Function
End Sub
'例3:件数を求める
Sub Example3()
Count_Function
End Sub
'例4:最大値・最小値
Sub Example4()
MaxMin_Function
End Sub
'例5:条件付き集計
Sub Example5()
Sum_Condition
End Sub
'例6:グループごとの集計
Sub Example6()
Sum_ByGroup
End Sub
VB初心者向けポイント
- WorksheetFunctionを活用 → 合計・平均・件数・最大・最小が簡単に書ける。
- 配列で処理すると高速 → 大量データでも一瞬。
- 条件付き集計はIf文 → フィルタのような処理が可能。
- Dictionaryでグループ集計 → 商品別・顧客別の集計に便利。
👉 この「集計処理テンプレ」を覚えておけば、売上データや数量データの 合計・平均・条件付き集計・グループ集計 を高速に実務へ応用できます。
