機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > VBAのステートメント

Functionステートメント



Functionステートメント

構文
[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
キーワードPublicは省略可能です。すべてのモジュールから参照できるFunctionプロシージャを宣言します。
キーワードPrivateは省略可能です。Functionプロシージャを記述したモジュールからのみ参照できるFunctionプロシージャを宣言します。
キーワードFriendは省略可能です。クラスモジュール内で使用します。
nameには、Functionプロシージャの名前を指定します。
引数arglistは省略可能です。Functionプロシージャが受け取る引数リストを指定します。
typeは省略可能です。Typeには、Functionプロシージャの返り値の型を指定します。

解説
Functionプロシージャを作成します。
引数arglistは、次のように指定します。

[Optional][ByVal|ByRef][ParamArray]varname[()][As type][=defaultvalue]

Optionalは省略可能です。Optionalを付けた宣言した引数は、Functionプロシージャを呼び出す際に省略できます。ただし、Optionalを付けた引数以降の引数にもすべてOptionalを付けなければなりません。また、ParmArrayを使った場合には、どの引数にもOptionalを付けることはできません。
Optionalを付けた引数が渡されたかどうかを調べるには、IsMissing関数を使います。
ByValは省略可能です。その引数が値渡しで渡されることを示します。
ByRefは省略可能です。その引数が参照渡しで渡されることを示します。ByValとByRefの両方を省略した場合は、ByRefが指定されたものとして扱います。
ParmArrayは省略可能です。arglistの最後の引数でのみ試用できます。ParmArrayを付けると、その引数は省略可能な配列として扱われます。Optional、ByVal、ByRefのキーワードといっしょに使うことはできません。
varnameには引数の名前を指定します。引数を配列として扱う場合は、引数名の後ろに()を付けます。
typeは省略可能です。引数のデータ型を指定します。
defaultvalueは省略可能です。引数を名前付き引数として扱う場合に指定します。

Functionプロシージャから値を返すには、値をFunctionプロシージャに代入します。

サンプル
次の例は、Functionプロシージャ呼び出しで結果を表示します。

Sub Sample()
    Dim a As Integer, b As Integer
    MsgBox test1(10, 5)     '50が返ります
    MsgBox test1(10)        '20が返ります
    a = 10
    b = 10
    MsgBox test2(a, b)      '40が返ります
    MsgBox a                '10が返ります
    MsgBox b                '20が返ります
    MsgBox test3(1, 2, 3)   '6が返ります
    MsgBox test3(1, 2)      '3が返ります
    MsgBox test4(10, 2)     '20が返ります
    MsgBox test4(10)        '50が返ります
End Sub

Function test1(arg1, Optional arg2)
    If IsMissing(arg2) Then     '第2引数arg2は省略可能
        test1 = arg1 * 2
    Else
        test1 = arg1 * arg2
    End If
End Function

Function test2(ByVal arg1, ByRef arg2)
    arg1 = arg1 * 2             '値渡し
    arg2 = arg2 * 2             '参照渡し
    test2 = arg1 + arg2
End Function

Function test3(ParamArray args())
    Dim buf As Integer, i As Integer    'argsは省略可能な配列
    For i = 0 To UBound(args)
        buf = buf + args(i)
    Next i
    test3 = buf
End Function

Function test4(arg1, Optional arg2 = 5)
    test4 = arg1 * arg2         'arg2が省略された場合の既定値は5
End Function



このエントリーをはてなブックマークに追加