Developer

【ExcelVBA】プロシージャの引数3(省略と初期値)
2021.06.20
Lv1

【ExcelVBA】プロシージャの引数3(省略と初期値)

プロシージャの引数3(省略と初期値)

引数は省略したり、その省略したときに初期値を設定することができます。
また、引数は1つだけでなく、2つ以上とすることもできます。

まず最初は、引数が2つ場合のサンプルプログラムを見てみましょう。

'' プロシージャの引数3(省略と初期値)
Sub VBA基礎第23回_1()
    Dim price As Integer
    Dim priceWithTax As Integer
    
    price = 250
    
    priceWithTax = 税込価格(price, 1.1)
    Debug.Print priceWithTax
    
End Sub

Function 税込価格(price As Integer, rate As Double) As Integer

    税込価格 = CInt(price * rate)
    
End Function

「税込価格」というFunctionプロシージャを作りました。
1つ目の引数(このことを第1引数といいます)はその商品の値段である「price」、2つ目の引数(第2引数)はかかる消費税率である「rate」を指定します。
消費税率は2021年06月現在では、一部の商品は軽減税率が適用され8%ですが、基本的には10%です。
このFunctionプロシージャを変更して、「rate」を指定していない時は10%となるようにしてみましょう。

その引数を省略できるようにするには、引数の前に「Optional」キーワードを付けます。

'' 省略可能な引数
Function 税込価格(price As Integer, Optional rate As Double) As Integer

    税込価格 = CInt(price * rate)
    
End Function

初期値を設定しておく

次に、引数が省略されたときの対応方法を考えておく必要があります。
方法は次の2通りです。
・初期値を設定しておく
・省略された場合の処理を作っておく

今回は1つ目の「初期値を設定しておく」方法について紹介します。

'' 引数を省略してプロシージャを呼び出す
Sub VBA基礎第23回_2()
    Dim price As Integer
    Dim priceWithTax As Integer
    
    price = 250
    
    priceWithTax = 税込価格(price) '' 変更ポイント
    Debug.Print priceWithTax
    
End Sub

'' 省略可能な引数
Function 税込価格(price As Integer, Optional rate As Double = 1.1) As Integer '' 変更ポイント

    税込価格 = CInt(price * rate)
    
End Function

変更されたのは、2か所です。
8行目は、第2引数が省略可能となったため、Functionプロシージャを呼び出すところで「1.1」の指定がなくなりました。
14行目は、第2引数の宣言の後ろに「= 1.1」が追加されています。

このように「Optional」および「引数の宣言の後ろに代入式」を記述しておくことで引数を省略可能として、省略された場合の初期値を設定することができます。

引数を省略せずに呼び出すこともできます。
呼び出し方は本記事の冒頭のプログラムとほとんど同じです。軽減税率の商品を購入したと想定して、「1.08」を第1引数に指定してみます。

'' 引数を省略せずにプロシージャを呼び出す
Sub VBA基礎第23回_3()
    Dim price As Integer
    Dim priceWithTax As Integer
    
    price = 250
    
    priceWithTax = 税込価格(price, 1.08) '' 変更ポイント
    Debug.Print priceWithTax
    
End Sub

次回は、引数が省略されたときの2つ目のシナリオ、「省略された場合の処理を作っておく」方法について紹介したいと思います。

まとめ

引数を省略可能にするには、その引数の前に「Optional」を指定する。
引数が省略されたときの対応方法には次の2通りが考えられる。
・初期値を設定しておく
・省略された場合の処理を作っておく

確認問題

九九を計算する以下のSubプロシージャを以下のように変更してください。
・「x」「y」を省略可能とする
・どちらも初期値を「9」に設定する

Sub 九九(x As Integer, y As Integer)
    
    For i = 1 To x
        For j = 1 To y
            Debug.Print i * j
        Next
        
        Debug.Print "----"
    Next

End Sub
答え
[vb] Sub 九九(Optional x As Integer = 9, Optional y As Integer = 9)

For i = 1 To x
For j = 1 To y
Debug.Print i * j
Next

Debug.Print "—-"
Next

End Sub
[/vb]

次回は、プロシージャの引数4です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次