VBA 関数

関数

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. 戻り値の型

戻り値の型は様々に指定できます。

  • IntegerLong(整数)
  • Double(小数)
  • String(文字列)
  • Boolean(真偽値)
  • Variant(何でも入る型)

8. サブルーチン(Sub)との違い

SubプロシージャFunctionプロシージャ
戻り値を返さない戻り値を返す
処理を実行するだけ計算結果や値を返す目的で使う
Callまたは単に名前で呼ぶ代入や他の式の中で呼ぶ

9. 組み込み関数とユーザー定義関数

  • VBAには標準で多くの組み込み関数があります。例:MsgBoxLenNowInputBoxMidなど。
  • 自分で関数を定義してユーザー定義関数を作成できます。

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は戻り値なし。処理のみ実行
メリットコード再利用、見通しの良さ、メンテナンス性向上
タイトルとURLをコピーしました