Static ステートメント

プロシージャ レベルで変数を宣言し、ストレージ領域を割り当てるために使用します。 Static ステートメントで宣言された変数は、コードが実行されている間はその値を保持します。

構文

Staticvarname [ ( [ subscripts ] ) ] ] [ As [ New ] type ], [ varname [ ( [ subscripts ] ) ] [ As [ New ] type ]] . . .

Static ステートメントの構文には、次の指定項目があります。

指定項目 説明
varname 必須。 変数の名前です。標準の変数の名前付け規則に従ってください。
subscripts 省略可能。 配列変数の次元。最大 60 個の複数のディメンションを宣言できます。 添字引数は、次の構文を使用します。

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

lower で明示的に指定していないときには、配列の下限が Option Base ステートメントによって制御されます。 Option Base ステートメントが存在しない場合、下限は 0 になります。
New オプションです。 このキーワードを指定すると、オブジェクトを暗黙的に作成できます。 オブジェクト変数を宣言するときに New を使用すると、オブジェクトを最初に参照したときにオブジェクトの新しいインスタンスが作成されるため、Set ステートメントを使用してオブジェクト参照を割り当てる必要がありません。 New キーワードを使用して、組み込みのデータ型の変数を宣言したり、従属オブジェクトのインスタンスを宣言したりできません。
type 省略可能。 変数のデータ型。は、 Byte、 Boolean、 Integer、 Long、 Currency、 Single、 Double、 Decimal (現在サポートされていません)、 Date、 String (可変長文字列の場合)、 Stringlength (固定長文字列の場合)、 Object、 Variant、 ユーザー定義型、または オブジェクト型のいずれかです。 定義する変数ごとに個別の Astype 句を使用します。

注釈

モジュール コードの実行後、Static ステートメントで宣言された変数は、モジュールがリセットまたは再起動されるまで値を保持します。 クラス モジュールでは、Static ステートメントで宣言された変数は、そのインスタンスが破棄されるまで各クラス インスタンスに値を保持します。 フォーム モジュールでは、静的変数はフォームが閉じられるまで値を保持します。

非静的プロシージャで Static ステートメントを使用して、プロシージャ内でのみ表示されるが、有効期間がプロシージャが定義されているモジュールと同じ変数を明示的に宣言します。

プロシージャの呼び出しと呼び出しの間に値を保持する変数のデータ型を宣言するには、プロシージャの中で Static ステートメントを使用します。 たとえば、次のステートメントは整数型の固定サイズの配列を宣言します。

Static EmployeeNumber(200) As Integer 

次のステートメントではワークシートの新しいインスタンスに対応する変数を宣言しています。

Static X As New Worksheet 

オブジェクト変数の宣言時に New キーワードを使用していない場合は、そのオブジェクトを参照する変数の使用前に、Set ステートメントを使用して既存のオブジェクトを割り当てておく必要があります。 オブジェクトが割り当てられるまで、宣言したオブジェクト変数には Nothing という特殊な値が設定されます。この値は、その変数がオブジェクトの特定のインスタンスを参照していないことを示します。 宣言で New キーワード (keyword)を使用すると、オブジェクトへの最初の参照で オブジェクトのインスタンスが作成されます。

データ型またはオブジェクトの種類を指定しない場合、Deftype ステートメントがモジュールにないと、変数は既定のバリアント型 (Variant) になります。

注:

Static ステートメントと Static キーワードは似ていますが、得られる効果は違います。 (Static Sub CountSales ()のように) 静的キーワード (keyword)を使用してプロシージャを宣言すると、プロシージャ内のすべてのローカル変数のストレージ領域が 1 回割り当てられ、プログラムの実行中は変数の値が保持されます。 静的でないプロシージャの場合、変数の記憶域は、プロシージャが呼び出されるたびに割り当てられ、プロシージャが終了するときに解放されます。 Static ステートメントは、静的でないプロシージャの中で特定の変数を宣言するときに使用され、プログラムの実行中は変数の値を保持します。

変数の初期化時に、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に、固定長文字列は 0 で埋められた文字列に初期化されます。 Variant 変数は、Empty に初期化されます。 ユーザー定義型変数の各要素は、それぞれの要素が個別の変数であるものとして初期化されます。

注:

プロシージャの中で Static ステートメントを使用する場合、Dim などの他の宣言型ステートメントとともにプロシージャの最初に指定します。

例

この例では、 モジュール コードが実行されている限り、Static ステートメントを使用して変数の値を保持します。

' 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

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。