VBA Function(関数プロシージャ)

プロシージャ

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の違い

項目FunctionSub
戻り値あり(関数名 = 戻り値)なし
使用方法式内やワークシート関数として主にイベントや実行処理
セルでの利用○(条件を満たせば)×
呼び出し方値として使用処理として呼び出し

◆ 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を呼び出すこともでき、モジュール設計の中核となる存在です。

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