1. VBAの関数とは?
関数(Function)は、一連の処理をまとめて名前をつけた「処理の塊」です。
関数は何かの値を計算して結果を返す(戻り値を持つ)ことが基本です。
2. 関数の役割と利点
- コードの再利用ができる
何度も使う処理を関数にまとめれば、同じコードを何回も書く必要がなくなります。 - 処理の見通しが良くなる
関数名で何をするかが分かるので、コードが読みやすくなります。 - メンテナンスがしやすい
処理内容を関数の中だけ変えれば良いので、修正が楽です。
3. VBAの関数の基本構文
Function 関数名(引数1 As データ型, 引数2 As データ型, ...) As 戻り値の型
' 処理内容
関数名 = 戻り値 ' ここで値を返す
End Function
4. 具体例
4-1. 数値を2倍にして返す関数
Function DoubleValue(num As Integer) As Integer
DoubleValue = num * 2
End Function
使い方:
Dim result As Integer
result = DoubleValue(10) ' resultには20が入る
5. 引数の種類
- 必須引数
通常の引数。必ず渡す必要があります。 - 省略可能な引数(Optional)
渡さなくても良い引数を定義でき、指定がなければデフォルト値を使います。
Function Greet(Optional name As String = "ゲスト") As String
Greet = "こんにちは、" & name & "さん!"
End Function
使い方:
MsgBox Greet("太郎") ' こんにちは、太郎さん!
MsgBox Greet() ' こんにちは、ゲストさん!
6. 複数の戻り値を返したい場合
VBAの関数は戻り値を1つだけ返せます。
複数値を返したいときは、引数をByRef(参照渡し)にして値を変更する方法や、配列やユーザー定義型を使う方法があります。
7. 戻り値の型
戻り値の型は様々に指定できます。
Integer
、Long
(整数)Double
(小数)String
(文字列)Boolean
(真偽値)Variant
(何でも入る型)
8. サブルーチン(Sub)との違い
Subプロシージャ | Functionプロシージャ |
---|---|
戻り値を返さない | 戻り値を返す |
処理を実行するだけ | 計算結果や値を返す目的で使う |
Call または単に名前で呼ぶ | 代入や他の式の中で呼ぶ |
9. 組み込み関数とユーザー定義関数
- VBAには標準で多くの組み込み関数があります。例:
MsgBox
、Len
、Now
、InputBox
、Mid
など。 - 自分で関数を定義してユーザー定義関数を作成できます。
10. 実用例
10-1. 文字列の長さを返す関数
Function GetLength(text As String) As Integer
GetLength = Len(text)
End Function
10-2. 配列の合計を返す関数
Function SumArray(arr() As Double) As Double
Dim i As Integer, total As Double
total = 0
For i = LBound(arr) To UBound(arr)
total = total + arr(i)
Next i
SumArray = total
End Function
11. 関数の呼び出し方
関数は次のように使います。
Dim val As Integer
val = 関数名(引数)
呼び出した結果を別の関数や式の中で使うこともできます。
12. Tips: 再帰関数も作れる
関数の中で自分自身を呼ぶことも可能。
【階乗を計算する再帰関数の例】
Function Factorial(n As Integer) As Long
If n <= 1 Then
Factorial = 1
Else
Factorial = n * Factorial(n - 1)
End If
End Function
まとめ
項目 | 内容 |
---|---|
関数(Function) | 処理をまとめて値を返すプロシージャ |
引数 | 関数に渡す値。Optionalで省略可能にできる |
戻り値 | 関数が返す結果。1つだけ |
呼び出し | 結果 = 関数名(引数) で呼ぶ |
Subとの違い | Subは戻り値なし。処理のみ実行 |
メリット | コード再利用、見通しの良さ、メンテナンス性向上 |