Sub ステートメントSub statement

Sub プロシージャの名前、引数、および本文を形成するコードを宣言します。Declares the name, arguments, and code that form the body of a Sub procedure.

構文Syntax

[ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ][ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ]
[ statements ][ statements ]
[ Exit Sub ][ Exit Sub ]
[ statements ][ statements ]
End SubEnd Sub


Sub ステートメントの構文には、次の指定項目があります。The Sub statement syntax has these parts:

パーツPart 説明Description
PublicPublic 省略可能。Optional. この Sub プロシージャは、すべてのモジュールにある他のすべてのプロシージャからアクセスできることを示します。Indicates that the Sub procedure is accessible to all other procedures in all modules. Option Private ステートメントを含むモジュールで使用されている場合、このプロシージャはプロジェクトの外部では使用できなくなります。If used in a module that contains an Option Private statement, the procedure is not available outside the project.
PrivatePrivate 省略可能。Optional. この Sub プロシージャは、このプロシージャが宣言されたモジュール内にある他のプロシージャからのみアクセスできることを示します。Indicates that the Sub procedure is accessible only to other procedures in the module where it is declared.
FriendFriend 省略可能。Optional. クラス モジュール内でのみ使用します。Used only in a class module. この Sub プロシージャは、プロジェクト全体で参照可能ですが、オブジェクトのインスタンスのコントローラーからは参照できません。Indicates that the Sub procedure is visible throughout the project, but not visible to a controller of an instance of an object.
StaticStatic 省略可能。Optional. この Sub プロシージャのローカル変数が呼び出し間で保持されることを示します。Indicates that the Sub procedure's local variables are preserved between calls. この Sub プロシージャの外側で宣言された変数は、このプロシージャ内で使用されていても、Static 属性の影響を受けません。The Static attribute doesn't affect variables that are declared outside the Sub, even if they are used in the procedure.
namename 必須。Required. この Sub の名前です。標準の変数の名前付け規則に従ってください。Name of the Sub; follows standard variable naming conventions.
arglistarglist 省略可能。Optional. この Sub プロシージャの呼び出し時に渡される引数を表す変数のリストです。List of variables representing arguments that are passed to the Sub procedure when it is called. 複数の変数は、コンマで区切られます。Multiple variables are separated by commas.
statementsstatements 省略可能。Optional. この Sub プロシージャ内で実行するステートメントのグループです。Any group of statements to be executed within the Sub procedure.

arglist 引数の構文と指定項目は次のとおりです。The arglist argument has the following syntax and parts:

[省略可能][ ByVal | ByRef ][ ParamArray ]varname[()] [ **** ] = [_既定_値][ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ As type ] [ = defaultvalue ]


パーツPart 説明Description
OptionalOptional 省略可能。Optional. 引数が必須でないことを示すキーワードです。Keyword indicating that an argument is not required. このキーワードを使用した場合は、それ以降の arglist 内の引数もすべて省略可能にして、Optional キーワードを使用して宣言する必要があります。If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. ParamArray が使用されている場合は、どの引数にも Optional は使用できません。Optional can't be used for any argument if ParamArray is used.
ByValByVal 省略可能。Optional. 値渡しで引数が渡されることを示します。Indicates that the argument is passed by value.
ByRefByRef 省略可能。Optional. 参照渡しで引数が渡されることを示します。Indicates that the argument is passed by reference. Visual Basic の既定は ByRef です。ByRef is the default in Visual Basic.
ParamArrayParamArray 省略可能。Optional. arglist の最後の引数としてのみ使用し、最後の引数が Variant 要素の Optional配列であることを示します。Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. ParamArray キーワードを使用することで、任意の数の引数を指定できます。The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray は、ByValByRef、または Optional と併用することはできません。ParamArray can't be used with ByVal, ByRef, or Optional.
varnamevarname 必須です。Required. 引数を表す変数の名前です。標準の変数の名前付け規則に従ってください。Name of the variable representing the argument; follows standard variable naming conventions.
typetype 省略可能。Optional. プロシージャに渡す引数のデータ型です。ByteBooleanIntegerLongCurrencySingleDoubleDecimal (現在サポートされていません)、DateString (可変長のみ)、ObjectVariant、または特定のオブジェクト型を指定できます。Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (variable-length only), Object, Variant, or a specific object type. パラメーターが Optional でない場合は、ユーザー定義型の指定も可能です。If the parameter is not Optional, a user-defined type may also be specified.
defaultvaluedefaultvalue オプション。Optional. 任意の定数または定数です。Any constant or constant expression. Optional のパラメーターにのみ有効です。Valid for Optional parameters only. Object 型の場合、明示的な既定値は Nothing のみが有効です。If the type is an Object, an explicit default value can only be Nothing.

解説Remarks

PublicPrivate、または Friend を使用した明示的な指定がない場合、Sub プロシージャは既定でパブリックになります。If not explicitly specified by using Public, Private, or Friend, Sub procedures are public by default.

Static が使用されていない場合、ローカル変数の値は呼び出し間で保持されません。If Static isn't used, the value of local variables is not preserved between calls.

Friend キーワードは、クラス モジュールでのみ使用できます。The Friend keyword can only be used in class modules. ただし、Friend プロシージャは、プロジェクトに含まれるどのモジュール内のプロシージャからでもアクセスできます。However, Friend procedures can be accessed by procedures in any module of a project. Friend プロシージャは、その親クラスのタイプ ライブラリには表示されません。また、Friend プロシージャは、遅延バインディングすることもできません。A Friend procedure doesn't appear in the type library of its parent class, nor can a Friend procedure be late bound.

Sub プロシージャは再帰できるため、特定のタスクを実行するために自身の呼び出しが可能です。Sub procedures can be recursive; that is, they can call themselves to perform a given task. ただし、再帰はスタック オーバーフローの原因になることがあります。However, recursion can lead to stack overflow. 通常、再帰的な Sub プロシージャには Static キーワードを使用しません。The Static keyword usually is not used with recursive Sub procedures.

すべての実行可能なコードは、プロシージャ内に配置する必要があります。All executable code must be in procedures. Sub プロシージャは、別の Sub プロシージャ、Function プロシージャ、または Property プロシージャの内側で定義することはできません。You can't define a Sub procedure inside another Sub, Function, or Property procedure.

Exit Sub キーワードにより、Sub プロシージャは即時終了します。The Exit Sub keywords cause an immediate exit from a Sub procedure. プログラムの実行は、その Sub プロシージャを呼び出したステートメントの次のステートメントから続行されます。Program execution continues with the statement following the statement that called the Sub procedure. Exit Sub ステートメントは、Sub プロシージャ内の任意の場所にいくつでも配置できます。Any number of Exit Sub statements can appear anywhere in a Sub procedure.

Function プロシージャと同様に、Sub プロシージャは個別のプロシージャとして、引数を取り、一連のステートメントを実行し、その引数の値を変更できます。Like a Function procedure, a Sub procedure is a separate procedure that can take arguments, perform a series of statements, and change the value of its arguments. ただし、値を返す Function プロシージャとは異なり、Sub プロシージャは式内では使用できません。However, unlike a Function procedure, which returns a value, a Sub procedure can't be used in an expression.

Sub プロシージャは、そのプロシージャの名前と、それに続く引数のリストを使用して呼び出します。You call a Sub procedure by using the procedure name followed by the argument list. Sub プロシージャの具体的な呼び出し方法については、Call ステートメントを参照してください。See the Call statement for specific information about how to call Sub procedures.

Sub プロシージャで使用される変数は、そのプロシージャ内で明示的に宣言されている変数と、明示的に宣言されていない変数の 2 つのカテゴリに分類できます。Variables used in Sub procedures fall into two categories: those that are explicitly declared within the procedure and those that are not. プロシージャ内で Dim などのステートメントを使用して明示的に宣言されている変数は、常にプロシージャに対してローカルになります。Variables that are explicitly declared in a procedure (using Dim or the equivalent) are always local to the procedure. 明示的に宣言されることなくプロシージャ内で使用されている変数もローカルになります。ただし、そのプロシージャの外側の上位レベルで明示的に宣言されている場合を除きます。Variables that are used but not explicitly declared in a procedure are also local unless they are explicitly declared at some higher level outside the procedure.

プロシージャでは、そのプロシージャ内で明示的に宣言していない変数を使用できますが、モジュール レベルで同じ名前が定義されているものがあると、名前の競合が発生することがあります。A procedure can use a variable that is not explicitly declared in the procedure, but a naming conflict can occur if anything you defined at the module level has the same name. 別のプロシージャ、定数、または変数と名前が同じ未宣言の変数をプロシージャで参照すると、そのプロシージャは、そのモジュール レベルの名前を参照していると見なされます。If your procedure refers to an undeclared variable that has the same name as another procedure, constant or variable, it is assumed that your procedure is referring to that module-level name. この種類の競合を回避するために、変数は明示的に宣言します。To avoid this kind of conflict, explicitly declare variables. Option Explicit ステートメントを使用すると、変数の明示的な宣言を強制できます。You can use an Option Explicit statement to force explicit declaration of variables.

注意

Sub プロシージャを開始または終了するために、GoSubGoTo、または Return は使用できません。You can't use GoSub, GoTo, or Return to enter or exit a Sub procedure.

Example

この例では、Sub ステートメントを使用して、Sub プロシージャの名前、引数、および本文を形成するコードを定義します。This example uses the Sub statement to define the name, arguments, and code that form the body of a Sub procedure.

' Sub procedure definition. 
' Sub procedure with two arguments. 
Sub SubComputeArea(Length, TheWidth) 

   Dim Area As Double ' Declare local variable. 

   If Length = 0 Or TheWidth = 0 Then 
      ' If either argument = 0. 
      Exit Sub ' Exit Sub immediately. 
   End If 
   
   Area = Length * TheWidth ' Calculate area of rectangle. 
   Debug.Print Area ' Print Area to Debug window. 

End Sub

関連項目See also

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.