背景
ChatGPT に書いてもらったコードに、わからない部分があったので教えてもらいました。保存のためここにまとめます。
https://qiita.com/Yuki-N-1016/private/64e73f1827b7b4ba2113
Optional の意味
Optional は 引数の指定を省略できる ようにするためのキーワードです。
次のような関数の場合、引数 isReg を省略できます。
Function GetPostage(ws As Worksheet, weight As Double, unit As String, regionCol As Long, Optional isReg As Boolean)
1. Optional Boolean の使い方
例:ログ出力を制御する
Sub SaveData(Optional showLog As Boolean = True)
' データを保存する処理
If showLog Then
MsgBox "データを保存しました"
End If
End Sub
呼び出し例
SaveData ' ログが表示される(デフォルト True)
SaveData False ' ログを表示しない
2. Optional String の使い方
例:挨拶の相手を省略可能に
Sub SayHello(Optional name As String = "ゲスト")
MsgBox "こんにちは、" & name & "さん!"
End Sub
呼び出し例
SayHello ' → こんにちは、ゲストさん!
SayHello "田中" ' → こんにちは、田中さん!
※Call で呼び出す場合
Sub sample()
Call SayHello("田中")
End Sub
3. Optional 数値(Integer/Double)の使い方
例:割引価格の計算(割引率を省略可能
Function CalcPrice(basePrice As Double, Optional discountRate As Double = 0.1) As Double
CalcPrice = basePrice * (1 - discountRate)
End Function
呼び出し例
price = CalcPrice(1000) ' → 900(10%割引)
price = CalcPrice(1000, 0.2) ' → 800(20%割引)
実際に自分で書いて動かしたコード
Function CalcPrice(basePrice As Double, Optional discountRate As Double = 0.1) As Double
CalcPrice = basePrice * (1 - discountRate)
End Function
Sub sample2()
Dim price As Long
price = CalcPrice(1000)
MsgBox price
End Sub
補足:Boolean型の注意点
Optional にするときは、必ず初期値を明示的に指定するのがおすすめです。
例:Optional show As Boolean = False
If flag Then は、= True が省略されています。
どちらの書き方でも動きは同じです。
If flag Then
If flag = True
Then