プロシージャを作成する( Sub, Function )
2015/04/30
プロシージャを作成する
プロシージャとは、実行時に 1 つの単位として処理されるコードの集まりのことです。VBAの場合、主に Subプロシージャ(戻り値がない)と Functionプロシージャ(戻り値がある)が使われます。
【構文:Sub プロシージャ】
Sub ステートメント、End Sub ステートメントで囲む
[ access_level ] [ Static ] Sub name [ ( arglist ) ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
【構文:Function プロシージャ】
Function ステートメント、End Function ステートメントで囲む
[ access_level ] [ Static ] Function name [ ( arglist ) ] [ As type ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
【項目の説明】
- access_level ・・・ プロシージャを利用できる範囲を指定します。Public・Private・Friend の3種類があります。省略するとPublic を指定した場合と同じになります。
- name ・・・ 定義する Sub(Function)プロシージャの名前で、変数の標準的な名前付け規則に従って指定します。
- arglist ・・・ Sub(Function)プロシージャを呼び出したときに引き渡す引数を(通常、以下の形で)指定します。
varname As varname_type
varname_type には、プロシージャに渡す引数(varname)のデータ型を指定します。
「As varname_type」は省略可能で、省略するとバリアント型( Variant )を指定した場合と同じことになります。また、複数の引数を指定する場合はカンマ(,)で区切ります。 - statements ・・・ Sub(Function) プロシージャ内で実行される一連のステートメントを指定します。(省略可)
- type ・・・ Function プロシージャからの戻り値のデータ型を指定します。省略するとバリアント型( Variant )を指定した場合と同じになります。
access_level(Public・Private・Friend) の詳細:
Public:すべてのモジュールのすべてのプロシージャから使用することができます。ただし、Option Private ステートメントが記述されているモジュールの中で使用した場合、プロジェクトの外からは使用できません。
Private:同一モジュール内からのみ使用可能です。
Friend:プロジェクト内からは呼び出せますが、オブジェクトのインスタンスのコントローラからは呼び出せません。キーワード Friend は、フォームモジュールおよびクラスモジュールでのみ記述可能です。
引数 arglist について以下を参照:
⇒ 省略可能な引数について(Optional キーワード)
⇒ 任意の数の引数を渡す(ParamArray キーワード)
⇒ 参照渡しと値渡し(ByVal・ByRef)
⇒ 配列の引数を渡す
Static
Sub プロシージャ内のローカル変数が、次に呼び出されるまでその値を保持します。ただし、Sub プロシージャの外部で宣言された変数は、Sub プロシージャの中で使われている場合でも、キーワード Static による影響を受けません。(省略可)
Function プロシージャの戻り値の設定:
Function プロシージャの名前 nameに、戻り値となる値( expression <type 型> )を代入します。
name = expression
set name = expression (戻り値のデータ型がオブジェクト型の場合)
上記を Function ステートメント ~ End Function ステートメント 内に記述します。
Exit Sub ステートメント:
Sub プロシージャを直ちに終了します。Exit Sub ステートメントは、Sub プロシージャ内の任意の場所で必要に応じていくつでも指定できます。
Exit Function ステートメント:
Function プロシージャを直ちに終了します。Exit Function ステートメントは、Function プロシージャ内の任意の場所で必要に応じていくつでも指定できます。
プロシージャーの使用例
サンプルVBAソース<その1>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
'------------------------------------------------------------------------------ ' Subプロシージャ(引数なし) ' ' ※Private が付いているのでこのモジュール内からしか実行できない '------------------------------------------------------------------------------ Private Sub Sample_01() Dim myNum As Double myNum = Sample_02(100, 40) MsgBox myNum End Sub '------------------------------------------------------------------------------ 'Function プロシージャ '------------------------------------------------------------------------------ Function Sample_02(num1 As Long, num2 As Long) As Double If num2 = 0 Then 'Function プロシージャーを終了する Exit Function End If '戻り値を設定 Sample_02 = num1 / num2 End Function |
実行結果<その1>
サンプルVBAソース<その2>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'------------------------------------------------------------------------------ ' プロシージャを Static で宣言する '------------------------------------------------------------------------------ 'このプロシージャー内の変数の値が保持されます Static Sub Sample_03() Dim cnt As Long cnt = cnt + 1 Debug.Print cnt & "回目" End Sub |
実行結果<その2>
関連記事
-
繰り返し処理(For Each…Next ステートメント)
For Each…Next ステートメントの使い方 【構文】 For …
-
引数を可変にする( ParamArray )
ParamArray キーワード ParamArray キーワードを使用すると任 …
-
繰り返し処理(Do…Loop ステートメント)
Do…Loop ステートメントの使い方 【構文 1】 Do [ Wh …
-
変数やプロシージャのスコープ(適用範囲)
変数やプロシージャのスコープ(適用範囲) 【構文:変数の宣言】 { Dim | …
-
省略可能な引数・デフォルト値を設定( Optional キーワード )
Optional キーワード Optional キーワードを使用するとプロシージ …
-
エラー処理(On Error ステートメント / Errオブジェクト)
On Error ステートメントの使い方 【構文 1】 On Error GoT …
-
With ステートメントを使う
With ステートメントを使う With ステートメントを使うことで、1度指定し …
-
プロシージャを呼び出す(Call ステートメント)
プロシージャを呼び出す プロシージャ内から、別のプロシージャを呼び出すには、Ca …
-
ユーザー定義型変数を使う(Type ステートメント)
Type ステートメントを使う Type ステートメントを使うと1つまたは複数の …
-
プロシージャ内のサブルーチンへ移動(GoTo ステートメント)
GoTo ステートメント GoTo ステートメントは、指定したラベルのサブルーチ …