【VBA】引数を持つFunction(関数)の作り方と使い方|戻り値の返し方

目次

はじめに

VBAのプロシージャには、これまで見てきた Sub の他に、もう一つ「Function」があります。SubFunction の最大の違いは、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 に格納されます。

SubFunction の使い分け

SubFunction のどちらを使うべきか迷ったときは、以下のように考えると分かりやすいです。

  • Sub: 何らかの「操作」をさせたいとき。(例: シートを追加する、セルの書式を設定する、ファイルを保存する)
  • Function: 何らかの「値を取得」したいとき。(例: 税込価格を計算する、特定の条件に合うセルのアドレスを探す、文字列を加工する)

まとめ

今回は、VBAで処理を部品化し、再利用性を高めるための Function の作り方を解説しました。

  • Function は、処理結果として戻り値を返すことができるプロシージャ。
  • Function ... As データ型 で、戻り値の型を定義する。
  • Function名 = 値 の形で、戻り値を設定する。

複雑な計算や、繰り返し登場する判定処理などを Function として独立させておくことで、メインのコードがシンプルになり、プログラム全体の見通しが格段に良くなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次