プロシージャの種類
プロシージャには次の3種類があります。
- Subプロシージャ:値(結果)を返さないプロシージャ
- Functionプロシージャ: 値(結果)を返すプロシージャ
- Propertyプロシージャ:クラスモジュールで使用されるプロシージャ。ここでの解説は省きます。
ここで重要なのは、Subプロシージャが値を返さない、Functionプロシージャが値を返すプロシージャであることです。
Functionプロシージャには、処理につかう値を引数として渡すことができます。
Functionプロシージャの例
Sub toilet()
Dim gender As String
gender = InputBox("あなたの性別を「男性」か「女性」で入力してください", "性別の入力", "男性")
If gender = "男性" Or gender = "女性" Then
MsgBox トイレの案内(gender)
Else
MsgBox "男性か女性で入力してください"
Exit Sub
End If
End Sub
Function トイレの案内(gender As String)
If gender = "男性" Then
トイレの案内 = "男性用トイレは2F、4Fの階段の横にございます。"
Else
トイレの案内 = "女性用トイレは1F、3F、4Fの階の段横にございます。"
End If
End Function
処理としては、
1.Subプロシージャ:画面で男性もしくは女性を入力させて、変数genderに代入させる
2.Subプロシージャ:男性もしくは女性を入力した場合は、変数genderを引数としてFunctionプロシージャ「トイレの案内」に渡す
男性・女性以外を入力された場合は、Exit Subで処理を抜ける
3.Functionプロシージャ:genderの値が男性か女性かによって、トイレの案内が返す文字列を決める
4.Subプロシージャ:Functionプロシージャから返ってきた文字列をMsgBoxで表示する
Callステートメント:別のSubプロシージャの呼び出し
別のSubプロシージャを呼び出すためには、Call プロシージャ名で指定します。
Sub tax()
Call dataInput
Dim num As Long
num = 1
Do While Cells(num, 1) <> ""
Cells(num, 2) = Cells(num, 1) * 1.1
num = num + 1
Loop
End Sub
Sub dataInput()
Dim i As Long
For i = 1 To 10
Cells(i, 1) = i
Next i
End Sub
Sub taxプロシージャを実行すると、最初にCallによってdataInputプロシージャを呼び出されます。
Callステートメントを使わずに、Subプロシージャ名のdataInputのみを記述しても呼び出しはできますが、Subプロシージャを呼び出していることを明示的にするためにもCallステートメントを使います。
Subプロシージャを呼び出すときは、Callステートメントを使う。
※Callを使わなくても呼び出しはできるが、明示的にSubプロシージャを呼び出していることを分かりやすくするために、Callステートメントを記述する。