ここでは For Each × Offset × Resize を組み合わせて「行単位で複数列ブロックを動的に処理する」応用パターンをまとめます。
単純な隣列操作から一歩進んで、行ごとのブロック処理・集計・抽出・拡張を自在に扱える黄金テンプレです。
応用パターン 10選
1. 各行の右隣に小計ブロックを追加
Dim r As Range
For Each r In Range("B2:E20").Rows
r.Resize(1, 4).Offset(0, 4).Value = WorksheetFunction.Sum(r.Resize(1, 4))
Next r
VB👉 各行の4列分を合計して右隣に出力。
2. 各行の右隣に平均値を出力
Dim r As Range
For Each r In Range("C2:F20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Average(r)
Next r
VB👉 各行の平均値を右端のさらに右隣に出力。
3. 各行の右隣に最大値を出力
Dim r As Range
For Each r In Range("D2:H20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Max(r)
Next r
VB👉 各行の最大値を右隣に出力。
4. 各行の右隣に最小値を出力
Dim r As Range
For Each r In Range("D2:H20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Min(r)
Next r
VB👉 各行の最小値を右隣に出力。
5. 各行の右隣に「件数」を出力
Dim r As Range
For Each r In Range("A2:D20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Count(r)
Next r
VB👉 各行のデータ件数を右隣に出力。
6. 各行の右隣に「異常値件数」を出力
Dim r As Range, cell As Range, cnt As Long
For Each r In Range("B2:E20").Rows
cnt = 0
For Each cell In r.Cells
If IsNumeric(cell.Value) And cell.Value < 0 Then cnt = cnt + 1
Next cell
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = cnt
Next r
VB👉 各行の負の値件数を右隣に出力。
7. 各行の右隣に「累積値」を展開
Dim r As Range, sumVal As Double
sumVal = 0
For Each r In Range("C2:F20").Rows
sumVal = sumVal + WorksheetFunction.Sum(r)
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = sumVal
Next r
VB👉 各行の累積値を右隣に展開。
8. 各行の右隣に「差分」を出力
Dim r As Range
For Each r In Range("G3:J20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = WorksheetFunction.Sum(r) - WorksheetFunction.Sum(r.Offset(-1, 0).Resize(1, r.Columns.Count))
Next r
VB👉 各行の合計と前行との差分を右隣に出力。
9. 各行の右隣に「判定結果」を出力
Dim r As Range
For Each r In Range("A2:D20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = (WorksheetFunction.Sum(r) >= 500)
Next r
VB👉 各行の合計が500以上なら TRUE、未満なら FALSE を右隣に出力。
10. 各行の右隣に「タグ」を一括付与
Dim r As Range
For Each r In Range("A2:D20").Rows
r.Cells(1, r.Columns.Count).Offset(0, 1).Value = "Row_" & r.Row
Next r
VB👉 各行の右隣に「行番号タグ」を付与。
✅ まとめ
- For Each r In Range(…).Rows → 行単位でループ
- Offset → 隣列に結果を出力
- Resize → 行ブロックを拡張して一括処理
- 応用編 → 小計・平均・最大/最小・件数・異常値・累積・差分・判定・タグ付与
💡 この「行ループ × Offset × Resize 複合応用編」をベースにすれば、売上表・勤怠表・在庫表などの 業務別ライブラリ に直結できます。


