Excel VBA | 「Offset × Resize × For Each」応用編テンプレ集

VBA
スポンサーリンク

ここまでの「黄金100パターン」を基礎に、Offset × Resize × For Each を組み合わせて「複数セルブロックを動的に処理する」応用パターンをまとめます。
単セル処理から一歩進んで、行・列・ブロック単位の自動化を狙います。


応用パターン 10選

1. 行ごとの複数列を一括加工

Dim r As Range
For Each r In Range("A2:D20").Rows
    r.Resize(1, 4).Offset(0, 4).Value = r.Resize(1, 4).Value
Next r
VB

👉 各行の4列分を右隣にコピー。


2. 列ごとのブロックをまとめて判定

Dim c As Range
For Each c In Range("B:E").Columns
    c.Resize(10, 1).Offset(0, c.Columns.Count).FormulaR1C1 = "=AVERAGE(RC[-1])"
Next c
VB

👉 各列の10行分を対象に平均値を右隣に出力。


3. 行単位で複数列を条件色付け

Dim r As Range
For Each r In Range("A2:D20").Rows
    If WorksheetFunction.Sum(r) > 1000 Then
        r.Resize(1, 4).Interior.Color = vbYellow
    End If
Next r
VB

👉 行合計が1000超なら行全体を黄色に。


4. ブロック単位で上下比較

Dim r As Range
For Each r In Range("C3:C20")
    r.Resize(1, 3).Offset(0, 3).Value = r.Resize(1, 3).Value - r.Resize(-1, 3).Value
Next r
VB

👉 3列ブロックを「前行との差分」として右隣に出力。


5. データ範囲を自動検出して一括処理

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
For Each r In tbl.Rows
    r.Cells(1, tbl.Columns.Count + 1).Value = WorksheetFunction.Sum(r)
Next r
VB

👉 表全体を自動検出し、各行の右端に合計を追加。


6. 複数列をまとめて補助列生成

Dim c As Range
For Each c In Range("B:D").Columns
    c.Offset(0, c.Columns.Count).Resize(c.Rows.Count, 1).Value = "補助"
Next c
VB

👉 各列の右隣に「補助列」を追加。


7. 行ごとにタグを複数列へ展開

Dim r As Range
For Each r In Range("A2:A20")
    r.Offset(0, 1).Resize(1, 3).Value = Array("TAG1", "TAG2", "TAG3")
Next r
VB

👉 各行の右隣3列にタグを一括書き込み。


8. ブロックごとに累積計算

Dim r As Range, sumVal As Double
sumVal = 0
For Each r In Range("C2:C20")
    sumVal = sumVal + WorksheetFunction.Sum(r.Resize(1, 3))
    r.Offset(0, 3).Value = sumVal
Next r
VB

👉 3列ブロックを累積計算して右隣に出力。


9. 条件一致ブロックだけ抽出

Dim r As Range, pasteRow As Long
pasteRow = 30
For Each r In Range("A2:A20")
    If r.Value = "OK" Then
        r.Resize(1, 5).Copy Destination:=Cells(pasteRow, 1)
        pasteRow = pasteRow + 1
    End If
Next r
VB

👉 「OK」の行だけ5列分を下段へコピー。


10. 表全体を動的に再配置

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
For Each r In tbl.Rows
    r.Resize(1, tbl.Columns.Count).Copy Destination:=Sheets("Sheet2").Cells(r.Row, 1)
Next r
VB

👉 表全体を別シートへ行ごとにコピー展開。


✅ まとめ

  • Offset → 相対位置をずらす
  • Resize → ブロックサイズを拡張・縮小
  • For Each → 行・列・ブロック単位で繰り返し処理
  • 応用編 → 「複数列まとめ処理」「累積計算」「条件抽出」「再配置」など高度な自動化が可能

💡 この応用編をベースにすれば、売上表・勤怠表・在庫表などの 業務別ライブラリ に直結できます。

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