このページの内容について
このページは、VBAエキスパート(ExcelVBAスタンダード)試験合格講座の第一回記事です。公式テキスト第1章「プロシージャ」の内容について解説します。自分でも手を動かしながら読み進めてください。
プロシージャの呼び出し
ベーシックまでの内容
プロシージャはマクロの最小実行単位です。プロシージャには値を返すことができないSubプロシージャと値を返すことができるFunctionプロシージャがあります。これだけ見ると値を返すことができるFunctionプロシージャのみを使えば良いように見えますが、呼び出し方やユーザーからの見え方に違いがあり、開発においてはそれぞれ使い分けて使用します。プロシージャはプロシージャを呼び出すことができます。
サンプルコード(クリックでコピー)
Private Sub Caller()
Call Msgbox(Adder(10, 11))
End Sub
Private Function Adder(ByVal x As Long, ByVal y As Long) As Long
Adder = x + y
End Function
実行結果
上記サンプルコード上段の「Caller」を実行すると、Functionプロシージャである「Adder」を呼び出します。「Adder」は2つの整数(Long)を受け取り、足し算した結果を返します。「Caller」は返された整数値「21」をそのままMsgbox関数に渡してメッセージを表示します。
値渡しと参照渡し
プロシージャは値を受け取ることができます。値の受け取り方には2種類あります。
値渡し
引数に「ByVal」を設定すると、値渡しになります。値渡しされた引数はプロシージャ内で書き換えをしても呼び出し元に影響しません。
参照渡し
引数に「ByRef」を設定すると、参照渡しになります。参照渡しされた引数はプロシージャ内で書き換えた内容が、呼び出し元に反映します。
サンプルコード(クリックでコピー)
Private Sub RefCaller()
Dim a As Long, b As Long
a = 10
b = 11
Call ReferenceTest(a, b)
Debug.Print a
Debug.Print b
End Sub
Private Sub ReferenceTest(ByRef x As Long, ByVal y As Long)
x = x + 10
y = y + 10
End Function
実行結果
上記サンプルコード上段の「RefCaller」を実行すると「ReferenceTest」を呼び出します。「ReferenceTest」は第一引数を参照渡しで受け取り、第二引数を値渡しで受け取ります。そして2つの整数にそれぞれ「10」を足して処理を終了します。「RefCaller」は「ReferenceTest」に渡した2つの変数をそれぞれイミディエイトウィンドウに出力します。第一引数として渡した変数「a」には10が加算されており、第二引数として渡した変数「b」には呼び出し先の変更が反映されていないことを確認できます。
Comment