Excel VBA | 「Cells × Range × Offset」応用テンプレ集

Excel VBA VBA
スポンサーリンク

Cells × Range × Offset を組み合わせると、動的にセルを移動・参照・操作できるようになります。実務でよく使うパターンを整理しました。


基本操作

  1. 基準セルから1行下へ移動
Range("A1").Offset(1, 0).Value = "下へ移動"
VB
  1. 基準セルから1列右へ移動
Range("A1").Offset(0, 1).Value = "右へ移動"
VB
  1. Cellsで基準セルを指定してOffset
Cells(3, 2).Offset(1, 0).Value = "B3の1行下"
VB

範囲操作

  1. 範囲全体をずらしてコピー
Range("A1:C3").Offset(0, 3).Value = Range("A1:C3").Value
VB
  1. Cellsで範囲+Offset
Range(Cells(1, 1), Cells(3, 3)).Offset(0, 2).Select
VB
  1. 変数で範囲+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. 最終行から1行下に書き込み
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(lastRow, 1).Offset(1, 0).Value = "次の行"
VB
  1. 最終列から右隣に書き込み
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, lastCol).Offset(0, 1).Value = "右隣"
VB
  1. 範囲を最終行まで+Offset
Range(Cells(2, 1), Cells(lastRow, 3)).Offset(0, 1).Select
VB

コピー&ペースト応用

  1. 基準セルから右隣にコピー
Range("A1").Copy Destination:=Range("A1").Offset(0, 1)
VB
  1. 範囲を下にコピー
Range("A1:C3").Copy Destination:=Range("A1:C3").Offset(3, 0)
VB

ループ処理+Offset

  1. 行ループで右隣に値を入れる
Dim i As Long
For i = 1 To 10
    Cells(i, 1).Offset(0, 1).Value = Cells(i, 1).Value * 2
Next i
VB
  1. 列ループで下に値を入れる
Dim j As Long
For j = 1 To 5
    Cells(1, j).Offset(1, 0).Value = Cells(1, j).Value & "_copy"
Next j
VB
  1. 二重ループで隣接セルに加工値を入れる
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

応用テクニック

  1. 基準セルから上下左右に移動
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
  1. 範囲をずらして色付け
Range("A1:C3").Offset(2, 2).Interior.Color = vbGreen
VB
  1. 動的に「次の列」を参照
Dim col As Long
col = 2
Cells(1, col).Offset(0, 1).Value = "次の列"
VB
  1. 動的に「次の行」を参照
Dim row As Long
row = 5
Cells(row, 1).Offset(1, 0).Value = "次の行"
VB
  1. 範囲をずらしてコピー&加工
Range("A1:C3").Offset(0, 4).Value = Range("A1:C3").Value
Range("A1:C3").Offset(0, 4).Font.Bold = True
VB
  1. 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」テンプレを押さえておけば、隣接セル操作・動的範囲処理・コピー&加工まで一気にカバーできます。

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