【VBA】Functionプロシージャの戻り値と引数|初心者向け解説とサンプルコード

Functionプロシージャを正しく使うために欠かせないのが 戻り値(返り値) と 引数(パラメータ) の理解です。
Sub にはない「値を返す」という機能があるため、コードをスッキリさせたり再利用しやすくしたりすることができます。


1. 戻り値とは?Function 特有の「返す値」

Functionプロシージャでは、処理の結果として 1つの値を返す ことができます。

● 戻り値の設定方法

戻り値は、Function名に値を代入することで設定します。

Function AddValue(a As Long, b As Long) As Long
    AddValue = a + b   '← これが戻り値
End Function

上記例では、

  • AddValue が関数名
  • AddValue = a + b によって戻り値がセット
  • 呼び出し元はその結果を受け取る

という仕組みです。

● 戻り値の型に注意

関数宣言の最後の As Long が「返す値の型」。
型を省略すると Variant になり、予期せぬ型変換が起きることがあるため 基本は必ず型を明示します。


2. 引数とは?Function に渡す“材料”

引数(パラメータ)とは、関数が処理するために「外から渡す値」のことです。

Function GetArea(width As Double, height As Double) As Double
    GetArea = width * height
End Function

● 引数のポイント

  • 複数指定できる
  • それぞれに「型」を指定する
  • 必要に応じて Optional(省略可能) にできる

▼ Optional の例:省略可能、省略時はFunctionの方で事前に指定した値になる

Function AddTax(price As Long, Optional rate As Double = 0.1) As Double
    AddTax = price * (1 + rate)
End Function

呼び出し元から引数を渡す時、rate を省略すれば値が 0.1 になります。

Sub Test()
    MsgBox AddTax(2000)      'rateの引数なし
    MsgBox AddTax(2000, 0.08) 'rateの引数あり
End Sub

3. ByVal / ByRef の違い(重要)

引数には 渡し方の種類 があり、これによって処理結果が変わる場合があります。

● ByVal(値渡し)… 基本はこれ

  • 「値だけ」を渡す
  • 関数内部で変更しても呼び出し元には影響しない
Function Sample(ByVal x As Long)
    x = x + 10  '呼び出し元のxは変わらない
End Function

● ByRef(参照渡し)… 意図した時だけ使う

  • 変数そのものを渡す
  • 関数内で変更すると、呼び出し元も書き換わる
Function Sample(ByRef x As Long)
    x = x + 10   '呼び出し元のxも10増える
End Function

★ 初心者は「特に理由がないなら ByVal」を推奨

誤ってデータを書き換えるトラブルを防げます。


4. 引数なしの Function も作れる

必要な材料がなければ、引数無しで定義できます。

Function GetToday() As Date
    GetToday = Date
End Function

ただし、可読性や再利用性を考えると 引数無しのFunctionは慎重に使用する方がベターです。


5. 戻り値・引数の実用例

処理をまとめて再利用しやすいコードを書くことができます。

▼ 例:税別価格 → 税込価格を返す関数

Function CalcTax(price As Long, Optional rate As Double = 0.1) As Long
    CalcTax = price * (1 + rate)
End Function

呼び出し元

Sub Test()
    MsgBox CalcTax(2000)      '税込2200
    MsgBox CalcTax(2000, 0.08) '税込2160
End Sub

Function を使うと、処理がすっきりし保守性が向上します。


6. まとめ:Function の力を最大限活かすには「引数と戻り値」

  • Function は 戻り値を返せる プロシージャ
  • 戻り値は「関数名」に代入
  • 引数は材料、型を明示する
  • ByVal が基本、ByRef は慎重に
  • Optional を使えば柔軟な関数が作れる
  • Function により、コードの再利用性・保守性が大幅に向上

コメント

タイトルとURLをコピーしました