Excel VBA | 行ループ × Offset × Resize の複合応用編テンプレ集

VBA
スポンサーリンク

ここでは 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 複合応用編」をベースにすれば、売上表・勤怠表・在庫表などの 業務別ライブラリ に直結できます。

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