Functionステートメント
こちらでは、エクセルVBAのIE(InternetExplorer)操作に利用されたFunctionステートメントの解説になります。
ステートメントとは、「命令文」と訳されるように、コンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
Functionステートメントとは
Functionステートメントは、Functionプロシージャの名前、引数を宣言し、Functionプロシージャの始まりを示します。Functionプロシージャの特徴として呼び出し元に値を戻す(戻り値)ことができます。関数のような動作をするため、ユーザー定義関数とも言われます。ですので、Functionプロシージャは自分で好きな関数を作ることができます。
Function プロシージャ名() As 戻り値の型
・・・
プロシージャ名 = 戻り値
End Function
Function プロシージャ名() As オブジェクト型
・・・
Set プロシージャ名 = オブジェクト
End Function
構文 | [Public | Private | Friend] [Static] Function name [(arglist)] [As type] ・・・ End Function | |
---|---|---|
キーワード | 省略 | 説明 |
Private | ● | Functionプロシージャを記述したモジュールからのみ参照できるFunctionプロシージャを宣言するときに指定します。 |
Public | ● | すべてのモジュールのすべてのプロシージャから参照できるFunctionプロシージャを宣言するときに指定します。 また、Public、Private、Friendを指定しない場合は、Publicで設定されます。 |
Friend | ● | クラスモジュール内でのみ使用できます。Friendを指定したFunctionプロシージャは、プロジェクト全体から参照できますが、オブジェクトのインスタンスのコントローラからは参照できません。 |
Static | ● | Functionプロシージャのローカル変数の値をプロシージャの呼び出し間で保存するときに指定します。 また、Staticを指定しない場合は、ローカル変数の値は、Functionプロシージャの実行が終了すると破棄されます。 |
name | × | 定義するFunctionプロシージャの名前を指定します。変数の標準的な命名規則に従って名前を付けます。 |
引数 | 省略 | 説明 |
arglist | ● | Functionプロシージャが受け取る引数リストを指定します。複数の変数を指定する時は、カンマ (,) で区切ります。 |
引数arglist
構文 | [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue] | |
---|---|---|
キーワード | 省略 | 説明 |
Optional | ● | Optionalを付けた宣言した引数は、Functionプロシージャを呼び出す際に省略することができますが、Optionalを付けた引数以降の引数にもすべてOptionalを付ける必要があります。 |
ByVal | ● | その引数が値渡しで渡されることを示します。 |
ByRef | ● | その引数が参照渡しで渡されることを示します。ByValまたはByRefを記述しなかった場合は、ByRefが指定されたものとして扱われます。 |
ParamArray | ● | 引数 arglist の最後に指定する引数としてのみ使用でき、その最後の引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な配列であることを示します。ParamArrayを利用すると任意の数の引数を渡すことができます。ParamArrayは、ByVal、ByRef、Optionalの各キーワードと共に使うことはできません。 |
varname | × | 引数の名前を設定します。変数の標準的な命名規則に従って名前を付けます。 |
type | ● | 引数のデータ型を設定します。パラメータにOptionalが指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。 |
defaultvalue | ● | 任意の定数または定数の式を指定します。Optionalを指定したパラメータに対してのみ有効です。データ型がオブジェクト型 (Object) の場合、明示的な既定値はNothingだけです。 |
戻り値にはオブジェクトを指定することもできます。オブジェクトを戻り値にする場合は、Setステートメントで戻り値を設定する必要がありますので、注意してください。
参照渡し
参照渡しとは、プロシージャに引数として変数を渡すときに、変数に格納されている値ではなく変数そのもの渡す方法です。値をコピーする必要がないため、無駄にメモリを消費することがありません。注意点としては、変数そのものを渡すため、呼び出し先のプロシージャ内で変数の値が変更してしまいます。こちらを理解した上で設定しましょう。
値渡し
値渡しとは、プロシージャに引数として変数を渡すときに、変数に格納されている値そのものを渡す方法です。値をコピーするため、その分メモリを消費します。値を渡していますので、呼び出し先のプローシージャ内で値が変更されることはありません。処理パフォーマンスの観点から見ると無駄にメモリを消費しない参照渡しを利用することが多いですが、値の変更を行いたくない場合は、値渡しを利用しましょう。
Functionステートメントを利用して戻り値を取得するサンプルコード
Sub sample()
Dim n As Integer, result As Integer
n = 5
result = addition(n)
Debug.Print "戻り値の数値は" & result
End Sub
Function addition(n As Integer) As Integer
addition = n + 10
End Function
実行結果
戻り値の数値は15
解説
呼び出し先sampleのSubステートメントには引数の設定していませんが、呼び出し元additionのFunctionステートメントには、nが整数型(Integer)で設定されています。次に、Dimステートメントを利用して変数n,resultに整数型(Integer)を宣言し、変数nには「5」を代入します。そして、変数resultにはCallステートメントを省略して、additionプロシージャを実行し戻り値を代入します。additionプロシージャにn=5を参照渡しすると、変数additionは5+10で「15」となるため、こちらが戻り値となります。戻り値を取得したら、DebugオブジェクトのPrintメソッドで「戻り値の数値は15」を表示させます。
最後はEndステートメントを利用してsampleプロシージャを終了させます。
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。