Excel VBA | 引数を省略可能にする Optional の使い方

VBA
スポンサーリンク

「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
VB

2. 出力の仕方を選べる

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 を使えば「渡されたかどうか」を判定できる
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました