VBAプログラミングの基礎知識
VBAは「プロシージャ」単位でプログラムが実行されますので、プログラムコードはプロシージャ毎に記述することになります。
つまりプログラムの実行単位を「プロシージャ」と言います。関連のある「プロシージャ」の「まとまり」を「モジュール」と呼び、汎用性のあるプロシージャはModule*に記述し、特定の動作(イベント)に対するプロシージャは、例えばユーザーフォーム上でのイベントに対するプロシージャはUserForm*に、ブックを開いたときに実行するプロシージャはThisWorkbookの、それぞれの対応するコードウインドウに記述します。
標準モジュール内の汎用性のあるプロシージャが「マクロ」と呼ばれるもので「マクロ」ダイアログから実行することができますが、イベントプロシージャは、そのイベントが発生しなければ実行されません。そこでVBEからF5キーを押すか「Sub/ユーザーフォームの実行」ボタンをクリックしてプロシージャの動作を確認します。
標準モジュール
VBEのツールバーから「挿入(I)」、「標準モジュール(M)」をクリックするか、左から3つ目の三角印から「標準モジュール(M)」をクリックすると「プロジェクトエクスプローラ」に追加されます。
標準モジュールが作成されると、その「コードウインドウ」が表示されます。
標準モジュールではSubプロシージャを作成します。コードウインドウに「sub」と入力し、スペースを入れてプロシージャ名を入力し、Enterキーを押します。
Enterキーを押すと自動的に「sub」が「Sub」のように変わり、プロシージャ名に「( )」が入力され一行あけて「 End Sub」が表示されます。
この「Sub....」と「End Sub」の間にプログラムのコードを記述します。ドキュメントモジュール
標準モジュールに対して特定のイベントに応じたプロシージャ(イベントプロシージャ)はイベントの発生するオブジェクトに対するモジュールに記述しますが、これを「ドキュメントモジュール」といいます。
イベントプロシージャ
イベントプロシージャは発生したイベントに応じて作成されるものですから標準モジュールのようにユーザーが勝手に名前を付けることはできません。
例えば「ユーザーフォーム」に「ボタンコントロール」を貼り付けダブルクリックをすると
Private Sub CommandButton1_Click() End Subのように自動的に作成されますので、この間にプログラムのコードを記述します。 イベントプロシージャはSubの前に「Private」というキーワードが付いています。プロシージャのプログラムコードの一行を「ステートメント」と呼び、プログラムのステートメントを記述する場合、ほとんどがオブジェクトに対するプロパティなどを記述します。
オブジェクトがどんなものであるかを示すものが「プロパティ」です。オブジェクトのプロパティの値を設定する書式は
オブジェクト名.プロパティ名=値
プロパティの値を取得する書式は
変数名等=オブジェクト名.プロパティ名
オブジェクトの動作や操作などの処理を行うものを「メソッド」と呼び
オブジェクト名.メソッド名
のように記述します。
オブジェクト指向プログラミングの世界では「.」が頻繁に出てきますが、これを「〜の」と読む癖を付けておいて下さい。
四則演算.xlsで記述した「lblTasu.Caption=c」を日本語で記述すると
「lblTasuオブジェクトのCaptionプロパティに変数cの値を代入する。」となります。
VBEではコマンドを小文字で入力しても確定する(Enterキーを押す)と自動的に大文字混じりのコードに変換されますが、プロシージャ名や変数などユーザーが定義するものは変換されません。
などの方法を決めておくと便利です。これらの方法は慣例としてある程度は流通しておりますが、あまり深刻に考えず、自分なりのルールを定めておいて下さい。
- プロシージャ名は小文字で始め大文字を混ぜる
例:txtAtai- 変数名の始めにはMyなどのマーク文字を付ける
例:MyAtai
この講義では、プロシージャ名はtxtAtai、変数はすべて小文字にしております。 なおMicrosoft VBAではプロシージャ名に日本語漢字も使えますので「txt単価」などのように記述している部分もあります。
慣例というのは「みんながそうしている。」という一種のルールです。
プログラムコードは作成者以外の人も手を加えたりしますので、誰が見ても分かるような書き方をしておくのが基本です。
![]()
![]()
© AstroHeart. All Rights Reserved.