よしみな ブログ

資格試験・就活・労働問題・資産運用について記事を上げていきます。

Excel VBA(マクロ) Range Cells

Xserver Business

今回はマクロにてオブジェクト(対象)を指定する際に使用するRange・Cellsについて解説します。

 

Rangeはオブジェクト指定するためのプロパティとして使用します。(わからない方は呼び飛ばしてもらって構いません。)

 

Rangeオブジェクトはセルを指定しています。

Rangeプロパティはアクティブシート等に対して範囲指定を行うものとなります。

セル範囲に対しても相対参照で範囲指定を行うことが出来ます。

 

Rangeオブジェクト、Rangeプロパティ共に意味はほとんど変わらないので、今回は同様とみなして解説します。

 

CellsもRangeと同様にオブジェクト、プロパティに分けられますが、Rangeと同様に意味はほとんど変わらないので今回は同様とみなします。

 

※CellsとRangeはまったく違います。

(オブジェクトとプロパティの意味については同様という意味です。)

 

CellsとRangeの違い

簡単に説明します。

Rangeは複数セルを指定する際に使用します。また、文字列でセルを指定できます。

 

Cellsは変数を用いてセルを指定する際に使用します。また、数値でセルを指定できます。(文字列でもできます。文字列を使用する場合(4,"B")と記述する必要があります。具体的には後ほど書きます。)

 

※変数を用いて複数セルを指定する場合はCells、Rangeの両方を使用して指定します。具体的な説明は後ほど行います。

 

説明文ではよくわからないと思いますので、具体的にコードを書いて行きます。(筆者もVBAを学び始めたときはオブジェクト指向とはなんぞや?からでしたので、わからなくても大丈夫です。コードを書いていれば次第にわかるようになります。)

 

1.Rangeオブジェクト

Range("B2").Value = 12

とすると下記のようになります。

f:id:yosi_mina:20200424223436p:plain

1.実行結果



 

2.Rangeプロパティ

ActiveSheet.Range("E4").Value = 14

どすると下記のようになります。

f:id:yosi_mina:20200424223719p:plain

2.実行結果



 

1と2の違いを説明します。

これは上記でも述べたオブジェクトであるのか、プロパティであるのかの違いです。

1のRangeはオブジェクトとなります。

2のRangeはプロパティとなります。

2ではActivesheetがオブジェクトとなっています。

 

考え方としては、

1番左にオブジェクトがきます。(これの)

それ以降にプロパティがきます。(何をどうする)

オブジェクトとプロパティが一つずつである場合は「オブジェクト」を「プロパティ」するとなります。

 

※オブジェクトとプロパティについては後日記事を上げます。

 

1では「セルB2の値を12にする」というコードになります。

 

2では「アクティブシートのセルE4の値を14にする」となります。

 

3.Cellsオブジェクト

次にCellsのコードを書きます。

Cells(4, 3).Value = 12

もしくは

Cells(4, "C").Value = 12

とすると下記のようになります。

f:id:yosi_mina:20200424223741p:plain

3.実行結果

※CellsプロパティについてはRangeプロパティと同じ方法で行えば、セル指定できます。(オブジェクトにセルもしくはセル範囲を指定した場合は相対参照にてセル指定を行います。これらについては次回のブログで上げたいと思います。)

以上がRangeとCellsの違いです。

Xserver Business

 

RangeとCellsの使い分け

Rangeは複数セルを選択する際に使用します。Cellsはマクロ内で変数の値を用いてセルを指定したい際に使用します。

 

具体的にコードを書きます。

4.Rngeオブジェクトで複数セルを選択

Range("A1:E4").Select

とすると、下記のようになります。

f:id:yosi_mina:20200424223821p:plain

4.実行結果



 

これで複数のセルが指定できます。

 

Cellsを用いて複数セルを選択する場合

Cellsだけでは複数セルの選択することができません。

しかし、Rangeを使用することで変数を使用してセルを選択することができます。

 

具体的にコードを書きます。

5.Rangeオブジェクト・Cellsプロパティを使用して複数セル選択

Range(Cells(1, 1), Cells(4, 3)).Select

 

とすると、下記のようになります。

f:id:yosi_mina:20200424223840p:plain

5.実行結果



 

この数値の部分(1や4、3の場所)に変数を入れることで変数を使用して複数セルを指定できます。

これも具体的にコードを書いておきます。

6.Range・Cellsの両方を用いて変数に順じたセル選択を行う。

i = 4 + 3

j = i + 1

Range("A1", Cells(i, j)).Value = 11

とすると、下記のようになります。

f:id:yosi_mina:20200424223856p:plain

6.実行結果



 

これはRange(セル1,セル2)とするとセル1とセル2の間の範囲を指定できることからセル2にCellsで変数を用いたセル指定を行うことにより、複数セルを指定する方法になります。

 

これで変数を用いても複数セルを選択することができます。

まとめ
  • Range、Cells共にオブジェクト・プロパティがある。
  • Rangeは文字列で、複数のセルを指定できる。
  • Cellsは数値で、変数の値で1つのセルを指定できる。
  • 変数を用いて複数のセルを指定する場合は、RangeとCellsの両方を使用して行う。

 

以上です。

 

ここまで読んで頂き、ありがとうございました。