Microsoft® Visual Basic® Scripting Edition
Function ステートメント
 ランゲージ リファレンス  

関連項目


Function プロシージャの名前、引数を宣言し、Function プロシージャの始まりを示します。

構文
[Public | Private] Function name [(arglist)]
    [statements]
    [name = expression]
    [Exit Function]
    [statements]
    [name = expression]
End Function

Function ステートメントの構文は、次の指定項目から構成されます。

指定項目 内容
Public すべてのスクリプトのすべてのプロシージャから参照できる Function プロシージャを宣言するときに指定します。
Private Function プロシージャを記述したスクリプト内のプロシージャ内からのみ参照できるプロシージャを宣言するときに指定します。
name 定義する Function プロシージャの名前を指定します。変数の標準的な名前付け規則に従って名前を付けます。
arglist Function プロシージャを呼び出すときに、Function プロシージャに渡す引数を表す変数のリストを指定します。複数の変数を指定する場合はカンマ (,) で区切ります。
statements Function プロシージャ内で実行される一連のステートメントを指定します。
expression 関数の戻り値を指定します。

引数 arglist の構文と指定項目は次のとおりです。

[ByVal | ByRef] varname[( )]

指定項目 内容
ByVal その引数が、値渡しで渡されることを示します。
ByRef その引数が、参照渡しで渡されることを示します。
varname 引数を表す変数名を指定します。変数の標準的な名前付け規則に従って名前を付けます。

解説

キーワード Public または キーワード Private を指定しない場合、Function プロシージャは既定のパブリック プロシージャとなり、スクリプト内の他のすべてのプロシージャから参照できます。Function プロシージャ内のローカル変数の値は、プロシージャの実行が終了すると破棄されます。

実行可能なコードは、すべてプロシージャ内に記述する必要があります。 また、Function プロシージャを他の Function プロシージャ、または Sub プロシージャの中で定義することはできません。

Exit Function ステートメントは、Function プロシージャを直ちに終了します。プログラムの実行は、その Function プロシージャを呼び出したステートメントの次のステートメントから継続されます。Exit Function ステートメントは、Function プロシージャ内の任意の位置で何回でも指定できます。

Function プロシージャと Sub プロシージャには、似た点と異なる点があります。引数を受け取って一連のステートメントを実行し、引数の値を変える点は似ています。しかし、Function プロシージャは Sub プロシージャと異なり、Sqr 関数、Cos 関数、Chr 関数などの組み込み関数のように式の右辺に記述することで、戻り値を使用することができます。

Function プロシージャを式の中から呼び出すには、引数リストをかっこで囲んで指定します。Function プロシージャの呼び出し方法については、Call ステートメントを参照してください。


注意   Function プロシージャは、再帰的にプロシージャ自体を呼び出すことができます。ただし、再帰呼び出しを行うと、スタックがオーバーフローする可能性があります。

Function プロシージャから値を返すには、値を Function プロシージャ名 name に代入してください。引数 name への代入は、Function プロシージャ内の任意の場所で必要に応じて何回でも行うことができます。引数 name に値を代入しない場合は、既定の戻り値が返されます。既定の戻り値は、Function プロシージャが数値型の場合は 0、文字列型の場合は長さ 0 の文字列 ("") です。Set ステートメントを使っている Function プロシージャ内で、引数 name にオブジェクトへの参照を代入しない場合、オブジェクトへの参照を返す Function プロシージャには、Nothing が返されます。

次の例では、Function プロシージャ名 BinarySearch に戻り値を代入しています。この例では、値が見つからなかったことを示すため、Function プロシージャ名に False を代入しています。


Function BinarySearch(. . .)
    . . .
    ' 値が見つかりません。値として False を返します。
    If lower > upper Then
        BinarySearch = False  
        Exit Function 
    End If
    . . .
End Function
Function プロシージャで使う変数には、Function プロシージャ内で明示的に宣言される変数と、それ以外の変数の 2 種類があります。プロシージャ内で Dim などのステートメントを使用して明示的に宣言された変数は、そのプロシージャの中だけで有効です (ローカル変数)。プロシージャ内で明示的に宣言せずに使われている変数も、そのプロシージャの外部のさらに上のレベルで明示的に宣言されていない限りは、ローカル変数となります。


注意   プロシージャ内で明示的に宣言していない変数をプロシージャ内で使うことはできますが、その変数と同じ名前の変数などがスクリプト レベルで定義されている場合、名前の競合が発生します。 あるプロシージャが、他のプロシージャ、定数または変数と同じ名前を持つ未宣言の変数を参照した場合、そのプロシージャはスクリプト レベルの名前を参照しているものとみなされます。このような名前の競合を避けるために、変数は明示的に宣言してください。Option Explicit ステートメントを使うと、変数の明示的な宣言が強制されます。


注意   Microsoft Visual Basic Scripting Edition (VBScript) では、演算効率を高めるために数式が自動的に並べ替えられることがあります。このため、変数の値を変えてしまうような Function プロシージャを数式の中で実行しないようにしてください。


© 1997 Microsoft Corporation.