はじめに
VBAのプロシージャには、これまで見てきた Sub
の他に、もう一つ「Function
」があります。Sub
と Function
の最大の違いは、Function
は処理の結果として「戻り値(返り値)」を返すことができる点です。
Function
を自作することで、Excelの SUM
関数や VLOOKUP
関数のようによく使う計算や処理を、再利用可能な「オリジナル関数」として部品化できます。
この記事では、引数を受け取り、処理結果を戻り値として返す、基本的な Function
の作り方と使い方を解説します。
引数を持つFunction
のサンプルコード
この例では、税抜きの価格と税率を引数として受け取り、税込価格を計算して返す CalculatePriceWithTax
というオリジナル関数を作成します。
完成コード
' === 税込価格を計算するFunction ===
' 2つの引数を受け取り、Currency(通貨型)の値を返す
Function CalculatePriceWithTax(basePrice As Double, taxRate As Double) As Currency
' Function名と同じ名前の変数に値を代入すると、それが戻り値になる
CalculatePriceWithTax = basePrice * (1 + taxRate)
End Function
' === 作成したFunctionを呼び出すSubプロシージャ ===
Sub Test_CalculateFunction()
Dim priceA As Currency
Dim priceB As Currency
' --- マクロ内からFunctionを呼び出し、戻り値を変数に格納 ---
priceA = CalculatePriceWithTax(1000, 0.1) ' 1000円, 税率10%
priceB = CalculatePriceWithTax(basePrice:=5000, taxRate:=0.08) ' 5000円, 税率8%
' --- 結果をシートに出力 ---
With Worksheets("Sheet1")
.Range("B2").Value = "税込価格A:"
.Range("C2").Value = priceA
.Range("B3").Value = "税込価格B:"
.Range("C3").Value = priceB
End With
End Sub
コードの解説
Function CalculatePriceWithTax(...) As Currency
これが Function
の定義です。
Function ... End Function
: プロシージャの種類がFunction
であることを示します。(basePrice As Double, taxRate As Double)
:Sub
と同様に、処理に必要な値を引数として受け取ります。As Currency
:Function
の最後にデータ型を指定すると、そのFunction
が返す戻り値のデータ型を定義できます。ここでは、お金を扱うのに適したCurrency
(通貨型)を指定しています。
CalculatePriceWithTax = basePrice * (1 + taxRate)
Function
の中で、Function
自身と同じ名前の変数に値を代入すると、その値が Function
の戻り値になります。これが Function
の最も重要なルールです。 計算結果(1000 * (1 + 0.1)
= 1100
)が、CalculatePriceWithTax
という名前の特別な変数に格納され、呼び出し元に返されます。
priceA = CalculatePriceWithTax(1000, 0.1)
Sub
プロシージャの中から Function
を呼び出している部分です。
CalculatePriceWithTax(1000, 0.1)
を実行すると、Function
が計算結果の1100
を返します。- その戻り値が、
=
を通じて変数priceA
に格納されます。
Sub
と Function
の使い分け
Sub
と Function
のどちらを使うべきか迷ったときは、以下のように考えると分かりやすいです。
Sub
: 何らかの「操作」をさせたいとき。(例: シートを追加する、セルの書式を設定する、ファイルを保存する)Function
: 何らかの「値を取得」したいとき。(例: 税込価格を計算する、特定の条件に合うセルのアドレスを探す、文字列を加工する)
まとめ
今回は、VBAで処理を部品化し、再利用性を高めるための Function
の作り方を解説しました。
Function
は、処理結果として戻り値を返すことができるプロシージャ。Function ... As データ型
で、戻り値の型を定義する。Function名 = 値
の形で、戻り値を設定する。
複雑な計算や、繰り返し登場する判定処理などを Function
として独立させておくことで、メインのコードがシンプルになり、プログラム全体の見通しが格段に良くなります。