Static ステートメントStatic statement

プロシージャレベルで使用され、変数を宣言して記憶領域を割り当てます。Used at the procedure level to declare variables and allocate storage space. Static ステートメントで宣言された変数は、コードが実行されている間はその値を保持します。Variables declared with the Static statement retain their values as long as the code is running.

構文Syntax

静的varname[([下付き])][ As [ new ] type ], [ varname [([下付き])] [ as [新規] type ]] ...Static varname [ ( [ subscripts ] ) ] [ As [ New ] type ], [ varname [ ( [ subscripts ] ) ] [ As [ New ] type ]] . . .


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

パーツPart 説明Description
varnamevarname 必須。Required. 変数の名前です。標準の変数の名前付け規則に従ってください。Name of the variable; follows standard variable naming conventions.
subscriptssubscripts 省略可能。Optional. 配列変数の次元。最大60の複数次元を宣言できます。Dimensions of an array variable; up to 60 multiple dimensions may be declared. subscripts 引数の構文は、次のとおりです。The subscripts argument uses the following syntax:

[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .

lower で明示的に指定していないときには、配列の下限が Option Base ステートメントによって制御されます。When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. Option Base ステートメントが存在しない場合、下限は 0 になります。The lower bound is zero if no Option Base statement is present.
NewNew オプションです。Optional. このキーワードを指定すると、オブジェクトを暗黙的に作成できます。Keyword that enables implicit creation of an object. オブジェクト変数を宣言するときに New を使用すると、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるため、Set ステートメントを使用してオブジェクト参照を割り当てる必要がありません。If you use New when declaring the object variable, a new instance of the object is created on first reference to it, so you don't have to use the Set statement to assign the object reference. New キーワードを使用して、組み込みのデータ型の変数を宣言したり、従属オブジェクトのインスタンスを宣言したりできません。The New keyword can't be used to declare variables of any intrinsic data type and can't be used to declare instances of dependent objects.
typetype 省略可能。Optional. 変数のデータ型です。ByteBooleanIntegerLongCurrencySingleDoubleDecimal (現在サポートされていません)、DateString (可変長文字列の場合)、String length (固定長文字列の場合)、ObjectVariantユーザー定義型、またはオブジェクト型を指定できます。Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (for variable-length strings), String length (for fixed-length strings), Object, Variant, a user-defined type, or an object type. 定義する変数**** ごとに、 _type_句を個別に使用します。Use a separate As type clause for each variable being defined.

注釈Remarks

モジュールコードを実行した後、 Staticステートメントを使用して宣言された変数は、モジュールがリセットまたは再起動されるまで、その値を保持します。After module code is running, variables declared with the Static statement retain their value until the module is reset or restarted. クラスモジュールでは、 Staticステートメントを使用して宣言された変数は、そのインスタンスが破棄されるまで、各クラスインスタンスでその値を保持します。In class modules, variables declared with the Static statement retain their value in each class instance until that instance is destroyed. フォームモジュールでは、静的な変数は、フォームが閉じられるまで値を保持します。In form modules, static variables retain their value until the form is closed.

静的プロシージャでStaticステートメントを使用して、プロシージャ内にのみ表示されるものの、プロシージャが定義されているモジュールと同じ有効期間を持つ変数を明示的に宣言します。Use the Static statement in nonstatic procedures to explicitly declare variables that are visible only within the procedure, but whose lifetime is the same as the module in which the procedure is defined.

プロシージャの呼び出しと呼び出しの間に値を保持する変数のデータ型を宣言するには、プロシージャの中で Static ステートメントを使用します。Use a Static statement within a procedure to declare the data type of a variable that retains its value between procedure calls. たとえば、次のステートメントは整数型の固定サイズの配列を宣言します。For example, the following statement declares a fixed-size array of integers:

Static EmployeeNumber(200) As Integer 

次のステートメントではワークシートの新しいインスタンスに対応する変数を宣言しています。The following statement declares a variable for a new instance of a worksheet:

Static X As New Worksheet 

オブジェクト変数の宣言時に New キーワードを使用していない場合は、そのオブジェクトを参照する変数の使用前に、Set ステートメントを使用して既存のオブジェクトを割り当てておく必要があります。If the New keyword isn't used when declaring an object variable, the variable that refers to the object must be assigned an existing object by using the Set statement before it can be used. オブジェクトが割り当てられるまで、宣言したオブジェクト変数には Nothing という特殊な値が設定されます。この値は、その変数がオブジェクトの特定のインスタンスを参照していないことを示します。Until it is assigned an object, the declared object variable has the special value Nothing, which indicates that it doesn't refer to any particular instance of an object. 宣言Newキーワードを使用すると、オブジェクトのインスタンスが、オブジェクトへの最初の参照に作成されます。When you use the New keyword in the declaration, an instance of the object is created on the first reference to the object.

データ型またはオブジェクトの種類を指定しない場合、Deftype ステートメントがモジュールにないと、変数は既定のバリアント型 (Variant) になります。If you don't specify a data type or object type, and there is no Deftype statement in the module, the variable is Variant by default.

注意

Static ステートメントと Static キーワードは似ていますが、得られる効果は違います。The Static statement and the Static keyword are similar, but used for different effects. Staticキーワード (のようにStatic Sub CountSales ()) を使用してプロシージャを宣言すると、プロシージャ内のすべてのローカル変数の記憶領域が一度割り当てられ、プログラムの実行時に変数の値が保持されます。If you declare a procedure by using the Static keyword (as in Static Sub CountSales ()), the storage space for all local variables within the procedure is allocated once, and the value of the variables is preserved for the entire time the program is running. 静的でないプロシージャの場合、変数の記憶域は、プロシージャが呼び出されるたびに割り当てられ、プロシージャが終了するときに解放されます。For nonstatic procedures, storage space for variables is allocated each time the procedure is called and released when the procedure is exited. Static ステートメントは、静的でないプロシージャの中で特定の変数を宣言するときに使用され、プログラムの実行中は変数の値を保持します。The Static statement is used to declare specific variables within nonstatic procedures to preserve their value for as long as the program is running.

変数の初期化時に、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に、固定長文字列は 0 で埋められた文字列に初期化されます。When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string (""), and a fixed-length string is filled with zeros. Variant 変数は、Empty に初期化されます。Variant variables are initialized to Empty. さらに、バリアント型 (Variant) 変数は空に初期化され、ユーザー定義型変数の各要素は、個別の変数のように初期化されます。Each element of a user-defined type variable is initialized as if it were a separate variable.

注意

プロシージャの中で Static ステートメントを使用する場合、Dim などの他の宣言型ステートメントとともにプロシージャの最初に指定します。When you use Static statements within a procedure, put them at the beginning of the procedure with other declarative statements such as Dim.

Example

この例では、 Staticステートメントを使用して、モジュールのコードが実行されている間は変数の値を保持します。This example uses the Static statement to retain the value of a variable for as long as the module code is running.

' Function definition. 
Function KeepTotal(Number) 
    ' Only the variable Accumulate preserves its value between calls. 
    Static Accumulate 
    Accumulate = Accumulate + Number 
    KeepTotal = Accumulate 
End Function 
 
' Static function definition. 
Static Function MyFunction(Arg1, Arg2, Arg3) 
    ' All local variables preserve value between function calls. 
    Accumulate = Arg1 + Arg2 + Arg3 
    Half = Accumulate / 2 
    MyFunction = Half 
End Function

関連項目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.