INDEX
Optionalの概要
プロシージャの引数を省略可能にする VBAの予約語 | ||
Optional 概要 Optional キーワードは、VBAのプロシージャ(Sub や Function)の引数を省略可能にするために使用されます。Optional を指定した引数は、呼び出し時に省略することができます。 わかりやすく説明 プロシージャの引数を「指定しなくてもOK」にする命令。 |
||
|
Optionalを使った基本的な引数の省略
以下の例では、Optional
を使って引数を省略可能にし、デフォルト値を設定しています。
Sub Greet(Optional name As String = "ゲスト")
MsgBox "こんにちは、" & name & " さん!"
End Sub
解説:
Optional name As String = "ゲスト"
: 省略時のデフォルト値を「ゲスト」に設定。Greet "田中"
→ 「こんにちは、田中 さん!」と表示される。Greet
(引数なし) → 「こんにちは、ゲスト さん!」と表示される。
OptionalとIsMissingを使った省略判定
数値型の引数を省略可能にする場合、IsMissing
を使って引数が渡されたかどうかを判定できます。
Sub ShowValue(Optional x As Variant)
If IsMissing(x) Then
MsgBox "引数が省略されました"
Else
MsgBox "渡された値: " & x
End If
End Sub
解説:
IsMissing(x)
: 引数が渡されていない場合True
を返す。ShowValue 10
→ 「渡された値: 10」と表示される。ShowValue
(引数なし) → 「引数が省略されました」と表示される。
Optionalを使った複数の引数の設定
複数の引数を省略可能にし、それぞれのデフォルト値を設定できます。
Sub Calculate(Optional x As Integer = 5, Optional y As Integer = 10)
MsgBox "合計: " & (x + y)
End Sub
解説:
Calculate
→ 「合計: 15」と表示(デフォルト値 5+10)。Calculate 8
→ 「合計: 18」と表示(8+10)。Calculate 8, 12
→ 「合計: 20」と表示(8+12)。
Optionalの注意事項
- Optional引数は必ず最後に配置する: 通常の引数の前には置けない。
- デフォルト値を設定できるのは基本データ型のみ:
Variant
型にはデフォルト値を設定できない。 - 省略判定には
IsMissing
を使う: 数値型の省略判定はIsMissing
を使う。
よくある質問
- Q: Optional はすべてのデータ型に使えますか?
- A: はい、基本的にすべてのデータ型に使えますが、デフォルト値を設定できるのは
String
やInteger
などの基本データ型のみです。Variant
型にはデフォルト値を設定できません。 - Q: Optional を使うと処理速度が遅くなりますか?
- A: ほとんど影響はありませんが、
IsMissing
を頻繁に使う場合は若干の処理オーバーヘッドが発生します。 - Q: Optional を使うメリットは?
- A: 引数を柔軟に扱えるようになり、デフォルト値を設定することでコードの可読性が向上します。
まとめ
- Optional を使うと、プロシージャの引数を省略可能にできる。
- デフォルト値を設定できるので、引数がない場合の挙動を統一できる。
- 数値型の省略判定には
IsMissing
を使う。 - Optional を使うことで、柔軟で使いやすいプロシージャを作成できる。