Developer

【ExcelVBA】静的変数
2021.07.19
Lv1

【ExcelVBA】静的変数

静的変数とは

前回は配列の使い方に関して紹介しました。今回は静的変数について紹介します。
変数は値を入れたり、入れた値を取り出したりといったことができるデータを保存できる箱のようなものであることはすでにこれまでの連載で説明してきました。
プロシージャ内で宣言された変数は通常、プロシージャが呼び出される際に初期化され、プロシージャが終了すると消えてしまいます。
同じプロシージャを再度呼び出しても、以前呼び出した際に変数に格納されていた値はすでに消えており、新しく変数がつくられるだけです。
通常、この動作で困ることはないのですが、以前にプロシージャ内の変数に最後に格納されていた値を、次呼び出したときに引き続きその値を使いたいケースがでてくることもあります。
そういった処理を実現する方法の一つに静的変数があります。
静的変数を使用することでプロシージャが終了しても変数の値が消えないようになります。

静的変数の宣言

静的変数を宣言する場合は、通常の変数のようにただDimをつけるのではくstaticをつけます。
静的変数はプロシージャ内で宣言してください。

Static 変数名 As 型

静的変数のサンプル

では静的変数の動作を見てみ来ましょう。
比較のために通常の変数から確認します。

Sub VBA基礎第28回_1()
   Call 通常変数	'1回目の呼び出し
   
   Call 通常変数	'2回目の呼び出し
       
End Sub

Sub 通常変数()
    Dim num As Integer
    
    MsgBox "numは" & num
    
    num = num + 1
     
    MsgBox "numは" & num

End Sub

プロシージャ「通常変数」は内部で変数numを宣言し、メッセージボックスにその値を表示します。
その後、numに1を足した後、もう一度表示しています。
プロシージャ「VBA基礎第28回_1」からプロシージャ「通常変数」を2回呼び出しています。
表示結果は1回目も2回目も変わりません。
1回目の呼び出し

2回目の呼び出し

呼び出されるたびにnumの値は0で初期化されており、前の呼び出し時の値を保持していないからです。

では次に静的変数を使ってみましょう。

Sub VBA基礎第28回_2()
   Call 静的変数    '1回目の呼び出し
   
   Call 静的変数    '2回目の呼び出し
       
End Sub

Sub 静的変数()
    Static num As Integer
    
    MsgBox "numは" & num
    
    num = num + 1
     
    MsgBox "numは" & num

End Sub

staticを使用して静的変数numを宣言しています。
1回目の呼び出し時は最初numは0となり、加算されてプロシージャが終了する際にはnumは1になります。
2回目の呼び出し時はnnumは前回の1を保持しているため、最初からnumは1と表示されます。
1回目の呼び出し

2回目の呼び出し


このような動作をするのが静的変数となります。

まとめ

静的変を使用することで、プロシージャ内の変数に最後に格納されていた値を、次呼び出したときに引き続きその値を使うことができます。
変数の宣言時にstaticを使用して宣言します。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

・○○〇を使用することで、プロシージャ内の変数に最後に格納されていた値を、次呼び出したときに引き続きその値を使うことができます。
・変数の宣言時に○○〇を使用して宣言します。

答え


・静的変を使用することで、プロシージャ内の変数に最後に格納されていた値を、次呼び出したときに引き続きその値を使うことができます。
・変数の宣言時にstaticを使用して宣言します。

次回は、「オブジェクト変数」です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次