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 により、コードの再利用性・保守性が大幅に向上
コメント