ここからは少しステップアップして、「引数を省略した場合」と「複数の戻り値を返す方法」について、初心者向けにかみ砕いて説明します。
引数を省略した場合
1. 引数に「Optional」を付ける
- VBAでは、引数を省略可能にできます。
- 書き方:
Optional 引数名 As 型 = 既定値 - 省略された場合は「既定値」が使われます。
例:
Sub Greet(Optional name As String = "ゲスト")
MsgBox "こんにちは、" & name & "さん!"
End Sub
Sub Test()
Greet "太郎" ' → 「こんにちは、太郎さん!」
Greet ' → 「こんにちは、ゲストさん!」
End Sub
VB👉 「Optional」を使うと、呼び出すときに引数を渡さなくても動きます。
2. IsMissing関数(Variant型専用)
OptionalでVariant型を使うと、IsMissingで「渡されたかどうか」を判定できます。
例:
Sub ShowMessage(Optional msg As Variant)
If IsMissing(msg) Then
MsgBox "メッセージがありません"
Else
MsgBox msg
End If
End Sub
VB複数の戻り値を返す方法
VBAのFunctionは基本的に「1つの値」しか返せません。
でも工夫すれば複数の結果を返せます。
1. 配列を戻り値にする
- Functionの戻り値を「配列」にすれば、複数の値をまとめて返せます。
例:
Function GetScores() As Variant
Dim scores(1 To 3) As Integer
scores(1) = 80
scores(2) = 90
scores(3) = 75
GetScores = scores
End Function
Sub Test()
Dim result As Variant
result = GetScores()
MsgBox "1人目の点数は " & result(1)
End Sub
VB👉 配列を返すことで「まとめて複数の値」を扱えます。
2. ByRefで値を返す
- 引数をByRef(参照渡し)にすると、呼び出し元の変数に結果を書き込めます。
- これで「戻り値以外にも複数の値」を返せます。
例:
Sub Calc(ByVal a As Integer, ByVal b As Integer, ByRef sum As Integer, ByRef diff As Integer)
sum = a + b
diff = a - b
End Sub
Sub Test()
Dim s As Integer, d As Integer
Calc 10, 3, s, d
MsgBox "合計: " & s & " 差: " & d
End Sub
VB👉 Calcは戻り値を返していませんが、sumとdiffに結果を書き込んでいます。
つまり「複数の戻り値」を返せたことになります。
まとめ
- 引数を省略したいとき →
Optionalを使う(既定値やIsMissingで判定) - 複数の戻り値を返したいとき
- 配列を戻り値にする
- ByRefで複数の変数に結果を書き込む
💡 初心者へのおすすめ練習は「同じ処理を配列版とByRef版で書いてみる」ことです。違いを体感すると理解が深まります。

