【VBA入門】Functionの基本構文と書き方|戻り値・引数・実例付き

Functionプロシージャは、値を返しながら処理をまとめることができる便利な仕組みです。
この記事では、Function の書き方を「構文 → 実例 → 使用例」の流れでわかりやすく解説します。


1. Function の基本構文

まずは最もシンプルな構文

Function 関数名(引数1 As 型, 引数2 As 型, ...) As 戻り値の型
    '処理
    関数名 = 戻り値
End Function

● 基本構文のポイント

  • 引数はカンマ区切りで複数指定可能
  • 引数の渡し方は ByVal(値渡し)が推奨
  • 戻り値は「関数名に値を代入する」ことでセット
  • 戻り値の型は必ず明示すると保守性が高い

2. 最もシンプルな例:数値の加算関数

まずは小さく理解できる例

Function AddValue(ByVal a As Long, ByVal b As Long) As Long
    AddValue = a + b
End Function

● この関数の動き

  • a と b を受け取り
  • a + b の結果を返す

▼ 呼び出し側の使い方

Sub Test()
    MsgBox AddValue(3, 5)   '→ 8が表示される
End Sub

3. Optionalを活用した柔軟な関数

引数を省略可能にすると、関数の使い勝手が大幅に向上します。

Function CalcTax(ByVal price As Long, Optional ByVal rate As Double = 0.1) As Long
    CalcTax = price * (1 + rate)
End Function

▼ 呼び出し例

Sub Test()
    MsgBox CalcTax(2000)        '税込2200(10%)
    MsgBox CalcTax(2000, 0.08)  '税込2160(8%)
End Sub

Optional を使うことで「デフォルト動作」と「カスタム動作」の両方に対応できます。


4. 戻り値の型を工夫する例(文字列を返す)

Function は数値だけでなく、文字列や日付などあらゆる型を返せます。

▼ メッセージを作る関数

Function MakeMessage(ByVal name As String) As String
    MakeMessage = "こんにちは、" & name & "さん!"
End Function

▼ 使用例

Sub Test()
    MsgBox MakeMessage("田中")
End Sub

「処理とメッセージ組み立て」を分離できるため、コードの再利用性が大きく向上します。


5. Boolean を返して判定に使う例(実務で頻出)

条件判定を Function に切り出すと、読みやすさ・保守性が段違いに良くなります。

▼ 数値が正かどうか判定する

Function IsPositive(ByVal num As Long) As Boolean
    IsPositive = (num > 0)
End Function

▼ 使用例

Sub Test()
    If IsPositive(10) Then
        MsgBox "正の数です"
    Else
        MsgBox "0以下です"
    End If
End Sub

判定ロジックを Function にすると、複数の場所で使い回せます。


6. 日付や処理を書き換える実用例

▼ 今日が平日かどうか判定する関数

Function IsWeekday(ByVal dt As Date) As Boolean
    IsWeekday = (Weekday(dt, vbMonday) <= 5)
End Function

▼ 使用例

Sub Test()
    If IsWeekday(Date) Then
        MsgBox "今日は平日です"
    Else
        MsgBox "今日は休日です"
    End If
End Sub

こうした小さな判定関数を持っておくと、大きな処理でも読みやすくなります。


7. Function の使いどころのまとめ

  • 計算処理 → 結果を返したい時
  • 文字列の組み立て → 複数箇所で共通化できる
  • 条件判定 → Boolean を返すとロジックが整理される
  • 可変パラメータ → Optional 引数で柔軟に

Function を使うことで、コードの明確化・再利用性・バグ防止につながります。

コメント

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