このページでは、プロシージャについて説明します。
プロシージャとは、エクセルマクロ/VBA でのプログラミングにおける、最小単位です。
プロシージャのかたまりが、モジュールです。モジュールのかたまりがプロジェクトです。
それはちょうど、「段落のかたまりが、章で、章のかたまりがひとつの小説である」のと似ています。
プロシージャには、
の3つがあります。
最も基本的なプロシージャです。マクロの記録機能で作成したマクロは自動的にSubプロシージャとして作成されています。
以下は”こんにちは”と表示するSubプロシージャです。
Sub s_macro_Hello()
MsgBox "こんにちは"
End Sub
これはボタンなどと紐付いていません。実行するには、VBEにて、[実行] → [Sub/ユーザーフォームの実行]を押して下さい。
またはツールバーにて<Sub/ユーザーフォームの実行>ボタンを押しても一緒です。
一行ずつ説明します。
Sub s_macro_Hello()
サブプロシージャ名s_macro_Helloがここから始まります、という意味です。
MsgBox "こんにちは"
”こんにちは”とメッセージボックスに表示します。
End Sub
サブプロシージャ名s_macro_Helloがここで終わり、という意味です。
「ボタン押す」とか「ブックが開かれる」とか「シートがアクティブになる」などの、何らかのきっかけにあわせて実行されるプロシージャです。
そのきっかけのことをイベントといいます。理解としては”トリガ”となる動作、と考えれば覚えが良いでしょう。
Functionプロシージャは、Subプロシージャと同じく、他のプロシージャから呼び出すことができます。
ただし、違うのは、そのプロシージャ内で実行した結果を、呼び出し元に返すという特徴があることです。
その呼び出し元に返される値のことを「戻り値」といいます。
セルA1に名前が入力されており、ボタンを押すと継承をつけて”●●様”と表示するにはこうします。
Private Sub CommandButton1_Click()
MsgBox Keishou(Range("A1").Value)
End Sub
Function Keishou(strName)
Keishou = strName & "様"
End Function
一行ずつ説明します。
Private Sub CommandButton1_Click()
「CommandButton1」という名前のボタンが押されたら実行されるイベントプロシージャです。このプロシージャからFunctionプロシージャを呼び出します。
MsgBox Keishou(Range("A1").Value)
セルA1に対し、プロシージャKeishouを実行しています。Keishouは関数ではありません。ユーザ(この場合は管理者)が作ったプロシージャです。
つまり、FunctionプロシージャKeishouの引数に、セルA1の値を指定しているのです。
End Sub
「CommandButton1」という名前のボタンが押されたら実行されるプロシージャの終わりです。
Function Keishou(strName)
ここからがFunctionプロシージャです。指定された引数が変数strNameとなっています。この変数strNameはFunctionプロシージャ内部で使用されます。
strNameには、呼び出しもとの引数に指定されたセルA1の値が入っています。
Keishou = strName & "様"
Functionプロシージャ名 = 戻り値
これが戻り値を指定する構文です。”&”は文字列と文字列を連結する演算子です。この文を日本語にすれば「Keishouの戻り値は、strName様」だ、ということになります。
前述の通り、変数strNameはセルA1の値であり、セルA1の値はここでは”山田太郎”なので、結果的に「Keishou ="
山田太郎様"」と同義です。
そして、プロシージャ名のの右辺が戻り値なので、呼び出し元プロシージャの「MsgBox Keishou(Range("A1").Value)」は、「MsgBox
"山田太郎様"」と同じ意味になり、そのように表示されることになるわけです。
End Function
Functionプロシージャの結びです。Functionプロシージャは”Function”で始まり、”Function”で終わります。