本記事では、知っておきたいVBAの基本構造を4つ紹介します。その4つは、Subプロシージャ・オブジェクト・メソッド・プロパティの4つです。
subプロシージャが必須であることは知っておく必要がありますが、普段VBAを作成する際にはあまり意識しないと思うので、実際にVBAを書く/編集する場合には残りの3つを知っておけば良いのかもしれません。
VBAのコード例
VBAの例としては、前回記事で作った「セルA1をB1に移動」というマクロを使いたいと思います。
前回作ったコードはこちらです。
テキストバージョン↓(コピペで使えます)。
Sub セルA1をB1に移動()
'
' セルA1をB1に移動 Macro
'
'
Range("A1").Select
Selection.Cut
Range("B1").Select
ActiveSheet.Paste
End Sub
Subプロシージャ
Subプロシージャは、「マクロを実行できるVBAプログラムのまとまり」を指します。
VBAの記述としては、「Sub マクロ名()」で始まり、「End Sub」で終わる部分のことです。上の例では、「Sub セルA1をB1に移動()」〜「End Sub」の部分になるので、要は、上のプログラム全体のことになります。
Sub マクロ名()〜End Subの構造を持っていないと、マクロとして実行してくれないので、この記述は絶対に必要な部分です。ですが、前回記事の方法でマクロを記録すれば、自動的に入力された状態でVBAが作成されるので、意識することは少ないかもしれません。
ただ、慣れてきて手入力でVBAを書く場合には、忘れると実行してくれません(汗)
オブジェクト
オブジェクトは、マクロの操作対象となる「もの」のことです。具体的には、エクセルのブックやシート、セル、グラフなどのことを指しています。
上の例では、「Range(“A1”)」によってA1セルというRangeオブジェクトを指定しています(取得すると表現される場合もあります)。
メソッド
メソッドは、操作対象となるオブジェクトに対して行う操作のことです。
例えば上の例で、「Range(“A1”).Select」とありますが、Selectの部分がSelectメソッドです。この場合には、Range(“A1”)で指定されたセル(A1)に対して、Select(つまり、選択する)という操作を行うということを示しています。
次の行で出てくる「Selection.Cut」のCutもメソッドです(Cutメソッド)。Cutメソッドは切り取りの操作を表しています。Selectionはこの後説明するプロパティの一種で、この場合では、前の行「Range(“A1”).Select」で選択されたRangeオブジェクト(つまりA1セル)のことを指しています。つまり、「Selection.Cut」は「A1セルを切り取る」操作になります。
メソッドを使った命令文(ステートメントと呼びます)の書式は、次のようになります。
オブジェクト.メソッド
メソッドの後に引数を伴う場合もありますが、後日記事にしたいと思います。
プロパティ
プロパティは、対象となるオブジェクトに含まれる情報です。この「情報」には、セルに入力されている数値や、セルそのもの(Rangeオブジェクト)、作業中のシート(WorkSheetオブジェクト)や作業中のアプリケーション(Applicationオブジェクト)などが含まれます。
このプロパティという概念が実は難しいです(* *)
難しく感じる理由は、主に2つあるんじゃないかと僕は思っています。
理由その1は、プロパティ名とオブジェクト名が同じになっていることが多々あるからです。しかも、厳密にはプロパティなんだけれども、オブジェクトと同じように見えてしまうケースもしばしばです。
例えば、上のコード例にある「Range(“A1”)」は、実はプロパティです(Rangeプロパティ)。このRangeプロパティで取得される情報が、A1セルというRangeオブジェクトということになります。
ともあれ、オブジェクトを取得するプロパティに関しては、感覚的にはオブジェクトと同義のものとして扱っておいて問題ないんじゃないかと思います。
先ほど、メソッドを使った命令文は
オブジェクト.メソッド
の書式になると書きました。でも、
Range("A1").Select
の部分は、そのまま読めば
プロパティ.メソッド
の書式になっていることになるのですが、RangeプロパティはRangeオブジェクトを取得するので、
プロパティで取得されたオブジェクト.メソッド
「オブジェクト.メソッド」の書式からは外れてはいない…と理解しておけば良いのかなと思います。
プロパティを難しく感じてしまう理由その2は、「プロパティもメソッドと同じようにオブジェクトに続く書式で使われる」という点です。
つまり書式としては、
オブジェクト.プロパティ
の形になることも普通であるということです。
例えば、
Range("A1").Value
となっていた場合、このValueプロパティを使って「A1セルに入力されている数値」を情報として取得するという命令になります。
(補足)VBA内に記述されるコメント
VBAを記述している途中に、コメントを挿入することができます。上のコード例で言うと、「’ セルA1をB1に移動 Macro」の部分です。
シングルクオーテーション(’)の後がコメントとして扱われるので、この部分はVBAとしては何も意味を持ちません(実行する際には無視されます)。
ただ、このコメントを入れておくと、コードを見返した時に「何を目的としたコードだったか」がわかるので、適宜入れておくと便利です。他の方が見た時にも、コードのわかりやすさに繋がります。
まとめ
VBAを書く・編集する際に最低限知っておくべき基本構造を4つ紹介しました(Subプロシージャ、オブジェクト、メソッド、プロパティ)。
重要な点は、
- Subプロシージャは必ず書くこと
- 「オブジェクト.メソッド」の書式で書くこと
- 「オブジェクト.プロパティ」の書式で書くこと
だと思います。
また補足情報として、VBA内でコメントを挿入する方法も紹介しましたので、上手に使ってわかりやすいコードを書く参考にして頂ければと思います。
コメント