【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
次回は、プロシージャの引数4です。