Sub/Functionプロシージャ(手続き/関数)[ExcelのVBA]
Subプロシージャ/Functionプロシージャはエクセルの関数のようなものです。これらのプロシージャは「ユーザーフォーム」や「シート」固有のものであれば「ユーザーフォーム/シートのコード」に記述します。再利用可能な汎用的なプロシージャは「標準モジュール」に記述します。
Subプロシージャ
Subプロシージャは「手続き」とも呼ばれ戻り値を返しません。
Sub プロシージャ名([引数1,引数2,...])
処理を記述
End Sub
※[]は省略する事が出来ます。また、Subの前に「PrivateまたはPublic」を記述できます。省略した場合は「Private」となります。
※「Private/Public」の有効範囲(スコープ)は「変数/定数/リテラル/データ型/有効範囲」をご覧ください。
Subプロシージャの使用例1
引数なしのパターンです。
Subプロシージャの使用例2
引数が一つあるパターンです。
Subプロシージャの使用例3
引数が二つあるパターンです。
Functionプロシージャ
Functionプロシージャは「関数」とも呼ばれ戻り値を返します。
Functionプロシージャ名([引数1,引数2,...]) As データ型
処理を記述
End Function
※「As データ型」で戻り値のデータ型を定義します。
※[]は省略する事が出来ます。また、Functionの前に「PrivateまたはPublic」を記述できます。省略した場合は「Private」となります。
※「Private/Public」の有効範囲(スコープ)は「変数/定数/リテラル/データ型/有効範囲」をご覧ください。
Functionプロシージャの使用例
値渡し/参照渡し(ByVal/ByRef)
各プロシージャは引数(ひきすう)を定義できます。引数を定義する際には引数の種類を「値渡しのByVal」または「参照渡しのByRef」の二つを選択できます。省略した場合は「ByRef」となります。
値渡し(ByVal)の使用例
ByValは「変数Aの値のみを渡している」ので結果は10となります。
参照渡し(ByRef)の使用例
ByRefは参照で「変数Aを渡している」ので結果は5となります。
※ByRefの場合は元の変数の値がプロシージャ内で変化するので注意が必要です。普段は「ByVal」を使いましょう。
デフォルト引数
引数の値を予め設定する事を「デフォルト引数」と呼びます。デフォルト引数は引数名の前に「Optional」を付加します。
次はデフォルト引数の使用例です。
※デフォルト引数にもByVal/ByRefを記述できますが、どちらを記述しても「ByVal」の結果となります。
配列を引数に渡す
引数に配列を渡す場合は次の例のように「Variant型」を使用します。
Exit Sub/Exit Function
Sub/Functionプロシージャのブロック内で「Exit Sub/Exit Function」を記述するとその行でプロシージャの処理が終了します。
次は「Exit Sub」の使用例です。
※Functionプロシージャには「Exit Function」を使用します。
Sub/Functionプロシージャの呼び出し
Sub/Functionプロシージャの呼び出し方は引数によって2~3種類あります。
次は呼び出し方の一覧となります。(※赤文字はエラー)
※引数が2つ以上ある場合は「CCC(1,2)」のような形式で呼び出す事は出来ないようです。但し、この例はSubプロシージャです。Functionプロシージャの場合は「A = CCC(1,2)」のように戻り値を変数に設定するようにすれば呼び出す事が可能です。
メモ
※Propertyプロシージャは基本的に「クラスモジュール」で定義するプロシージャです。
Visual Basicの基礎
変数/定数/リテラル/データ型/有効範囲
配列/動的配列/構造体/列挙型/エスケープシーケンス
算術演算子/比較演算子/データの型変換
制御構造(If/For/Select/While/Do)
Sub/Functionプロシージャ(手続き/関数)
クラスの作成と使い方
ファイルの操作
エラートラップ
基本のまとめ(上級者用)