かばくん
VBAを始めるには、何から勉強すればいいですか?
へびせんせい
まずはセルの指定の方法を覚えることが大事ですね!
セルの指定方法は、複数のセルを指定する「Range」と
単一セルを指定する「Cells」の2通りあります。
Range・・・複数のセルを指定(単一セルも可能)
Cells ・・・単一のセルを指定
Rangeを使ったセルの指定方法
Rangeでは単一のセル、または複数のセルを指定することができます。
ただし、単一のセル指定は後述するCellsのほうが汎用性が高いので、Rangeは複数のセルを指定するもの。と覚えても問題ありません。
Rangeで単一のセルを指定する
例:Range("A1")
Rangeで複数のセルを指定する
セルをひとつずつ選択
例:Range("A1,C3")
A1とC3の2つのセルを指定する。これは、3つ以上のセルも指定可能です。
セルの範囲で選択
例:Range("A1:C3")
または、
例:Range("A1","C3")
上記の2つはまったく同じセルを指定しており、A1からC3までの9つのセルを指定しています。
行または列で選択
Range("列番号:列番号")
例:Range("1:3")もしくは、Range("A:C")
これで行や列としてセルを指定できます。1行や1列を指定したい場合は同じ値を入力すれば可能です。
しかし、行や列を指定するときは、RowsプロパティやColumnsプロパティを使うほうが一般的です。
そのため、Rangeで行や列を指定する方法は忘れてしまってよいです。
Rows,Columnsで1行(1列)を選択
Columns(列番号)
例:Rows(1)もしくは、Columns(1)
Rows,Columnsで複数行(複数列)を選択
Columns("列番号:列番号")
例:Rows("1:3")もしくは、Columns("1:3")
*1行のみを指定するときは、Rows(1)のようにも書ける
こちらのほうが数字のみで指定できるので、わかりやすいです。
Rangeを使ったセルの指定は、括弧やダブルクォーテーションの位置が非常に紛らわしく覚えづらいです。
正直、しっかり覚える必要はありません。
使ってみて、違ったら修正する、そのくらいの認識で問題ありません。
Cellsを使ったセルの指定の方法
Cellsは単一のセルしか指定できません。
Cellsで単一のセルを指定する
例:Cells(1, 3)
これは、1行目・3列目のセルを指定したことになります。つまり、"C1"セルです。
このCellsのセル指定の方法はVBAでは非常に重要です。
変数やFor文を用いてセルを指定するときは、ほぼCellsを使うことになります。
例:Cells(row, col)、Cells(j, i) (今はよくわからなくても大丈夫です)
Cells(行インデックス,列インデックス) の形は必ず覚えよう!
RangeとCellsを両方使ってセルを指定する
Rangeの中で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を使うこと)