Offset × Resize × ForEach の「黄金パターン集」について
大量データ処理や表操作を Offset(相対位置指定) × Resize(範囲拡張) × For Each(繰り返し処理) で組み合わせると、Excel VBAの実務効率が飛躍的に上がります。
カテゴリ別パターン
1. 隣列処理パターン
- 隣列にコピー
For Each cell In Range("A2:A100")
cell.Offset(0, 1).Value = cell.Value
Next cell
VB- 隣列に加工結果を書き込み
For Each cell In Range("B2:B100")
cell.Offset(0, 1).Value = "加工:" & cell.Value
Next cell
VB2. 表拡張パターン
- 表を右隣に複製
Dim tbl As Range
Set tbl = Range("A1:D10")
tbl.Offset(0, tbl.Columns.Count).Value = tbl.Value
VB- 表を下方向に拡張
Dim tbl As Range
Set tbl = Range("A1:D10")
tbl.Offset(tbl.Rows.Count, 0).Resize(tbl.Rows.Count, tbl.Columns.Count).Value = tbl.Value
VB3. 自動入力パターン
- 連番を下方向に展開
Dim i As Long
For Each cell In Range("A2:A101")
cell.Value = cell.Row - 1
Next cell
VB- 日付を自動入力
Dim d As Date
d = DateSerial(2025, 11, 1)
For Each cell In Range("B2:B31")
cell.Value = d
d = d + 1
Next cell
VB4. 集計パターン
- 累計を隣列に出力
Dim sumVal As Double
sumVal = 0
For Each cell In Range("C2:C100")
sumVal = sumVal + cell.Value
cell.Offset(0, 1).Value = sumVal
Next cell
VB- 平均を隣列に出力
Dim total As Double, count As Long
For Each cell In Range("D2:D100")
total = total + cell.Value
count = count + 1
cell.Offset(0, 1).Value = total / count
Next cell
VB5. 条件付き処理パターン
- 条件一致で隣列にフラグ
For Each cell In Range("E2:E100")
If cell.Value > 1000 Then
cell.Offset(0, 1).Value = "OK"
Else
cell.Offset(0, 1).Value = "NG"
End If
Next cell
VB- 条件一致で行全体を色付け
For Each cell In Range("F2:F100")
If cell.Value = "完了" Then
cell.EntireRow.Interior.Color = vbYellow
End If
Next cell
VB6. 動的範囲パターン
- 最終行まで自動処理
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For Each cell In Range("A2:A" & lastRow)
cell.Offset(0, 1).Value = cell.Value * 2
Next cell
VB- Resizeで範囲を拡張して一括処理
Dim rng As Range
Set rng = Range("B2").Resize(10, 3)
For Each cell In rng
cell.Value = "X"
Next cell
VB✅ まとめ
- Offset: 相対位置指定で「隣列・下方向」へ展開
- Resize: 表サイズを動的に指定
- For Each: 大量データを効率的にループ処理
💡 この「カテゴリ別テンプレ」を組み合わせれば、隣列処理・表拡張・自動入力・集計・条件付き処理・動的範囲の6カテゴリだけで数十パターンが作れます。

