VBA(Visual Basic for Applications)の Function(関数プロシージャ) は、処理結果として戻り値(値)を返すプロシージャです。Excelのワークシート関数と同様に、何らかの入力(引数)に対して処理を行い、その結果を返す目的で使われます。Sub
プロシージャとの主な違いは、「値を返すか否か」です。
◆ 1. Functionプロシージャとは?
Function(関数プロシージャ)は、何かを計算したり、判断したりした結果を値として返すためのコードのまとまりです。Subプロシージャとは異なり、関数名自体に値を代入することで、その値が戻り値(返り値)として呼び出し元に返されます。
◆ 2. Functionの基本構文
Function 関数名(引数 As 型, ...) As 戻り値の型
' 処理
関数名 = 戻り値
End Function
例:2つの数値の合計を返す関数
Function 足し算(a As Double, b As Double) As Double
足し算 = a + b
End Function
呼び出し例(Subから)
Sub テスト()
Dim 結果 As Double
結果 = 足し算(3, 5)
MsgBox 結果 ' 出力:8
End Sub
◆ 3. ワークシート関数として使う
Functionプロシージャは、Public
で定義され、引数が適切であれば、ワークシートのセル関数として使うことも可能です。
Public Function 平均値(a As Double, b As Double) As Double
平均値 = (a + b) / 2
End Function
Excelのセルに以下のように入力することで実行できます:
excelコピーする編集する=平均値(10, 20)
◆ 4. FunctionとSubの違い
項目 | Function | Sub |
---|---|---|
戻り値 | あり(関数名 = 戻り値) | なし |
使用方法 | 式内やワークシート関数として | 主にイベントや実行処理 |
セルでの利用 | ○(条件を満たせば) | × |
呼び出し方 | 値として使用 | 処理として呼び出し |
◆ 5. 戻り値の型と指定
戻り値の型は As 型
で指定し、省略すると Variant
型になります。戻り値の型が明確な場合は、型を明示するのがベストです。
使用可能な主なデータ型:
Integer
:整数Double
:小数含む数値String
:文字列Boolean
:真偽値(True/False)Variant
:任意型(省略時のデフォルト)Date
:日付・時刻Object
:オブジェクト
◆ 6. 引数とByVal / ByRef
Functionでも Sub
と同様に引数を渡せます。
ByVal
(値渡し):引数のコピー。呼び出し元の変数は影響を受けない。ByRef
(参照渡し):引数の実体を渡す。呼び出し元の変数に影響あり。
Function 二乗(ByVal x As Double) As Double
二乗 = x ^ 2
End Function
Function 変更(ByRef x As Integer) As Integer
x = x + 10
変更 = x
End Function
◆ 7. 戻り値を複数返す方法
Functionでは戻り値は基本的に1つですが、以下の方法で複数値を返せます:
方法1:配列を返す
Function 数値情報(x As Double) As Variant
Dim 結果(1 To 2) As Double
結果(1) = x ^ 2
結果(2) = x ^ 3
数値情報 = 結果
End Function
受け取り例:
Sub テスト()
Dim 結果 As Variant
結果 = 数値情報(2)
MsgBox "二乗:" & 結果(1) & ", 三乗:" & 結果(2)
End Sub
方法2:ByRefで引数に書き込む
Function 分析(x As Double, ByRef 二乗 As Double, ByRef 三乗 As Double)
二乗 = x ^ 2
三乗 = x ^ 3
End Function
◆ 8. Functionのエラー処理
エラーが発生し得る場合、On Error
構文で処理できます。
Function 除算(x As Double, y As Double) As Variant
On Error GoTo エラー
除算 = x / y
Exit Function
エラー:
除算 = "エラー:" & Err.Description
End Function
◆ 9. Functionを他のプロシージャと組み合わせる
関数を小さな単位で作っておくと、複数の処理で再利用できます。
Function 消費税込み(価格 As Double) As Double
消費税込み = 価格 * 1.1
End Function
Sub 商品表示()
Dim 商品名 As String
Dim 価格 As Double
商品名 = "りんご"
価格 = 100
MsgBox 商品名 & "の税込価格は " & 消費税込み(価格) & "円です"
End Sub
◆ 10. Functionの活用シーン
シーン | 具体例 |
---|---|
ワークシート関数として | 独自の計算関数 |
データ加工・整形 | 数字フォーマット、文字列変換 |
判定処理(Boolean) | True/Falseを返す |
再利用可能な数式ロジック | 売上計算、割引計算など |
Subと組み合わせた処理分割 | 一部処理を関数に切り出して整理 |
◆ 11. よくある注意点
- Function内で シートを直接操作するのは非推奨(ワークシート関数として使えなくなる)
- 戻り値の型が合わないと 型エラー になる可能性がある
- ワークシート関数として使うには
Public
にする必要あり
◆ まとめ
項目 | 内容 |
---|---|
定義方法 | Function 名前(引数) As 戻り値の型 |
戻り値 | 必ず1つ(配列やByRefで複数対応可) |
引数の受け渡し | ByVal (値渡し)、ByRef (参照渡し) |
利用方法 | プログラム内から呼び出し、またはセル関数として使用可能 |
活用メリット | 処理の再利用性、コードの簡潔化、セル関数の拡張など |
Functionプロシージャを活用することで、VBAコードの構造化・簡潔化が進み、保守性も高まります。特に業務処理でよくある計算や判定をFunctionにしておくと、複数箇所で一貫性を保ちつつ使い回すことができます。
さらに高度な使い方として、Functionの中で他のFunctionやSubを呼び出すこともでき、モジュール設計の中核となる存在です。