RangeとCellsを使ったセルの指定

かばくん

VBAを始めるには、何から勉強すればいいですか?

へびせんせい

まずはセルの指定の方法を覚えることが大事ですね!
セルの指定方法は、複数のセルを指定する「Range」と
単一セルを指定する「Cells」の2通りあります。

Point!
Range・・・複数のセルを指定(単一セルも可能)
Cells ・・・単一のセルを指定

Rangeを使ったセルの指定方法

Rangeでは単一のセル、または複数のセルを指定することができます。

ただし、単一のセル指定は後述するCellsのほうが汎用性が高いので、Rangeは複数のセルを指定するもの。と覚えても問題ありません。

Rangeで単一のセルを指定する

Range("セル番地")

例:Range("A1")

Rangeで複数のセルを指定する

セルをひとつずつ選択

Range("セル番地,セル番地")

例:Range("A1,C3")

A1とC3の2つのセルを指定する。これは、3つ以上のセルも指定可能です。

セルの範囲で選択

Range("セル番地:セル番地")

例:Range("A1:C3")

または、

Range("セル番地","セル番地")

例:Range("A1","C3")

上記の2つはまったく同じセルを指定しており、A1からC3までの9つのセルを指定しています。

行または列で選択

Range("行番号:行番号")
Range("列番号:列番号")

例:Range("1:3")もしくは、Range("A:C")

これで行や列としてセルを指定できます。1行や1列を指定したい場合は同じ値を入力すれば可能です。

しかし、行や列を指定するときは、RowsプロパティやColumnsプロパティを使うほうが一般的です。

そのため、Rangeで行や列を指定する方法は忘れてしまってよいです。

Rows,Columnsで1行(1列)を選択

Rows(行番号)
Columns(列番号)

例:Rows(1)もしくは、Columns(1)

Rows,Columnsで複数行(複数列)を選択

Rows("行番号:行番号")
Columns("列番号:列番号")

例:Rows("1:3")もしくは、Columns("1:3")
*1行のみを指定するときは、Rows(1)のようにも書ける

こちらのほうが数字のみで指定できるので、わかりやすいです。

Rangeを使ったセルの指定は、括弧やダブルクォーテーションの位置が非常に紛らわしく覚えづらいです。
正直、しっかり覚える必要はありません。
使ってみて、違ったら修正する、そのくらいの認識で問題ありません。

Cellsを使ったセルの指定の方法

Cellsは単一のセルしか指定できません。

Cellsで単一のセルを指定する

Cells(行インデックス,列インデックス)

例:Cells(1, 3)

これは、1行目・3列目のセルを指定したことになります。つまり、"C1"セルです。

このCellsのセル指定の方法はVBAでは非常に重要です。

変数やFor文を用いてセルを指定するときは、ほぼCellsを使うことになります。

例:Cells(row, col)、Cells(j, i) (今はよくわからなくても大丈夫です)

Point!
Cells(行インデックス,列インデックス) の形は必ず覚えよう!

RangeとCellsを両方使ってセルを指定する

Rangeの中でCellsを用いて複数のセルを選択することも可能です。

Range(Cells(行インデックス,列インデックス),Cells(行インデックス,列インデックス))

例:Range(Cells(1, 1), Cells(3, 3))

セルを指定してマクロを実行する

セルの指定方法がわかったので、簡単なマクロを実行してみます。

では、range1というマクロを作成して、A1セルにHelloと表示させましょう。

実行は、上部バーの緑の再生マークかF5キーです。

Sub range1()
  Range("A1").Value = "Hello"
End Sub

これは、Rangeオブジェクトで指定したセルのValueプロパティに文字列"Hello"を代入するといった意味合いになります。

「オブジェクト?プロパティ??」となるかもしれませんが、今はあまり気にしなくてよいです。

セルに値を入力する基本形となるので、覚えておきましょう!

次に、cells1というマクロを作成して、A2セルにこんにちはと表示させましょう。

Sub cells1()
  Cells(1, 2).Value = "こんにちは"
End Sub

さいごに、Rangeの中にCellsが入るパターンです。

Sub range_cells1()
  Range(Cells(2, 1), Cells(4, 4)).Value = "Good-bye"
End Sub

いかがでしょうか。サンプルのコードは実際に入力して動かしてみると動作が理解できます。


Range・Cellsの練習問題

へびせんせい

・C5セルに"lucky"と表示させるマクロを作りなさい(ただしCellsを使うこと)
・Aの列に"happy"と表示させるマクロを作りなさい(ただしColumnsを使うこと)

解答はコチラ

Excelを開いて、コードを確認してください

Download