Excel VBAでは「Function」を使うことで、自分だけの関数(自作関数)を作成することができます。
これにより、同じ処理を何度も書く必要がなくなり、業務の自動化や効率化が一気に進みます。
この記事では、VBAにおけるFunctionの基本的な使い方から、引数の活用、戻り値の扱い方、実用的な使用例まで、初心者にもわかりやすく解説していきます。
これからVBAを活用して作業の自動化を図りたい方、自作関数を活用してスマートなスクリプトを組みたい方は、ぜひ参考にしてください。
Functionとは?Subとの違いを押さえよう
VBAでよく使われるプロシージャには「Sub」と「Function」があります。
一見似ていますが、大きな違いは「戻り値(計算結果など)を返すかどうか」です。
- Sub(サブプロシージャ):処理を実行するだけ。結果は返さない。
- Function(関数プロシージャ):処理を実行し、その結果(値)を返すことができる。
つまり、Functionを使えば、「合計を計算する」「文字列を整形する」「日付を判定する」などの処理結果を、呼び出し元に戻すことができるのです。
基本的なFunctionの構文
Functionの基本構文は以下の通りです。
Function 関数名(引数 As データ型, ...) As 戻り値のデータ型
' 処理内容
関数名 = 戻り値
End Function
例:2つの数値を加算する関数
Function AddNumbers(a As Double, b As Double) As Double
AddNumbers = a + b
End Function
このように作成した関数は、Subやセルの中で次のように呼び出せます。
Sub SampleCall()
Dim result As Double
result = AddNumbers(5, 3)
MsgBox "合計は " & result
End Sub
実務で使えるFunctionの使用例
文字列を整形する関数
例えば、名前を「姓・名」の形式で結合する関数を作ってみましょう。
Function FullName(lastName As String, firstName As String) As String
FullName = lastName & " " & firstName
End Function
使い方:
Sub TestFullName()
MsgBox FullName("山田", "太郎")
End Sub
結果:「山田 太郎」
消費税を計算する関数
Function CalcTax(price As Double, taxRate As Double) As Double
CalcTax = price * (1 + taxRate)
End Function
Sub TestTax()
Dim total As Double
total = CalcTax(1000, 0.1)
MsgBox "税込価格は " & total & " 円です"
End Sub
Functionをセル関数として使う方法
VBAで作成したFunctionは、ワークシート関数(UDF=ユーザー定義関数)としても使えます。
たとえば、次の関数を標準モジュールに記述します。
Function Square(x As Double) As Double
Square = x * x
End Function
Excelのセルに次のように入力すると、関数を利用できます。
編集する=Square(5)
結果:25
これは通常のExcel関数と同じように扱えるため、ユーザー独自の業務ルールに沿った関数を作ると非常に便利です。
Optionalで引数を任意にする
Functionでは、引数を**省略可能(Optional)**にすることも可能です。
Function Greeting(Optional name As String = "お客様") As String
Greeting = "こんにちは、" & name & "!"
End Function
セルに =Greeting()
と入力すれば「こんにちは、お客様!」と表示され、=Greeting("田中さん")
とすれば「こんにちは、田中さん!」になります。
If文やSelect Caseとの組み合わせ
関数内で条件分岐を使うことで、より柔軟なロジックが組めます。
Function JudgeScore(score As Integer) As String
If score >= 80 Then
JudgeScore = "合格"
Else
JudgeScore = "不合格"
End If
End Function
または、Select Caseを使う方法:
Function Grade(score As Integer) As String
Select Case score
Case Is >= 90
Grade = "A"
Case Is >= 80
Grade = "B"
Case Is >= 70
Grade = "C"
Case Else
Grade = "D"
End Select
End Function
Functionを使うときの注意点
- 型を明示する:引数や戻り値の型をきちんと書くことで、エラーを防げます。
- 関数名と戻り値の関係:戻り値は「関数名 = 値」で指定します。
- 標準モジュールに書く:セルから呼び出すには、標準モジュールに記述する必要があります。
まとめ
VBAのFunctionは、自作の関数を作って繰り返し使える非常に便利な機能です。
Subよりも柔軟で、処理結果を戻せるため、コードの再利用性が大幅に向上します。
業務に特化したオリジナル関数を作ることで、VBAのスキルは一段と高まり、作業効率も劇的に向上します。
ぜひ、簡単なFunctionから始めて、業務の自動化・効率化に役立ててください!