VBAを使い始めたころ、セルの値の操作を行うためにCellsとRangeのどちらでセルの指定をすればいいのか曖昧でした。
今は、CellsとRangeのどちらを使用すればいいか迷いなくコードを記述できています。
それは、CellsとRangeの使い方を調べただけでなく、自分にとっての使い分け基準ができたからです。
ここでは、簡単なCellsとRangeの説明と、自分なりの使用ルールを書きますので、参考になれば嬉しいです。
簡単なCellsとRangeの説明
ざっくりとしたCellsとRangeの説明です。
Cellsについて
Cellsは単一セル指定に使います。
書き方
Cells(行番号, 列番号)
行番号や列番号に変数を使用できるのがCellsのメリットです。

Rangeについて
Rangeはセル範囲の指定に使います。
書き方
Range(“列アルファベット + 行番号 : 列アルファベット + 行番号”) '例:Range("A1:B5")
単一セルの指定も可能です。
Range(“列アルファベット + 行番号”) '例:Range("A1")
Excelの関数と同じようにセルの指定ができるのがRangeのメリットです。
使い方の例
CellsとRangeのそれぞれの使い方の例です。
Cellsの例
Cellsを使用してセルの値の取得と設定を行います。セルの値の取得と設定に使用するプロパティは、Valueです。

セルの値を取得するには、以下のように書きます。
Dim 取得値
取得値 = Cells(1, 1).Value
セルに値を設定するには、以下のように書きます。
Cells(1, 1).Value = "あいうえお"
以下は、For文で変化する値(カウント変数)を、セルの行番号や列番号に使用する例です。
Sub test()
Dim i
For i = 1 To 10
Cells(i, 1).Value = i & "番目"
Next
End Sub
実行するとシートに値が入力されます。(実行はtestプロシージャ内にカーソルを置いてF5キーを押すのが簡単です。)
このように、可変する変数を行番号や列番号に使用したい場合にCells()は便利です。
Rangeの例
ここでは、Rangeを使いセルの範囲を指定して背景色を設定しています。
シートの以下の範囲に背景色を設定します。
上記のセル範囲は、Rangeをしようして書くと、
Range(“A1:B2”)
となります。
そして、セルの背景色を設定する場合は、以下のように書きます。
Range(“A1:B2”).Interior.Color = RGB(250, 0, 0)
色指定で使用しているRGB関数は、赤・緑・青の三原色を0 ~ 255 の範囲で指定することで、カラー値を返します。

例では、赤250・緑0・青0で数値を指定しているので、赤のカラー値を設定していることになります。
結果は以下のようになります。
CellsとRangeのマイルールは1つ
CellsとRangeの基本的な使い方を見てきましたが、それを踏まえたうえでどちらを使えばよいか。
CellsとRangeどちらを使えばいいか迷う時というのは、「単一セルを指定するとき」だと思います。
そんなとき、マイルールとしては
を基本ルールとしています。
他の方の記事でも同じようなことを書いてあると思いますが、これを基本ルールとすればもう迷うことはないと思います。
理由
なぜCellsを使用するか。理由としては以下2つ。
理由①Cellsは変数を使用できるから
Cellsの変数を使用する例で示した通り。
繰り返し処理内で(1,2,3…)とカウントアップするカウント変数があるため、その変数をCellsで行番号や列番号に使用できます。
コード量も少なく、見やすいコードになります。
理由②セルの指定値変更の際に書き換えが楽
これも変数を使えるからです。
あらかじめCellsの行番号や列番号を変数にしておくことで、もし指定セルの行番号や列番号が変わった場合でも、変数に値を入れた箇所だけ修正すればいいだけになります。
変数を使用してない例は以下になります。セルの10行目に値を入れていく処理です。
これを、10行目ではなく、20行目に値を入れる処理に変更する場合、Cells内のすべての行番号を10→20に変更しなければなりません。
上の例のように、行番号の変更が必要なCells()がまとまっていれば変更は簡単ですが、いろいろなところに変更箇所が点在している場合は、変更漏れがある可能性があります。
次に、変数を使用した例です。
変更が発生するかもしれない値は変数にしておけば、変更時に一か所だけ修正すればよいだけです。変数にすることで、行番号「10」が何を表しているかもわかりやすくなります。
上記以外で、
・変更の必要がないセルを指定する場合
・セルに名前が付いている場合
の場合は、Rangeを使用します。
セルに名前が付いている場合というのは、以下のようにシート上でセルに名前を付けた場合です。
セルの名前でセルの指定をする場合は、Rangeを使用する必要があります。
実行結果は以下のようになります。
このように、Rangeよりも明らかにCellsのほうが、単一セルを使用するうえで便利なことがわかります。それ以外のセルの範囲指定や、Range方が使いやすいときはRangeを使用すると良いでしょう。
Cellsを使ったRangeのセル範囲指定
Cellsの値しか持ってないけど、Rangeでセル範囲の指定をしたい場合があると思います。
Cellsを使用したRangeのセル範囲の指定は、以下のように記述します。
Range(Cells(行番号, 列番号), Cells(行番号, 列番号))
例えば、
Range(Cells(1, 1), Cells(1,5)) は、Range(“A1:A5”) と同じ意味です。
このような書き方は、For文などの繰り返し処理の中で登場します。
以下のコードは、セルの1行目から順番に背景色を設定する繰り返し処理です。
Sub test()
'1行目から順番にセルに背景色を設定する
Dim i
For i = 1 To 5
'背景色の設定をメッセージで確認
MsgBox i & "行目に背景色を設定します"
'背景色を設定
Range(Cells(i, 1), Cells(i, 5)).Interior.Color = RGB(250, 0, 0)
Next
End Sub
記述したコードを実行してみます。
実行すると、以下のメッセージが表示されるので、[OK]ボタンを押すと背景色が変更されます。
この繰り返しで5行目まで背景色が設定されます。
このように、Rangeのセル範囲指定にはCellsも使用することができます。
まとめ
CellsとRangeについて、それぞれの説明と使い方についてお伝えしました。
CellsとRangeはさらに調べると、もっと奥が深いものとなります。
でも、VBAを始めたばかりで「どっち使えばいいか分からないなぁ」という方は、今回の記事で基本だけでも理解していただければ嬉しいです。