Excelマクロ(VBA)を始めたばかりの方にとって、「セルを選択する」という基本操作も、いざコードにすると「RangeとCells、どっちを使えばいいの?」と迷うことがあると思います。
今回は、RangeとCellsの違いと、それぞれをどういう場面で使い分けるべきかを初心者向けにわかりやすく解説していきます。
そもそもRangeとCellsって何?
RangeもCellsも、Excelマクロでセルを選択する時に使うオブジェクトです。
■ Range(レンジ)
Range
は、「A1」や「B2:C3」など、Excelの表記でセルや範囲を指定する方法です。
Range("A1").Select 'A1セルを選択する
Range("B2:C3").Select
'B2~C3を選択する
目で見て「ここ!」とわかりやすいのが特徴です。
■ Cells(セルズ)
Cells
は、行番号と列番号でセルを指定する方法です。
Cells(1, 1).Select 'A1セル
Cells(2, 3).Select 'C2セル(2列目の3行目)
こちらは数値で管理するので、ループ処理などで使用します。
使い分けのポイント
● Rangeを使うべきとき
- 視覚的にわかりやすく、ピンポイントでセルや範囲を指定したいとき
- シート上の位置が固定されている場合
- 「A1」などのExcelの表記をそのまま使いたいとき
例:A1セルに「Hello」と入力するコード
Range("A1").Value = "Hello"
● Cellsを使うべきとき
- 行・列の数字を使って動的にセルを指定したいとき
- ループ処理や、表の構造が変化するケース
- 複数のセルを数値で計算的に操作したいとき
例:1行目~10行目のA列に連番を入力するコード
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
Next i
実際の使い分けシーン
✅ Range
▼ 複数セル(範囲)を扱う場合(Range)
Cells
は基本的に1セル単位の指定で使われることが多いため、複数セルに同時に処理を行いたい場合は Range
のほうが明確で読みやすいです。
例:A1からB10に一括で背景色を付けたい
Sub A1からB10に色を塗る()
Range("A1:B10").Interior.Color = RGB(255, 255, 0) ' 黄色に塗る
End Sub
※Cells(1, 1)
から Cells(10, 2)
を使って同じこともできますが、見た目がややこしくなります。
▼ 複数の離れたセルを同時に扱いたい場合
Range
はカンマ区切りで複数のセルを一度に指定可能! Cells
ではそれはできません。
Sub 複数セルに値()
Range("A1,C1,E1").Value = "Hello"
End Sub
▼ 列や行全体を対象にする場合
Range("A:A")
や Range("1:1")
のように、列・行単位で簡単に扱えます。
Sub A列の文字色を変える()
Range("A:A").Font.Color = RGB(200, 255, 200)
End Sub
✅ Cells
▼ 変数を使ってセルを動的に指定したいとき
Cells(row, column)
形式は、ループや動的な位置指定にとても便利です。1〜10行目のB列に連番を入れたい時は、下記のコードで可能です。
Sub Cellsで連番()
Dim i As Integer
For i = 1 To 10
Cells(i, 2).Value = i ' B列(2列目)にiを入れる
Next i
End Sub
※ Range("B" & i)
でも記載することは可能です。
▼データのある範囲が毎回変わるとき
たとえば、「A列に何行データが入っているか分からない」「最後の行にデータを追加したい」といったときには、Cells
を使うと自動的に最終行を見つけてくれます。
Sub 最終行に追記()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' A列の最終行をLastRowとする
Cells(lastRow + 1, 2).Value = "完了" ' 次の行のB列に完了と書き込む
End Sub
まとめ
特徴 | Range | Cells |
---|---|---|
指定方法 | A1などの文字列 | 行・列の数値 |
わかりやすさ | ◎ | △ |
柔軟性(ループなど) | △ | ◎ |
複数セルの範囲指定 | 可 | 可(やや複雑) |
最初はRangeで感覚を掴み、慣れてきたらCellsで柔軟な処理を書けるようにしていくのがオススメです。