【初心者向け】エクセルVBAのRangeとCellsの使い分け方は?

VBAでは、セルを選択するときにRangeとCellsの両方が使えます。

この2つは、どう使い分けたらいいか、わかりにくいですよね?

そこで、このページでは、VBA初心者向けに、VBAのRangeとCellsの使い分け方を解説していきます。


場面に応じてRange、Cellsの「使いやすいほう」を使う

Range、Cellsは、ほとんどの場合、どちらを使っても結果は変わりません。

そこで、場面に応じて使いやすいほうを使うことになります。

もし、RangeとCellsの2つを覚えるのが面倒なときは、基本的には「Cells」を使うことをおすすめします。

ただし、Cellsしか使えない、Rangeしか使えない場面もありますので、そういう場合には使えるほうを使います。

以下、各場面ごとに比較をしていこうと思います。

比較表

区分 変数 Range Cells
(Range+Cells、
 または
 Range+Rows,Columns)
単一セル なし
あり

For~Nextで縦方向に変化
For~Nextで横方向に変化
範囲 なし
あり
行全体 なし
あり
列全体 なし
あり
シート全体 ×
名前での参照 ×
凡例
薄緑色 おすすめ
簡単(入力補完あり)
簡単(入力補完なし)
大変
× 使用不可

使い分けをするときの基本的な考え方

変数を使わないときはRange、変数を使うときはCells

  • 変数を使わないときはRangeのほうが使いやすい
  • 変数を使うときはCellsのほうが使いやすい

というのが一般的な傾向です。

特別な理由がない限りは、変数を使うかどうかでCellsを使うかRangeを使うかを決めましょう。

もし、できるだけどちらかに統一したいということであれば、変数と組み合わせやすいCellsを使う方法をおすすめします

Rangeは入力補完が効く。Cellsは入力補完が効かない

特に、初心者の場合には「入力補完」が効くかどうか、というのも大事なポイントです。

試しに、次の2つの文を入れて見てください。

Range("B3").Value = 1
Cells(3, 2).Value = 1

「.」まで入力したときにRangeは入力候補が表示されるのに対して、Cellsは入力候補が表示されません

※下記を再生しても音は出ませんので、音が出せない環境でもご安心ください。

初心者のうちは、Range、Cellsのどちらを使っても難易度が大きく変わらないときには、Rangeを使ったほうがいいかもしれません。

もちろん、「Cellsのほうが明らかに優れている場面」ではCellsを使いましょう。

Cellsを入力するときに、コード補完を効かせたいという場合には、下記URLの方法をお試しください。

 

それでは、実際にRangeとCellsを比較していきます。

単一のセルを選択する場合

まずは、B2セル、C3セルなど、1つのセルを選択する場合を考えます。

あらかじめ決められたセルを選択する場合

たとえばB3セルに「1」という値をセットしたい場合。
どちらの書き方でも問題はありませんので、書きやすいほうで書きましょう。

入力補完が使えるRangeのほうが最初のうちはいいかもしれませんが、長期的にVBAを使いこなしたいならCellsをおすすめします

1. Rangeを使う
Range("B3").Value = 1
2. Cellsを使う
Cells(3, 2).Value = 1

For~Nextループで「縦方向」に選択セルを変化させる場合

For~Nextループで「B1セル、B2セル・・・B10セルに対して処理をする」というように、変数を使って「縦方向」に選択するセルを変化させる場合には、どちらかといえばCellsを使うほうがおすすめです。

下の2つを比較すると、

  • Rangeを使う場合には、「B」と「変数」を「&」で文字列結合をする必要がある
  • Cellsの場合には、単に「変数」をあてはめるだけで済む

ので、Cellsのほうが少し簡単です。

1. Rangeを使う
For Row = 1 To 10
  Range("B" & Row).Value = 1
Next
2. Cellsを使う
For Row = 1 To 10
  Cells(Row, 2).Value = 1
Next

For~Nextループで「横方向」に選択セルを変化させる場合

For~Nextループで「A3セル、B3セル・・・J3セルに対して処理をする」というように、変数を使って「横方向」に選択するセルを変化させる場合には、必ずCellsを使いましょう

以下のとおり、Rangeを使うほうは、数式がやや複雑で、使いにくいです。

Range
For Column = 1 To 10
  Range(Chr(64 + Column) & "3").Value = 1
Next
Cells
For Column = 1 To 10
  Cells(3, Column).Value = 1
Next

セル範囲を選択する場合

あらかじめ決められたセル範囲を選択する場合

たとえばB3セル~D6セルに「1」という値をセットしたい場合。

よくある書き方としては、次の2つの方法があります。

どちらでもいいですが、迷ったら、シンプルな「1.」の方法をおすすめします

1. Rangeを使う
Range("B3:D6").Value = 1
2. RangeとCellsの組み合わせ
Range(Cells(3, 2), Cells(6, 4)).Value = 1

変数でセル範囲を指定する場合

セル範囲が「変数の内容」により変わる場合には、2.の方法を使いましょう

「1.」の方法だと、数式が複雑になりすぎます。

1. Rangeを使う
rowMin = 3
columnMin = 2
rowMax = 6
columnMax = 4

Range(Chr(64 + columnMin) & rowMin & ":" & Chr(64 + columnMax) & rowMax).Value = 1
2. RangeとCellsの組み合わせ
rowMin = 3
columnMin = 2
rowMax = 6
columnMax = 4

Range(Cells(rowMin, columnMin), Cells(rowMax, columnMax)).Value = 1

現在、アクティブなシート以外のセルを選択したい場合、「2.」の方法だとエラーが発生しがちです。

次のように「Withステートメント」を使って表記しましょう。

Rangeと、2つのCellsの前、計3箇所に「.」が入っているのがポイントです。

rowMin = 3
columnMin = 2
rowMax = 6
columnMax = 4

With Worksheets("書き込みたいシート")
  .Range(.Cells(rowMin, columnMin), .Cells(rowMax, columnMax)).Value = 1
End With

行全体を選択する場合

あらかじめ決められた行を選択する場合

たとえば2行目から4行目までを選択して「削除」をしたい場合を考えて見ます。

この場合は、Cellsを使わずにRangeを使って書くことになります。
よくある書き方としては次の2つの方法があります。

どちらでもいいですが、迷ったら「1.」の方法がわかりやすいと思います

1. Rangeを使う
Range("2:4").Delete
2. RangeとRowsの組み合わせ

Cellsの代わりにRowsを使って次のように書くことができます。

Range(Rows(2), Rows(4)).Delete

現在、アクティブなシート以外のセルを「2.」の方法で選択するときには、次のように「Withステートメント」を使うのがおすすめです。

Rangeと、2つのRowsの前、計3箇所に「.」が入っているのがポイントです。

With Worksheets("書き込みたいシート")
  .Range(.Rows(2), .Rows(4)).Delete
End With

変数で選択する行を指定する場合

変数で指定された行を「削除」する場合を考えて見ます。

変数を使う場合には、どちらの方法でもいいですがどちらかといえばシンプルに書ける「2.」の方法がおすすめです

1. Rangeを使う
rowMin = 2
rowMax = 4
Range(rowMin & ":" & rowMax).Delete
2. RangeとRowsの組み合わせ

Cellsの代わりにRowsを使って次のように書くことができます。

rowMin = 2
rowMax = 4
Range(Rows(rowMin), Rows(rowMax)).Delete

現在、アクティブなシート以外のセルを「2.」の方法で選択するときには、次のように「Withステートメント」を使うのがおすすめです。

Rangeと、2つのRowsの前、計3箇所に「.」が入っているのがポイントです。

rowMin = 2
rowMax = 4
With Worksheets("書き込みたいシート")
  .Range(.Rows(rowMin), .Rows(rowMax)).Delete
End With

列全体を選択する場合

あらかじめ決められた列を選択する場合

たとえばB列目からD列目までを選択して「削除」をしたい場合を考えて見ます。

この場合は、Cellsを使わずにRangeを使って書くことになります。
よくある書き方としては次の2つの方法があります。

どちらでもいいですが、迷ったら「1.」の方法がわかりやすいと思います

1. Rangeを使う
Range("B:D").Delete
2. RangeとColumnsの組み合わせ

Cellsの代わりにColumnsを使って次のように書くことができます。

Range(Columns(2), Columns(4)).Delete

現在、アクティブなシート以外のセルを「2.」の方法で選択するときには、次のように「Withステートメント」を使うのがおすすめです。

Rangeと、2つのColumnsの前、計3箇所に「.」が入っているのがポイントです。

With Worksheets("書き込みたいシート")
  .Range(.Columns(2), .Columns(4)).Delete
End With

変数で選択する行を指定する場合

変数で指定された行を「削除」する場合を考えて見ます。

変数を使う場合には、必ず「2.」の方法を使いましょう

「1. Rangeを使う」のほうは、数式があまりに複雑すぎます。

1. Rangeを使う
columnMin = 2
columnMax = 4
Range(Chr(64 + columnMin) & ":" & Chr(64 + columnMax)).Delete
2. RangeとColumnsの組み合わせ

Cellsの代わりにColumnsを使って次のように書くことができます。

columnMin = 2
columnMax = 4
Range(Columns(columnMin), Columns(columnMax)).Delete

現在、アクティブなシート以外のセルを「2.」の方法で選択するときには、次のように「Withステートメント」を使うのがおすすめです。

Rangeと、2つのColumnsの前、計3箇所に「.」が入っているのがポイントです。

columnMin = 2
columnMax = 4
With Worksheets("書き込みたいシート")
  .Range(.Columns(ColumnMin), .Columns(ColumnMax)).Delete
End With

シート全体を選択する場合

シート全体を選択するときは、Cellsを使います。

たとえば、シート全体を「空欄」にするためには、次のような式を入力します。

Cells.Value = ""

名前定義を使う場合

名前定義を使うときには、Rangeを使います。

たとえば、「入力」という名前が付けられている範囲全体を「空欄」にするためには、次のような式を入力します。

Range("入力").Value = ""

 

変数で「名前」を指定する場合もまったく同じです。

RangeName = "入力"
Range(RangeName).Value = ""

参考サイト

もっと、RangeとCellsについて知りたいというときは、次のサイトをご覧ください。
個人的に、かなり好きなページです。

おすすめ記事

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。