【超初心者向け】VBA必須!RangeとCellsを完全解説

エクセル・VBA

RangeとCellsというものが、何なのかわからない。
どちらも場所を表すことは知ってるけど、どう使い分けるかわからない。

VBAの勉強を始めると、最初に登場するのがRangeCellsという用語です。どちらもセルの位置を表す、VBAの基本用語となります。

例えば、C列の2行目をVBAで表現する場合、Rangeを使えば『Range(“C2”)』、Cellsを使えば『Cells(2, 3)』となります。つまり、同じ意味を別の表現で表すことができるのです。

C列2行目

ではこの二つをどう使い分ければいいのか。

今回はこの二つの使い分けについて解説をしていきます。

RangeとCellsは基本的な要素ですが、書き間違いや参照ミスといった原因でエラーが発生しやすい部分でもあります。VBAスキルを向上させるためにしっかりと取り組みましょう!

※プログラミング学習はパラシュート式学習法がおすすめです!今から学びたい人は、是非この記事を参考にしてみてください。

①Range,Cellsの使い方

①-1:Cells

【基本的な使い方】

Cellsは、「Cells(縦,横)」で場所を指定できます。かっこの中をカンマ(,)で区切り、縦の位置を左側に、横の位置を右側に記述します。

たとえば、C2という位置をCellsで表現する場合、上から2番目の行/左から3番目の列となるため、Cells(2, 3)と書きます。

またCellsには、直接変数を入力することができます。x=1,y=2という変数があれば、Cells(x,y)と入力することで、B1セルを指定することができます。

ただCellsには、列名の英語は入れられないので注意してください。Cells(1,”A”)やCells(1,A)といった表現はエラーになります。Cellsには、数字しか入りません

①-2:Range

【基本的な使い方】

Rangeは、「Range(“場所”)」で場所を指定できます。C2を指定したい場合は、Range(“C2”)と書いて使います。

場所を文字列として指定する為、ダブルクォーテーション(”)で囲むということだけ注意してください。大体のキーボードではShift+2で打てる記号です。

またRangeで場所を指定する時にも、変数を使用する事ができます。その場合はアンド(&)を使って、変数をつないでいきます

例えば、「A」列の1番目から10番目に文字を入れたい場合、列名であるAは確定ですが、横の数字は1~10の数字を順番に入れる必要があります。この場合、「『A』は確定で『数字』は変数」となり、「Range(“A” & i )」という書き方となります。

この時、文字部分だけダブルクォーテーション(“)で括り、『&』と『変数』は外に出すことに注意してください。すべてダブルクォーテーションで括ってしまう、Range(“A & i ” )といった書き方はエラーになります。

変数を使って1~10を入れる方法については、別の記事でFor ~ Toの構文として紹介しますが、ここではRangeも『&』を使えば変数を使用できるということを覚えておいてください。

セル範囲(複数セル)の場合

Rangeの特長として「Range(“左上の場所” , “右下の場所”)」で、範囲を指定することができます。次の例を使って解説します。

このような範囲指定を行う場合、Range(“B2″,”D7”)となります。Rangeのかっこの中をカンマ(,)で区切り、左側に左上の場所右側に右下の場所を書くことで、範囲を指定することができます。

ちなみに同じ範囲を指定する際には、文字列としてコロン(:)でつなげてRange(“B2:D7”)と書くこともできます。大体の教科書では、コロン(:)の使用が推奨されています。ただ、後述するCellsと組み合わせて使用する場合はコロン(:)は使用できないので、カンマ(,)区切りで覚えておいて問題ありません。

※Cellsと組み合わせて使用する

Rangeの範囲指定には、Cellsを組み合わせて使用することもできます。

先ほどの例の場合、範囲指定Range(“B2”, “D7”)はRange(Cells(2,2),Cells(7,4))でも同じ範囲が指定できます。

ここで、Cells(2, 2)はRange(“B2”)に当たり、Cells(7, 4)はRange(“D7”)に当たります。Rangeの範囲指定にでは、B2からD7までの部分にCellsで指定した場所を入れることで、同じ範囲を指定することができます。先ほど説明したコロン(:)の区切りを使った表現では、このような組み合わせはできません。

ちなみに、なぜこのようなややこしい表現をするのかというと、Rangeでしか範囲指定ができず、横方向に変数を使うときにCellsを使う必要があるからです。

例えば、B,C列にデータの入力したら、次はD,E列、その次はF,G列…というように、横にデータ入力を繰り返していく場合、横方向に移動していく変数を使うことになります。そういったコードを書くときにRangeとCellsを複合させた表現をする必要が出てきてしまいます。

②RangeとCellsの使い分け

ここまでRangeとCellsの使い方を紹介してきました。ただこれだけでは、どう使い分けていけばいいのかはっきりしないと思います。

このRangeとCellsの使い分けについて、効率化大全で推奨するポイントは次の二つです。

1,基本的にRangeだけでいい

2,For~to を横に使いたい場合のみ、Cellsを使う

この二つのポイントについて、詳しく解説していきます。

1,基本的にRangeだけでいい

Rangeの書き方とCellsの書き方では、圧倒時にRangeの方が分かりやすいと思います。例えば、AK5のセルの操作をしたいと思った時、A,B,C…と数えることなく「AKだから、37番目だな」と浮かぶ人が何人いるでしょう。Cells(5,37)とRange(“AK37”)、圧倒的にRangeで書いた方が分かりやすいと思います。

教本やVBAの解説サイトでは、変数を使うときはCellsでそれ以外はRangeと解説されることも多いですが、変数を使うときもRangeで問題ありません。コードで書くとRange(“AK” & i)とCells(i,37)。書く時も見返す時も、Rangeで書いた方がどの列に処理をするか、わかりやすいのは明らかです。

2,For~to を横に使いたい場合のみ、Cellsを使う

一点だけ例外は、横方向にFor~toを行う場合です。A列に処理を行った後、B列、C列…と処理をする場合は、Cellsを使う必要があります。

これはVBAのFor~toでは、数を増やしていくからです。Rangeでは列を数字で指定できない為、横方向にForループを行う場合Cellsを使う必要があります。

厳密に言うと、Rangeで横に使うこともできなくはありません。ただそれをするためにややこしいコードを書く必要があり、逆に読みにくいコードになってしまいます。横方向にFor~toを使う場合は、素直にCellsを使うようにするようにしましょう

まとめ

今回は、RangeとCellsの使い方と使い分けについて紹介していきました。ポイントをまとめるとこのようになります。

・RangeもCellsも場所を表す。Rangeは範囲指定ができる。

・Rangeは英語と数字で場所を表し、Cellsの場合(縦,横)で書く

・使うのは基本的にRangeだけでいい

・For~to を横に使いたい場合のみ、Cellsを使う

RangeとCellsはVBAの最も基本になるコードになります。皆さんも今回のポイントを意識して、VBA学習を進めてみてください!

※おすすめ学習法と初心者におすすめの書籍です

コメント

タイトルとURLをコピーしました