0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBA ChatGPT に Optional の使い方を教えてもらった

Posted at

背景

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

実行結果
image.png

補足:Boolean型の注意点

Optional にするときは、必ず初期値を明示的に指定するのがおすすめです。

例:Optional show As Boolean = False

If flag Then は、= True が省略されています。
どちらの書き方でも動きは同じです。

If flag Then
If flag = True 
Then
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?