VBA初心者の方が感じるハードルの高さは、VBAとエクセルの繋がりが分かりにくいことではないでしょうか。ここではいくつかの操作を通して、エクセルとVBEのつながりを体験してみます。その操作を集めたものが、いわゆるVBAプログラムという訳です。
【マクロ記録を使うのはやめよう】イミディエイトウインドウでエクセルと対話する
エクセルを起動し、[Alt]+[F11]でVBE(VBエディタ)が起動します。本来はデバッグ用途であるイミディエイトウィンドウを敢えて使い、エクセルと対話してみます。
もしイミディエイトウィンドウが表示されていない場合、「表示」-「イミディエイトウィンドウ」で、表示 / 非表示を切り替えられます。
セルの値を参照する
まずエクセル側でテスト的にデータを入れておきます。
イミディエイトウィンドウに次のように入力し、enterしてみます。
?range("A1").Value
セルに値を入力する
= で繋ぐことで、指定した値をセットすることができます。この場合、数学的な「等しい」という意味ではなく、「左辺に右辺を代入する」といった意味になる点に慣れが必要です。
range("A10").Value = 1000
VBE側には何も反応がなく、その代わりにエクセル側でA10セルに1000と入力されました。
この時、カーソルの位置に無関係に値が入っていることに注目してください。
通常の操作では必ずセルをアクティブにして入力していましたが、VBAではそうしなくても操作ができます。マクロ記録機能も、操作そのものを記録する特性上、セル選択をする動きがたくさん記録されます。
数字以外をセットするときにはダブルクォーテーションで囲みます。
例えばC1セルに C1セルですよ! という文字列をセットするなら
range(“C1”).value = “C1セルですよ!“
C1セルに A1セル × 10000 という数式をセットするなら
range(“C1”).formula = “=A1 * 10000“
となります。
まとめ
イミディエイトウィンドウでエクセルと対話ができる。
- ?をつけるとエクセルへ問い合わせができる
- ?をつけないとエクセルへの指示になる
- 数値以外をセットするには、ダブルクォーテーションで囲む必要がある
脱初心者のために
セルの値、アドレス、数式の参照ができました。セル値、数式を入れることもできました。
そして処理対象のセルを指定することができれば、セルに値をセットしたり読んだりすることができます。セルの指定の仕方には4種類あります。
- range(“セルのアドレス”)
- cells(“行, 列”)
- selection カーソルで選択しているセルの意味
- offset 上の3つと併用し、「さらに何行何列ズレたセル」という指定ができる
人間に分かりやすいのはrangeです。range(“A1”)ならA1セル。場所がイメージしやすいからです。
プログラムと相性が良いはcellsだと思います。cells(“2, 1”)なら2行1列目=A2セル、と人間には変換が必要ですが、プログラム的には「cells(“x, 1”) を x=1から10まで実行」のように数字を使って制御しやすいからです。これについては別の記事で説明します。
コメント