VBAのセル指定方法。CellsとRangeどちらを使えばいい?

Excel
この記事は約7分で読めます。

VBAを使い始めたころ、セルの値の操作を行うためにCellsRangeのどちらでセルの指定をすればいいのか曖昧でした。

 

今は、CellsRangeのどちらを使用すればいいか迷いなくコードを記述できています。

それは、CellsRangeの使い方を調べただけでなく、自分にとっての使い分け基準ができたからです。

 

ここでは、簡単なCellsRangeの説明と、自分なりの使用ルールを書きますので、参考になれば嬉しいです。

 

簡単なCellsとRangeの説明

ざっくりとしたCellsとRangeの説明です。

 

Cellsについて

Cellsは単一セル指定に使います。

 

書き方

Cells(行番号, 列番号)

行番号や列番号に変数を使用できるのがCellsのメリットです。

 

変数について詳しくはこちら↓

ExcelVBAの変数について。変数の使い方について解説
変数は値を入れるための箱です。何度も登場させたい文字や数字に関しては1つの箱(変数)に入れて、わかりやすい名前を付けて使いまわすことができます。 変数の使い方 Dim 変数名 変数名 = 値 まず[Dim 変数名]で変数に名前を付けて、使う...

 

Rangeについて

Rangeはセル範囲の指定に使います。

 

書き方

Range(“列アルファベット + 行番号 : 列アルファベット + 行番号”)  '例:Range("A1:B5")

単一セルの指定も可能です。

Range(“列アルファベット + 行番号”)  '例:Range("A1")

Excelの関数と同じようにセルの指定ができるのがRangeのメリットです。

 

 

使い方の例

 CellsとRangeのそれぞれの使い方の例です。

 

Cellsの例

Cellsを使用してセルの値の取得と設定を行います。セルの値の取得と設定に使用するプロパティは、Valueです。

 

プロパティについて詳しくはこちら↓

VBAのオブジェクトとは?オブジェクト、プロパティ、メソッドの使い方
VBAについて調べていると「オブジェクト」という単語を良く目にすると思います。当たり前のように登場するこの「オブジェクト」とは、どういうものかお伝えします。 オブジェクトとは  オブジェクトとは、VBAでの操作対象のことです。  VBAで操...

 

セルの値を取得するには、以下のように書きます。

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 の範囲で指定することで、カラー値を返します。

RGB 関数 (Visual Basic for Applications)
Office VBA リファレンス トピック

例では、赤250・緑0・青0で数値を指定しているので、赤のカラー値を設定していることになります。

 

結果は以下のようになります。

 

 

CellsとRangeのマイルールは1つ

CellsRangeの基本的な使い方を見てきましたが、それを踏まえたうえでどちらを使えばよいか。

CellsRangeどちらを使えばいいか迷う時というのは、「単一セルを指定するとき」だと思います。

そんなとき、マイルールとしては

単一セル指定のときはCellsを使用する

 を基本ルールとしています。

 

他の方の記事でも同じようなことを書いてあると思いますが、これを基本ルールとすればもう迷うことはないと思います。

 

理由

なぜ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を始めたばかりで「どっち使えばいいか分からないなぁ」という方は、今回の記事で基本だけでも理解していただければ嬉しいです。