Excel VBA | Offset × Resize × ForEach の 黄金 100 パターン集

VBA
スポンサーリンク

集計ロジック(Offset × For Each 基本テンプレ集)

ここでは Offset × For Each を組み合わせて「集計・統計処理」を行うパターンを整理します。
行ごとの小計、グループ集計、累積計算など、実務でよく使う集計ロジックをまとめました。


81. 行ごとの小計を右端へ

Dim r As Range
For Each r In Range("B2:D10").Rows
    r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Sum(r)
Next r
VB

👉 各行の合計を右端列のさらに右隣に出力。


82. グループ単位に区切り線追加

Dim r As Range
For Each r In Range("A2:A20")
    If r.Value = "GroupEnd" Then
        r.EntireRow.Borders(xlEdgeBottom).LineStyle = xlContinuous
    End If
Next r
VB

👉 「GroupEnd」の行に区切り線を追加。


83. 月別集計を別ブロックに出力

Dim r As Range, dict As Object, pasteRow As Long
Set dict = CreateObject("Scripting.Dictionary")
For Each r In Range("B2:B100") ' 日付列
    If IsDate(r.Value) Then
        dict(Format(r.Value, "YYYY/MM")) = dict(Format(r.Value, "YYYY/MM")) + r.Offset(0, 1).Value
    End If
Next r

pasteRow = 2
Dim k As Variant
For Each k In dict.Keys
    Cells(pasteRow, 10).Value = k
    Cells(pasteRow, 11).Value = dict(k)
    pasteRow = pasteRow + 1
Next k
VB

👉 日付列から「月別集計」を右側ブロックに出力。


84. カテゴリ別件数を右列へ

Dim r As Range
For Each r In Range("C2:C20")
    If r.Value = "A" Then
        r.Offset(0, 1).Value = "カテゴリA"
    ElseIf r.Value = "B" Then
        r.Offset(0, 1).Value = "カテゴリB"
    End If
Next r
VB

👉 C列のカテゴリを判定して右隣に件数ラベルを出力。


85. 最大値の行に印を付ける

Dim maxVal As Double, r As Range
maxVal = WorksheetFunction.Max(Range("D2:D20"))
For Each r In Range("D2:D20")
    If r.Value = maxVal Then
        r.Offset(0, 1).Value = "MAX"
    End If
Next r
VB

👉 D列の最大値の行に「MAX」印を付ける。


86. 合計行を最下段へ自動追加

Dim lastRow As Long
lastRow = Cells(Rows.Count, 2).End(xlUp).Row
Range("B" & lastRow + 1).Value = WorksheetFunction.Sum(Range("B2:B" & lastRow))
VB

👉 B列の合計を最下段に自動追加。


87. 平均値を右列へ

Dim r As Range
For Each r In Range("E2:E20")
    r.Offset(0, 1).Value = WorksheetFunction.Average(Range("E2:E20"))
Next r
VB

👉 E列の平均値を右隣に出力。


88. 累積値を下方向に計算

Dim sumVal As Double, r As Range
sumVal = 0
For Each r In Range("F2:F20")
    sumVal = sumVal + r.Value
    r.Offset(0, 1).Value = sumVal
Next r
VB

👉 F列の値を累積計算して右隣に出力。


89. 差分を右隣に記録

Dim r As Range
For Each r In Range("G3:G20") ' 3行目から
    r.Offset(0, 1).Value = r.Value - r.Offset(-1, 0).Value
Next r
VB

👉 G列の値と前行との差分を右隣に記録。


90. グループ境界ごとに色付け

Dim r As Range
For Each r In Range("H2:H20")
    If r.Value <> r.Offset(-1, 0).Value Then
        r.EntireRow.Interior.Color = vbYellow
    End If
Next r
VB

👉 H列の値が前行と異なる場合、行全体を黄色で色付け。


✅ まとめ

  • Offset → 隣列や上下行に集計結果を出力
  • For Each → 行ごとに繰り返し処理
  • WorksheetFunction → 合計・平均・最大値などの統計関数を活用
  • Dictionary → 月別やカテゴリ別の集計に便利

💡 この「集計ロジック10パターン」をベースにすれば、実務で頻出する「小計・累積・差分・グループ集計」を自在に扱えます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました