ExcelVBAで最も頻繁に登場するオブジェクトの1つが「Range型」です。Rangeはセルやセル範囲を表すオブジェクトであり、データの入力や取得、書式設定、検索など幅広い処理の中心となります。
「Range型を変数にするには?」「RangeとCellsの違いは?」「実務でどのように活用すればよいのか?」といった疑問を持つ方も多いのではないでしょうか。
この記事では「vba range型 使い方」をテーマに、基本の使い方から応用的なサンプルまでを徹底解説します。初心者から中級者まで、実務に直結するセル操作の理解を深められる内容になっています。
目次
- ✅ Range型とは?
- ・セルや範囲を表すオブジェクト
- ・Range型を変数で扱う
- ✅ Range型の基本的な使い方
- ・値の取得と設定
- ・複数セルの一括操作
- ・書式設定
- ・数式を扱う
- ✅ Range型とCellsの違い
- ・Cellsで行列番号指定
- ・RangeとCellsを組み合わせる
- ✅ Range型の便利なプロパティ
- ・Address
- ・Row / Column
- ・CurrentRegion
- ・End
- ✅ Range型の主要メソッド
- ・Copy
- ・Clear
- ・Find
- ・Select
- ✅ Range型を変数で扱う実務テクニック
- ・動的に範囲を指定
- ・範囲の拡張(Resize)
- ・相対参照(Offset)
- ・複数範囲をまとめて操作
- ✅ 実務で使えるRange型サンプル
- ・最終行までコピー
- ・条件一致セルを強調表示
- ・一致セルを別シートに出力
- ・検索と行コピー
- ✅ Range型利用でよくあるトラブルと注意点
- ✅ Range型の使い分けまとめ
- ■ まとめ:Range型の使い方を理解して自在にセル操作しよう
✅ Range型とは?
・セルや範囲を表すオブジェクト
Range型は、Excelのワークシート上のセルまたはセル範囲を表すためのデータ型です。
Range("A1").Value = "Hello"
この場合、A1セルに「Hello」という値を入力しています。
・Range型を変数で扱う
Dim rng As Range
Set rng = Range("B2")
rng.Value = "テスト"
ここで rng はRange型の変数で、セルB2を参照しています。
参考:【VBA】変数を使ってセル範囲を指定する方法|柔軟な範囲操作の基本と応用
✅ Range型の基本的な使い方
・値の取得と設定
Range("A1").Value = 100
MsgBox Range("A1").Value
セルA1に100を代入し、その値を表示。
・複数セルの一括操作
Range("A1:C3").Value = "まとめ入力"
3×3の範囲に同じ値を入力できます。
・書式設定
Range("A1").Font.Bold = True
Range("A1").Interior.Color = vbYellow
文字を太字にし、背景を黄色に設定。
参考:【VBA】背景色の一覧と設定方法:Interiorオブジェクトの使用方法
・数式を扱う
Range("B1").Formula = "=SUM(A1:A10)"
B1セルに合計式を代入。
✅ Range型とCellsの違い
・Cellsで行列番号指定
Cells(3, 2).Value = "B3セル"
行番号・列番号を数値で指定できるため、変数利用に便利。
・RangeとCellsを組み合わせる
Range(Cells(2, 1), Cells(5, 3)).Select
→ A2からC5の範囲を選択。
Rangeは直感的なアドレス指定に強く、Cellsは変数を使った柔軟な指定に強い。両者を使い分けるのが実務でのポイントです。
参考:【VBA】文字列(cells・range・value)として取得する方法
✅ Range型の便利なプロパティ
・Address
セルのアドレスを取得。
MsgBox Range("C5").Address ' → $C$5
・Row / Column
セルの行番号・列番号を取得。
MsgBox Range("C5").Row ' 5
MsgBox Range("C5").Column ' 3
・CurrentRegion
連続した範囲を取得。
Range("A1").CurrentRegion.Select
・End
最終行や最終列を取得するのに便利。
Dim lastRow As Long
lastRow = Range("A1").End(xlDown).Row
参考:【VBA】最終行まで繰り返す
✅ Range型の主要メソッド
・Copy
セルをコピー。
Range("A1:A10").Copy Destination:=Range("B1")
・Clear
セルの内容を消去。
Range("C1:C10").Clear
参考:【VBA】セルの内容をクリア(値を削除):Clearメソッド・Find
範囲内で検索。
Dim f As Range
Set f = Range("A1:A100").Find("重要")
If Not f Is Nothing Then MsgBox f.Address
参考:【VBA】条件に一致するセルを複数取得する方法|Find・For Each・SpecialCells・Select
セルを選択。
Range("D5").Select
参考:【VBA】RangeクラスのSelectメソッドが失敗しました:1004✅ Range型を変数で扱う実務テクニック
・動的に範囲を指定
Dim r As Long, rng As Range
r = 10
Set rng = Range("A" & r)
rng.Value = "10行目"
・範囲の拡張(Resize)
Range("A1").Resize(3, 2).Select
A1から3行×2列の範囲を指定。
参考:【VBA】Excel VBAで.Resizeメソッドを活用する方法
・相対参照(Offset)
Range("B2").Offset(1, 2).Value = "右下セル"
B2から1行下・2列右のセルを指定。
・複数範囲をまとめて操作
Set rng = Range("A1, C1, E1")
rng.Interior.Color = vbGreen
✅ 実務で使えるRange型サンプル
・最終行までコピー
Sub CopyToLastRow()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1:A" & lastRow).Copy Destination:=Sheets("結果").Range("B1")
End Sub
参考:【VBA】最終行:取得できない・条件一致セルを強調表示
Sub HighlightMatches()
Dim c As Range
For Each c In Range("B2:B100")
If c.Value = "完了" Then
c.Interior.Color = vbYellow
End If
Next c
End Sub
・一致セルを別シートに出力
Sub ExportMatches()
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
wsOut.Cells(r, 1).Value = c.Value
wsOut.Cells(r, 2).Value = c.Address
r = r + 1
End If
Next c
End Sub
・検索と行コピー
Sub FindAndCopy()
Dim f As Range, wsOut As Worksheet
Set wsOut = Sheets("抽出")
Set f = Range("A1:A100").Find("確認")
If Not f Is Nothing Then
f.EntireRow.Copy wsOut.Range("A1")
End If
End Sub
✅ Range型利用でよくあるトラブルと注意点
- Setを忘れる
→ オブジェクト変数への代入は必ずSet rng = Range("A1")。
参考:【VBA】Setのわかりやすい活用方法と活用場面 - Nothing判定を入れない
→ Findなどで一致がなければNothingになるため、必ず判定を行う。 - ValueとTextの違い
Value→ 実際の値。Text→ 表示形式が反映された文字列。
- 範囲外エラー
End(xlUp)などで空セルしかないと意図しない位置を返す。チェックを入れること。
✅ Range型の使い分けまとめ
- 固定範囲を操作 →
Range("A1:B5") - 行列番号で指定 →
Cells(行, 列) - 相対指定 →
Offset - サイズ変更 →
Resize - 連続範囲 →
CurrentRegion - 条件付き範囲 →
SpecialCells
■ まとめ:Range型の使い方を理解して自在にセル操作しよう
- Range型はセルやセル範囲を表すオブジェクトで、ExcelVBAの基盤。
- 値の取得・設定、書式変更、数式入力など幅広く利用可能。
- CellsやOffset、Resizeを組み合わせれば柔軟な範囲指定が可能。
- 実務では「最終行コピー」「条件一致セル抽出」「検索&転記」など多様な場面で活躍。
- Set忘れやNothing判定の不足に注意して安定したコードを書くことが重要。
ExcelVBAでRange型を自在に使えるようになれば、セル操作の効率は格段に向上し、実務自動化の幅も大きく広がります。ぜひ本記事を参考にして、Range型の理解を深めてください。