Staticステートメントとモジュールレベルの宣言との挙動について 削除
Message#1 2014年12月27日(土)09時57分 From: 戴冠式 |
現在エクセルVBAの変数のスコープについて、学習しています。 Staticステートメントがどの範囲まで値を保持するのか確認しているのですが、1つおかしな現象がありました。 以下が設定内容です。 [Module1] Dim a As Integer Sub sampleA() Static a As Integer a = a + 5 MsgBox "変数a:" & a End Sub Sub sampleB() a = a + 5 MsgBox "変数a:" & a End Sub sampleAでは、Staticステートメントを利用して変数aの値を保持しています。 宣言セクションではDimステートメントでモジュール内で利用できる変数aを宣言しています。 まずsampleAを実行するとメッセージボックスに「変数a:5」が表示されます。 再度sampleAを実行すると変数aの値は保持されていますので、「変数a:10」が表示されます。 ここまで見ると値が正常に保持されているのですが、次にsampleBを実行すると「変数a:5」が表示されます。 この時点ではStaticステートメントはプロシージャ内でしか、利用できないのかなと思うのですが、再度sampleBを実行すると「変数a:10」が表示されます。 変数aが変わったということは、sampleBもStaticステートメントの影響を受けているということなのですが、 それなら一回目にsampleBを実行したときに以下のように「変数a:15」になるのではないのかと思っています。 sampleA実行(1回目)→「変数a:5」 sampleA実行(2回目)→「変数a:10」 sampleB実行(1回目)→「変数a:15」 sampleB実行(2回目)→「変数a:20」 でも実際は以下のようになります。 こちらの原因が分からないので、もしご存知の方がいらっしゃいましたら、ご教授お願いします。 sampleA実行(1回目)→「変数a:5」 sampleA実行(2回目)→「変数a:10」 sampleB実行(1回目)→「変数a:5」 sampleB実行(2回目)→「変数a:10」 sampleA実行(3回目)→「変数a:15」 sampleB実行(3回目)→「変数a:15」 |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。