はじめに
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 として独立させておくことで、メインのコードがシンプルになり、プログラム全体の見通しが格段に良くなります。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
