Cells × Range × Offset × Resize を組み合わせると、動的にセル範囲を移動・拡張・縮小できるようになります。
実務で役立つ応用テンプレを整理しました。
基本操作
- 基準セルから範囲を拡張
Range("A1").Resize(3, 2).Value = "拡張範囲" 'A1から3行×2列
VB- Cellsで範囲を拡張
Cells(2, 2).Resize(4, 3).Interior.Color = vbYellow 'B2から4行×3列
VB- Offsetで移動+Resizeで拡張
Range("A1").Offset(1, 1).Resize(2, 2).Value = "移動+拡張"
VB範囲指定応用
- 動的範囲を拡張
Dim rng As Range
Set rng = Range("B2").Resize(5, 4) 'B2から5行×4列
rng.Font.Bold = True
VB- 範囲を移動して拡張
Range("A1:C3").Offset(2, 2).Resize(4, 5).Select
VB- 変数で範囲+Resize
Dim r As Long, c As Long
r = 3: c = 2
Cells(r, c).Resize(6, 3).Interior.Color = vbGreen
VB最終行・最終列応用
- 最終行まで拡張
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1").Resize(lastRow, 1).Select
VB- 最終列まで拡張
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Range("A1").Resize(1, lastCol).Select
VB- 最終行+最終列まで拡張
Range("A1").Resize(lastRow, lastCol).Interior.Color = vbCyan
VBコピー&ペースト応用
- 範囲を拡張してコピー
Range("A1").Resize(3, 3).Copy Destination:=Range("E1")
VB- Offset+Resizeでコピー先を指定
Range("A1:C3").Copy Destination:=Range("A1").Offset(0, 5).Resize(3, 3)
VBループ処理+Resize
- 行ループで範囲拡張
Dim i As Long
For i = 1 To 5
Cells(i, 1).Resize(1, 3).Value = "Row" & i
Next i
VB- 列ループで範囲拡張
Dim j As Long
For j = 1 To 5
Cells(1, j).Resize(3, 1).Value = "Col" & j
Next j
VB- 二重ループで表範囲を拡張
Dim r As Long, c As Long
For r = 1 To 3
For c = 1 To 3
Cells(r, c).Resize(2, 2).Interior.Color = vbYellow
Next c
Next r
VB応用テクニック
- 基準セルから右下に拡張
Range("B2").Resize(5, 5).Interior.Color = vbRed
VB- 範囲を移動して拡張
Range("A1").Offset(2, 2).Resize(10, 5).Borders.LineStyle = xlContinuous
VB- 動的に「次の列範囲」を拡張
Dim col As Long
col = 2
Cells(1, col).Resize(10, 1).Interior.Color = vbBlue
VB- 動的に「次の行範囲」を拡張
Dim row As Long
row = 5
Cells(row, 1).Resize(1, 5).Font.Bold = True
VB- 表を拡張してコピー
Dim tbl As Range
Set tbl = Range("A1:C5")
tbl.Resize(tbl.Rows.Count + 2, tbl.Columns.Count + 1).Value = tbl.Value
VB- Offset+Resizeで「表の右隣に新しい表を作成」
Dim tbl As Range
Set tbl = Range("A1:C5")
tbl.Offset(0, tbl.Columns.Count + 1).Resize(tbl.Rows.Count, tbl.Columns.Count).Value = tbl.Value
VB実務での使い分けポイント
- 固定範囲拡張 → Range(“A1”).Resize(行数,列数)
- 動的範囲拡張 → Range(Cells(r1,c1), Cells(r2,c2)).Resize(…)
- 移動+拡張 → Range(…).Offset(…).Resize(…)
- 最終行・最終列 → Resize(lastRow,lastCol)
💡 この「Cells × Range × Offset × Resize」テンプレを押さえておけば、表の拡張・コピー・加工・動的処理まで自在に扱えます。


