シリーズ前回の記事でVBAを書くための場所「標準モジュール」を表示させることができました。
今回は、簡単なプロシージャを作ってVBAの基本構文を学んでいきましょう。



具体的には、以下の項目を解説します。
- プロシージャ
- ステートメント
- オブジェクト
- プロパティ
- メソッド
A1セルの内容を書き変えるプログラムを書いてみよう
では、前回解説した「標準モジュール」に以下のプログラムを入力してみてください。
Sub A1セル()
Range("A1").Value = 1
End Sub
入力したら、VBA上メニューの再生ボタン(▷)を押してください。



ワークシートのA1セルに「1」と入力されていたら成功です!



VBAプログラムの基本構造
入力したプログラムからVBAの基本構造を見てみましょう。
Subプロシージャ
VBAは「Subプロシージャ」と呼ばれる処理の固まりが集まってできています。
Sub プロシージャ名()
処理
End Sub
Subプロシージャは「Sub」で始まり、「End Sub」で終わります。中にプログラムしたい具体的な処理を書いていきます。
プロシージャ名は自由につけられます。日本語も使えるので、分かりやすいプロシージャ名をつけてください。



Subプロシージャ以外にもFunctionプロシージャやPropertyプロシージャがありますが、まずはSubプロシージャについて覚えていきましょう。
ステートメント
Subプロシージャに内包されている1つ1つの処理を「ステートメント」といいます。
例では、
Range("A1").Value = 1
の部分がステートメントです。
オブジェクトとプロパティ
ステートメントの内容を詳しく見てみましょう。
Range("A1").Value = 1
Rangeはセル範囲を表すオブジェクト(後述)です。Range()
とし、()
のなかにセルの名前を入れることで特定のセルを指定できます。
.Value
は「値」を表すプロパティ(後述)です。
つまり、上記のステートメントは
「A1セル」の「値」=「1」
という意味だったのです。
VBAではこのように、まず処理を行いたい「対象」(ここでは「A1のセル」)を書きます。そのあと「.」を入力し、対象の「どの部分」か(ここでは「セルの値」)を入力します。最後に指定する「内容」(ここでは「1」)を入力し「=」でつなぎます。
[処理を行いたい対象].[対象のどの部分か]=[内容]Range("A1").Value = 1
ここで「オブジェクト」と「プロパティ」という用語を覚えましょう。
「命令を行いたい対象」を「オブジェクト」
「対象の指定したい部分」を「プロパティ」
と呼ぶ。
ステートメントの書き方は、
オブジェクト.プロパティ=プロパティの値
オブジェクトとメソッド
もう1つプロシージャを書いてみましょう。
Sub A1セル削除()
Range("A1").ClearContents
End Sub
このプロシージャを標準モジュールに入力し、実行します。



今度はA1セルの値が消えたはずです。
.ClearContents
は「セルの値を消す」という意味です。
先ほどまでの知識だと.ClearContents
はプロパティに見えますが、実は違います。.ClearContents
はメソッドと呼ばれます。
プロパティは「セルの値」「セルのフォント」のように名詞的なのに対し、メソッドは「行を挿入する」「値を消す」など動詞的なものだと押さえておくと理解しやすいでしょう。
「オブジェクトに対して実行したい命令」=「メソッド」
オブジェクト.メソッド
VBAは基本的に「オブジェクト」に対し、何らかの「プロパティ」もしくは「メソッド」を指定するという形をとっていきます。



メソッドにはオプションを付けられるケースもあります。
例えば、「ワークブック.閉じる」というときに、保存しないで閉じて欲しい場合はワークブック.閉じる 保存しない
というように引数(オプション指定)を付けて記述します。
VBAの基本構造をおさらい
ここまでの内容をまとめます。
モジュール→プロシージャ→ステートメント
という階層構造になっている。
オブジェクト.プロパティ=値
オブジェクト.メソッド
ステートメントについての補足
実は、ステートメントという概念は解釈によって含まれる範囲が変わってきます。
今回は、Subプロシージャの中身の各行をステートメントと呼んでいましたが、厳密にはSubもステートメントです。
このシリーズで紹介していく予定ですが、繰り返し処理や場合分けなど、より高度な命令を実行するためにForやSelectなどのフロー制御を行うステートメントなどもあります。



ステートメントにもいろいろな種類がありますが、初心者のうちは厳密な分類を覚えるより、個々の使い方のいくつかをまず覚えてから分類を学んだ方がより理解しやすいと思います。
コメント