プロシージャ
概要
プロシージャとは特定の機能を実現するための命令群のことです。 命令とは「MsgBox Cells(1,1).Value」のような一文を指します。 このような命令文が集まって1つの機能が実装されます。 プロシージャはマクロとして使用することも、この後説明する 「Sub」や「Function」から別のプロシージャを呼び出すことが可能です。 ※他の言語を知っている方は「プロシージャ = 関数」と 考えていただくと分かりやすいと思います。
Sub
Subプロシージャは呼び出し側に情報を返さないプロシージャです。 このプロシージャのみで処理を完結させたい時はSubを使用します。
書式例 | 具体例 |
---|---|
Sub プロシージャ名(引数) End Sub |
Sub Test() End Sub |
呼び出し方法
他のプロシージャから呼び出す場合、プロシージャ名のみで呼び出す方法と Callステートメントを使用して呼び出す方法があります。 以下はプロシージャのみで呼び出している例です。
具体例
Sub Test()
' プロシージャ呼び出し
Test2
MsgBox Cells(1,1).Value
End Sub
Sub Test2()
Cells(1, 1).Value = 100
End Sub
実行結果
100と書かれたメッセージボックスが表示される
Callステートメント
Callステートメントはプロシージャの前に指定することで意味を有効となります。
具体例
Sub Test()
' Callによるプロシージャ呼び出し
Call Test2
MsgBox Cells(1,1).Value
End Sub
Sub Test2()
Cells(1, 1).Value = 100
End Sub
実行結果
100と書かれたメッセージボックスが表示される
Callステートメント使用理由
プロシージャ名のみでも呼び出しが可能なのに Callステートメントを使用する理由は「コードの可読性向上」です。 引数無しのプロシージャ呼び出しは()が必要ないので、 変数としての見分けがつきません。 VBAのコードに慣れている人はすぐに分かりますが、 慣れてない人は混乱するかもしれません。 「Call プロシージャ名」を使用することで 誰でもプロシージャを呼び出していることが分かるようにしています。
ステートメント
ステートメントとは「文」や「命令文」という意味 Callステートメントとは「Call文」ということ
Function
FunctionプロシージャはSubプロシージャとは異なり、 呼び出し側に実行結果を返すことができます。 FunctionプロシージャはExcelから起動する際、 マクロの一覧に表示されないので注意して下さい。 ※Functionプロシージャ名を指定したら起動可能です。
書式例 | 具体例 |
---|---|
Function プロシージャ名(引数) As 戻り値のデータ型 プロシージャ名 = 実行結果 End Function |
Function GetMyName() As String GetMyName = "山田太郎" End Sub |
呼び出し方法
呼び出し方法はSubと同じで使用したい場所でFunction名を書きます。
SubではCallを付けることができましたが、Functionではつけません。
Functionが実行されるとFunctionの結果が返ってくるので、
その情報を保持したい場合は変数に代入します。
Sub Test()
' Function呼び出し
Cells(1,1).Value = GetMyName
MsgBox Cells(1, 1).Value
End Sub
Function GetMyName() As String
' 戻り値の指定
GetMyName = "山田太郎"
End Function
実行結果
山田太郎と書かれたメッセージボックスが表示される
実行結果(戻り値)について
Function~End Functionの間に必要な命令を書きます。
実行結果はプロシージャ名が結果を格納するための変数として扱われるので
プロシージャ名にFunctionの結果を代入します。
Function GetMyName() As String
' 戻り値の指定
GetMyName = "山田太郎"
End Function