Excelには多くの便利な組み込み関数がありますが、VBAを使えば、特定の計算や処理を行う自分だけのオリジナル関数(ユーザー定義関数 / UDF)を作成できます。
作成した関数は、SUM
やVLOOKUP
と同じように、ワークシートのセルから直接=関数名()
の形で呼び出すことが可能になります。
この記事では、簡単な例として「摂氏(Celsius)の温度を華氏(Fahrenheit)に変換する」ユーザー定義関数の作り方と、その使い方を解説します。
ユーザー定義関数(Function)の完成コード
以下のコードを、Excel VBAの標準モジュールに記述します。
' 摂氏の温度を華氏に変換するユーザー定義関数
Function ConvertCelsiusToFahrenheit(celsiusValue As Double) As Double
' 摂氏から華氏への変換式: (摂氏 × 9 / 5) + 32
ConvertCelsiusToFahrenheit = (celsiusValue * 9 / 5) + 32
End Function
' --- 作成した関数をVBA内で呼び出すサンプル ---
Sub TestConversionFunction()
Dim celsiusInput As Double
Dim fahrenheitResult As Double
celsiusInput = 25 ' 例として摂氏25度
' 作成した ConvertCelsiusToFahrenheit 関数を呼び出す
fahrenheitResult = ConvertCelsiusToFahrenheit(celsiusInput)
MsgBox "摂氏 " & celsiusInput & "度 は、華氏 " & fahrenheitResult & "度です。"
End Sub
コードのポイント解説
Function
プロシージャの構造
Function 関数名(引数1 As 型, ...) As 戻り値の型
' ...計算処理...
関数名 = 計算結果
End Function
ユーザー定義関数は、Sub
の代わりにFunction
で始まり、End Function
で終わります。
(celsiusValue As Double)
: この関数が受け取る「引数」です。ここでは、摂氏の温度を数値(Double
型)で受け取ります。As Double
: この関数が返す値(戻り値)のデータ型を指定します。ConvertCelsiusToFahrenheit = ...
:Function
プロシージャ内で、関数名自身に値を代入することで、その値が関数の戻り値となります。これがSub
プロシージャとの最大の違いです。
作成した関数の使い方
ユーザー定義関数には、大きく分けて2つの使い方があります。
1. ワークシートのセルで直接使う
標準モジュールに関数を作成すると、そのブックのワークシート上で、組み込み関数と同じように利用できるようになります。
例えば、A1セルに摂氏の温度が入力されている場合、B1セルに以下の数式を入力すると、華氏の温度に変換された結果が表示されます。
=ConvertCelsiusToFahrenheit(A1)
2. 他のVBAマクロ(Sub)から呼び出して使う
TestConversionFunction
のサンプルのように、他のSub
プロシージャから通常の関数として呼び出すこともできます。これにより、複雑なマクロの中で、特定の計算処理を部品として再利用することができ、コードが整理されて見やすくなります。
まとめ
- VBAで自分だけのオリジナル関数を作るには、
Function
プロシージャを使用する。 Function
プロシージャは値を返すことができ、その戻り値は関数名自身に値を代入することで設定する。- 作成したユーザー定義関数は、ワークシートの数式として、また他のVBAマクロからの両方で利用できる。
何度も行う定型的な計算などがあれば、それをユーザー定義関数として作成しておくことで、Excelの利便性をさらに高めることができます。