ExcelVBAを学んでいると頻繁に登場するのが「Rangeオブジェクト」です。セルやセル範囲を操作する際の基本単位であり、データの入力、取得、書式設定、検索など、ほとんどの処理に欠かせない存在です。
「Rangeオブジェクトを作成するとはどういう意味?」「Range型変数にどうやって代入するの?」「CellsやOffsetとどう違うの?」と悩む方も多いでしょう。
この記事では「vba Rangeオブジェクト 作成」をテーマに、基本的な作成方法から実務的な活用テクニックまで徹底解説します。読み終えるころには、Rangeオブジェクトを自在に作成・活用できるようになり、Excel操作の自動化が格段に進むはずです。
目次
- ✅ Rangeオブジェクトとは?
- ・セルやセル範囲を表すオブジェクト
- ・Rangeオブジェクトを変数に作成する
- ✅ Rangeオブジェクトの作成方法
- ・固定セルを参照
- ・複数セル範囲を参照
- ・離れた範囲をまとめる
- ・Cellsを組み合わせる
- ・Offsetで相対指定
- ・Resizeで範囲を拡張
- ✅ Rangeオブジェクトの主な利用シーン
- ・値を操作する
- ・書式を変更する
- ・範囲をコピーする
- ・検索結果を保持する
- ✅ 実務で役立つRangeオブジェクト作成テクニック
- ・最終行を自動的に取得
- ・表全体を参照(CurrentRegion)
- ・条件一致セルを一括処理
- ・複数範囲をループ処理
- ✅ Rangeオブジェクト作成でよくあるトラブル
- ・Setを忘れる
- ・Nothing判定を入れない
- ・Variant型との違い
- ✅ Rangeオブジェクトの応用例
- ・複数条件で抽出
- ・一致した行を別シートに転記
- ・ユーザー選択範囲を変数化
- ✅ Rangeオブジェクト作成の使い分けまとめ
- ■ まとめ:Rangeオブジェクトを自在に作成してセル操作を効率化しよう
✅ 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セル)を参照。
・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 が必要です。
・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オブジェクトを自在に作成し、柔軟に使い分けることが重要です。本記事を参考に、日常業務の効率化を実現してください。