Rangeオブジェクト VBAテクニック集 VBA一覧 オブジェクト操作

【VBA】Rangeを変数で指定する方法|セル参照を柔軟に操作するテクニック

ExcelVBAを使ったプログラミングでは「セルやセル範囲を柔軟に指定する」ことが非常に重要です。例えば「行番号や列番号を変数で指定したい」「条件に応じてセル範囲を動的に切り替えたい」といったケースは実務で頻繁に発生します。そんなときに役立つのが、Rangeを変数で指定する方法です。

しかし初心者のうちは「変数を使ってセルを指定しようとするとエラーになる」「文字列結合の仕方が分からない」といった壁にぶつかることも多いです。

この記事では「vba range 変数で指定」をテーマに、基本の指定方法から応用的な利用例までを徹底解説します。これを読めばセル指定の自由度が格段に上がり、業務効率化につながります。

✅ Rangeを変数で指定する基本の考え方

・Range("A1")の限界

通常の記述では "A1" のように固定的にセルを指定します。しかしこれでは、処理のたびにコードを書き換える必要があり、柔軟性がありません。

・変数を組み合わせるメリット

  • 行や列を動的に切り替えられる。
  • ループ処理で範囲をずらしながら処理できる。
  • 実務の「月ごとに列を切り替える」「データ件数に応じて範囲を変える」といったニーズに対応できる。

✅ 変数を使ってセルを指定する基本パターン

・行番号・列番号を変数にする

Sub CellByVariable()
    Dim r As Long, c As Long
    r = 5
    c = 3
    Cells(r, c).Value = "変数指定セル"
End Sub

ポイント


・Rangeと変数を組み合わせる

Sub RangeWithVariable()
    Dim col As String, row As Long
    col = "B"
    row = 10
    Range(col & row).Value = "変数指定セル"
End Sub

手順

  1. 列を文字列変数に代入。
  2. 行を数値変数に代入。
  3. 文字列連結(&)でセルアドレスを作成。

    参考:【VBA】UsedRangeプロパティ:最終行と最終列数


✅ 複数セル範囲を変数で指定する

・開始セルと終了セルを組み合わせる

Sub RangeDynamic()
    Dim startRow As Long, endRow As Long
    startRow = 2
    endRow = 20
    Range("A" & startRow & ":A" & endRow).Interior.Color = vbYellow
End Sub

実務例


・RowsやColumnsと組み合わせる

Sub HighlightColumn()
    Dim col As Long
    col = 5
    Columns(col).Interior.Color = vbGreen
End Sub

✅ Rangeオブジェクトを変数に代入する

・Range型の変数を宣言

Sub RangeObjectVariable()
    Dim rng As Range
    Set rng = Range("B2:D5")
    rng.Value = "対象範囲"
End Sub

ポイント

  • Setを使ってオブジェクトを代入。
  • Rangeオブジェクトを変数にすれば、繰り返し処理や再利用が可能。

・変数でセルを指定してコピー

Sub CopyWithVariable()
    Dim r As Long
    r = 3
    Range("A" & r & ":C" & r).Copy Destination:=Range("E1")
End Sub

✅ 変数指定の実務的な応用例

・最終行を変数にして範囲指定

Sub LastRowExample()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A2:A" & lastRow).Copy Destination:=Sheets("結果").Range("B1")
End Sub

・ループで行を動的に指定

Sub LoopByVariable()
    Dim i As Long
    For i = 1 To 10
        Range("C" & i).Value = i & "行目"
    Next i
End Sub

・列を切り替える処理

Sub SwitchColumn()
    Dim monthCol As Long
    monthCol = Month(Date) + 1 '月に応じて列番号を変更
    Cells(2, monthCol).Value = "今月データ"
End Sub

✅ Rangeを変数で指定する際の注意点

・文字列結合の形式

Range("A" & 1)のように、文字列+数値を結合してセルアドレスを作るのが基本。

・Setを忘れるミス

オブジェクト変数に代入するときは必ずSetを使う。

・Cellsは数値指定、Rangeは文字列指定

  • Cells(r, c) → 行・列を数値で指定。
  • Range("A1") → 文字列で指定。

・エラー処理を入れる

変数の値が空や誤っているとエラーになるため、Ifでチェックしてから利用するのが安全。

参考:【VBA】エラーを無視して終了する方法:エラーハンドリング


✅ Rangeを変数で指定する方法の使い分け

  • 行や列を数値で動的に扱う場合Cells
  • アドレスを文字列で作りたい場合Range("A" & r)
  • 範囲を繰り返し使う場合 → Rangeオブジェクトを変数に格納
  • 柔軟な範囲選択OffsetResizeと組み合わせる

■ まとめ:Rangeを変数で指定して自在にセルを操作しよう

  • Rangeは固定アドレスではなく変数を組み合わせることで柔軟に指定できる。
  • 行・列番号を変数にして Cells で指定するのが効率的。
  • 文字列結合で Range("A" & r) のように動的にアドレスを作成できる。
  • Rangeオブジェクトを変数に代入すれば再利用や複雑処理に活用可能。
  • 実務では「最終行取得」「ループ処理」「列切り替え」などで特に効果を発揮する。

ExcelVBAでRangeを変数で指定できるようになれば、シート操作の柔軟性が大幅に向上し、実務効率化に直結します。ぜひ本記事のサンプルを活用して、自分の業務に応じた自動化処理を実現してみてください。

-Rangeオブジェクト, VBAテクニック集, VBA一覧, オブジェクト操作