Staticステートメントとモジュールレベルの宣言との挙動について


Message#から前件を

日から 前を
Q&A掲示板へ

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


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」

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com