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

【VBA】Rangeオブジェクトを作成する方法|セル範囲を自在に操作する基礎と応用

ExcelVBAを学んでいると頻繁に登場するのが「Rangeオブジェクト」です。セルやセル範囲を操作する際の基本単位であり、データの入力、取得、書式設定、検索など、ほとんどの処理に欠かせない存在です。

「Rangeオブジェクトを作成するとはどういう意味?」「Range型変数にどうやって代入するの?」「CellsやOffsetとどう違うの?」と悩む方も多いでしょう。

この記事では「vba Rangeオブジェクト 作成」をテーマに、基本的な作成方法から実務的な活用テクニックまで徹底解説します。読み終えるころには、Rangeオブジェクトを自在に作成・活用できるようになり、Excel操作の自動化が格段に進むはずです。

✅ Rangeオブジェクトとは?

・セルやセル範囲を表すオブジェクト

ExcelVBAにおけるRangeオブジェクトは、ワークシート上のセルや範囲をプログラム的に扱うための仕組みです。

例:

Range("A1").Value = "データ"

セルA1に「データ」を入力します。


・Rangeオブジェクトを変数に作成する

Rangeオブジェクトを直接記述する代わりに、変数に格納して扱うことができます。

Dim rng As Range
Set rng = Range("B2")
rng.Value = "テスト"

この場合、rngというRangeオブジェクトを作成し、セルB2を参照させています。

参考:【VBA】変数に値が代入されない原因と対処法|よくあるミスとデバッグ方法を徹底解説


✅ Rangeオブジェクトの作成方法

・固定セルを参照

Set rng = Range("C3")

・複数セル範囲を参照

Set rng = Range("A1:B5")

・離れた範囲をまとめる

Set rng = Range("A1, C1, E1")
 参考:【VBA】変数を使ってセル範囲を指定する方法|柔軟な範囲操作の基本と応用

・Cellsを組み合わせる

Set rng = Range(Cells(2, 1), Cells(5, 3))

A2からC5までの範囲を参照します。

参考:【VBA】文字列(cells・range・value)として取得する方法


・Offsetで相対指定

Set rng = Range("B2").Offset(1, 2)

B2から1行下・2列右(D3セル)を参照。

参考:【VBA】範囲指定の使い方:Offsetプロパティ


・Resizeで範囲を拡張

Set rng = Range("A1").Resize(3, 2)

A1を基点に3行×2列の範囲を作成。

参考:【VBA】Excel VBAで.Resizeメソッドを活用する方法


✅ Rangeオブジェクトの主な利用シーン

・値を操作する

rng.Value = "入力"
MsgBox rng.Value

・書式を変更する

rng.Font.Bold = True
rng.Interior.Color = vbYellow
 参考:【VBA】背景色の一覧と設定方法:Interiorオブジェクトの使用方法

・範囲をコピーする

rng.Copy Destination:=Sheets("結果").Range("A1")
 参考:【VBA】コピーして貼り付けを繰り返す方法

・検索結果を保持する

Dim f As Range
Set f = Range("A1:A100").Find("重要")
If Not f Is Nothing Then
    MsgBox f.Address
End If



✅ 実務で役立つRangeオブジェクト作成テクニック

・最終行を自動的に取得

Dim lastRow As Long, rng As Range
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("A1:A" & lastRow)
 参考:【VBA】最終行:取得:空白

・表全体を参照(CurrentRegion)

Set rng = Range("A1").CurrentRegion

データが連続している範囲を自動取得。

参考:【VBA】範囲選択に空白がある時の処理方法:Current Regionメソッド


・条件一致セルを一括処理

Dim c As Range
For Each c In Range("B2:B100")
    If c.Value = "完了" Then
        c.Interior.Color = vbGreen
    End If
Next c
 参考:【VBA】条件に一致するセルを複数取得する方法|Find・For Each・SpecialCells

・複数範囲をループ処理

Set rng = Range("A1:A5, C1:C5, E1:E5")
For Each c In rng
    c.Value = "対象"
Next c

✅ Rangeオブジェクト作成でよくあるトラブル

・Setを忘れる

Dim rng As Range
rng = Range("A1")  ' ← エラー

オブジェクト代入時は必ず Set が必要です。

参考:【VBA】Setのわかりやすい活用方法と活用場面


・Nothing判定を入れない

Findで対象が見つからなかった場合、RangeオブジェクトはNothingになるため判定が必要。

If rng Is Nothing Then
    MsgBox "対象セルは見つかりません"
End If
 参考:【VBA】Findの戻り値を理解する方法|Nothing判定と実務での活用例を解説

・Variant型との違い

宣言を省略すると自動的にVariantとなり、Rangeを代入できますが処理が重くなります。
実務では必ずDim rng As Rangeで明示的に宣言しましょう。


✅ Rangeオブジェクトの応用例

・複数条件で抽出

Sub MultiCondition()
    Dim c As Range
    For Each c In Range("A1:A100")
        If c.Value Like "*重要*" And c.Offset(0, 1).Value = "未処理" Then
            c.Interior.Color = vbRed
        End If
    Next c
End Sub
 参考:【VBA】Findを使って複数条件で検索する方法|実務で役立つ応用サンプル

・一致した行を別シートに転記

Sub ExportMatchedRows()
    Dim c As Range, wsOut As Worksheet
    Dim r As Long
    Set wsOut = Sheets("抽出結果")
    r = 1
    
    For Each c In Range("A1:A100")
        If c.Value = "エラー" Then
            c.EntireRow.Copy wsOut.Cells(r, 1)
            r = r + 1
        End If
    Next c
End Sub
 参考:【VBA】セルの値が一致したら処理を実行する方法|If文・ループ・実務活用例

・ユーザー選択範囲を変数化

Sub GetUserRange()
    Dim rng As Range
    On Error Resume Next
    Set rng = Application.InputBox("範囲を選択してください", Type:=8)
    On Error GoTo 0
    
    If Not rng Is Nothing Then
        rng.Interior.Color = vbYellow
    End If
End Sub

✅ Rangeオブジェクト作成の使い分けまとめ

  • 固定セルを指定Range("A1")
  • 動的に指定Range(Cells(r1, c1), Cells(r2, c2))
  • 相対位置Offset
  • 範囲拡張Resize
  • 連続領域CurrentRegion
  • 検索結果Find

■ まとめ:Rangeオブジェクトを自在に作成してセル操作を効率化しよう

  • RangeオブジェクトはExcelセルや範囲を表すオブジェクト。
  • 作成時は必ず Dim rng As Range と宣言し、Setで代入する。
  • 値操作・書式変更・コピー・検索など幅広い処理に活用できる。
  • OffsetやResizeで動的に、CurrentRegionで表全体を、Findで条件検索が可能。
  • 実務では「最終行処理」「条件付き処理」「抽出・転記」に欠かせない存在。

ExcelVBAを使いこなすためには、Rangeオブジェクトを自在に作成し、柔軟に使い分けることが重要です。本記事を参考に、日常業務の効率化を実現してください。

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