Cells × Range × Offset を組み合わせると、動的にセルを移動・参照・操作できるようになります。実務でよく使うパターンを整理しました。
基本操作
- 基準セルから1行下へ移動
Range("A1").Offset(1, 0).Value = "下へ移動"
VB- 基準セルから1列右へ移動
Range("A1").Offset(0, 1).Value = "右へ移動"
VB- Cellsで基準セルを指定してOffset
Cells(3, 2).Offset(1, 0).Value = "B3の1行下"
VB範囲操作
- 範囲全体をずらしてコピー
Range("A1:C3").Offset(0, 3).Value = Range("A1:C3").Value
VB- Cellsで範囲+Offset
Range(Cells(1, 1), Cells(3, 3)).Offset(0, 2).Select
VB- 変数で範囲+Offset
Dim r1 As Long, r2 As Long
r1 = 2: r2 = 5
Range(Cells(r1, 1), Cells(r2, 3)).Offset(0, 1).Interior.Color = vbYellow
VB動的範囲+Offset
- 最終行から1行下に書き込み
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(lastRow, 1).Offset(1, 0).Value = "次の行"
VB- 最終列から右隣に書き込み
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, lastCol).Offset(0, 1).Value = "右隣"
VB- 範囲を最終行まで+Offset
Range(Cells(2, 1), Cells(lastRow, 3)).Offset(0, 1).Select
VBコピー&ペースト応用
- 基準セルから右隣にコピー
Range("A1").Copy Destination:=Range("A1").Offset(0, 1)
VB- 範囲を下にコピー
Range("A1:C3").Copy Destination:=Range("A1:C3").Offset(3, 0)
VBループ処理+Offset
- 行ループで右隣に値を入れる
Dim i As Long
For i = 1 To 10
Cells(i, 1).Offset(0, 1).Value = Cells(i, 1).Value * 2
Next i
VB- 列ループで下に値を入れる
Dim j As Long
For j = 1 To 5
Cells(1, j).Offset(1, 0).Value = Cells(1, j).Value & "_copy"
Next j
VB- 二重ループで隣接セルに加工値を入れる
Dim r As Long, c As Long
For r = 1 To 5
For c = 1 To 3
Cells(r, c).Offset(0, 1).Value = "加工:" & Cells(r, c).Value
Next c
Next r
VB応用テクニック
- 基準セルから上下左右に移動
Range("B2").Offset(-1, 0).Value = "上"
Range("B2").Offset(1, 0).Value = "下"
Range("B2").Offset(0, -1).Value = "左"
Range("B2").Offset(0, 1).Value = "右"
VB- 範囲をずらして色付け
Range("A1:C3").Offset(2, 2).Interior.Color = vbGreen
VB- 動的に「次の列」を参照
Dim col As Long
col = 2
Cells(1, col).Offset(0, 1).Value = "次の列"
VB- 動的に「次の行」を参照
Dim row As Long
row = 5
Cells(row, 1).Offset(1, 0).Value = "次の行"
VB- 範囲をずらしてコピー&加工
Range("A1:C3").Offset(0, 4).Value = Range("A1:C3").Value
Range("A1:C3").Offset(0, 4).Font.Bold = True
VB- Offsetで「表の右隣に新しい表を作成」
Dim tbl As Range
Set tbl = Range("A1:C5")
tbl.Offset(0, tbl.Columns.Count + 1).Value = tbl.Value
VB実務での使い分けポイント
- 固定セル移動 → Range(“A1”).Offset(行,列)
- 動的範囲移動 → Range(Cells(r1,c1), Cells(r2,c2)).Offset(行,列)
- ループ処理 → Cells(i,j).Offset(行,列)
- コピー&ペースト → Range(…).Copy Destination:=Range(…).Offset(…)
💡 この「Cells × Range × Offset」テンプレを押さえておけば、隣接セル操作・動的範囲処理・コピー&加工まで一気にカバーできます。

