「Optional」は 引数を省略できるようにする仕組み です。
普通の引数は必ず渡さないとエラーになりますが、Optionalを付けると「渡してもいいし、渡さなくてもいい」になります。
基本の書き方
Sub Greet(ByVal name As String, Optional ByVal polite As Boolean = True)
If polite Then
MsgBox "こんにちは、" & name & " さん。"
Else
MsgBox "やあ、" & name & "!"
End If
End Sub
VB- Optional を付けると、その引数は省略可能になる
= Trueのように 既定値(デフォルト値) を設定できる- 呼び出し側で引数を省略すると、その既定値が使われる
呼び出し例
Sub TestGreet()
Call Greet("佐藤") ' politeは省略 → Trueが使われる
Call Greet("佐藤", False) ' politeにFalseを渡す
End Sub
VB- 省略した場合 → 「こんにちは、佐藤 さん。」
- 値を渡した場合 → 「やあ、佐藤!」
よくある使い方
1. 書式やオプションを切り替える
Sub ShowScore(ByVal name As String, ByVal score As Long, Optional ByVal passLine As Long = 60)
If score >= passLine Then
MsgBox name & "さんは合格です!"
Else
MsgBox name & "さんは不合格です…"
End If
End Sub
Sub TestScore()
Call ShowScore("山田", 75) ' passLine省略 → 60
Call ShowScore("田中", 75, 80) ' passLineを80に変更
End Sub
VB2. 出力の仕方を選べる
Sub PrintMessage(ByVal msg As String, Optional ByVal showBox As Boolean = True)
If showBox Then
MsgBox msg
Else
Debug.Print msg ' イミディエイトウィンドウに出力
End If
End Sub
VB注意点
- Optionalは必ず最後の引数に置く
→ 途中の引数を省略すると分かりにくくなるため。 - 既定値を設定しないときは Variant型になる
→ その場合はIsMissing()関数で「渡されたかどうか」を判定できる。
例:
Sub Hello(Optional ByVal name As Variant)
If IsMissing(name) Then
MsgBox "名前が省略されました"
Else
MsgBox "こんにちは、" & name & " さん"
End If
End Sub
VBまとめ
- Optional を使うと「引数を渡さなくても動く」柔軟なプロシージャが作れる
- 既定値を設定しておくと、呼び出しがシンプルになる
- IsMissing を使えば「渡されたかどうか」を判定できる

