ウォッチ式の追加
呼び出し元プロシージャの変数code_1とcode_2、元データを代入している変数code_org、呼ばれるほうのプロシージャの引数val1とval2をウォッチ式として追加します。
いずれもコードに存在していますから、ドラッグアンドドロップするのが簡単でしょう。
ステップ実行の開始
ウォッチ式の追加が終わったら、ショートカットキー[F8]でSubプロシージャmainのステップ実行を開始します。
Subプロシージャmainの変数code_1・code_2・code_orgは、文字列型ですから「""」で初期化されていることを確認できます。
変数code_orgへの代入後
代入ステートメント「code_org = abcd012345」が実行され、変数code_orgへの代入が行われると、
もちろん上図のように変数code_orgに「abcd012345」が代入されていることを確認できます。
SubプロシージャのCall
SubプロシージャsplitCodeが呼ばれると、
splitCodeの引数val1・val2も、文字列型ですから先に見たmainの変数と同様に、「""」で初期化されます。
変数code_1にも値が入る
次が、ByRef(参照渡し)の重要なポイントです。
代入ステートメント「val1 = Mid(code, 1, 4)」が実行されると、当然SubプロシージャsplitCodeのval1に「abcd」が代入されます。
それと同時に、splitCodeの呼び出し元であるSubプロシージャmainのcode_1にも同じく「abcd」が代入されます。
これがByRefの効果です。
Functionプロシージャの戻り値(返り値)で、別のプロシージャからデータを受け取ることができるのと同じように、参照渡しの引数でもデータを受け取れることを、ウォッチウィンドウで確認できたわけです。
変数code_2にも値が入る
ステップ実行をつづけて、代入ステートメント「val2 = Mid(code, 5, 6)」が実行されれば、
val2とcode_2に「012345」が同時に代入されます。
SubプロシージャsplitCodeの引数val2もByRefだからです。
ByValにして確認しておきましょう
ここでは参照渡しの確認手順をご紹介していますが、値渡しの場合にどうなるかも確認しておきましょう。
SubプロシージャsplitCodeの引数val1とval2を、ByRefではなくByValにしてステップ実行したときには、val1とval2に代入が行われてもmainのcode_1とcode_2に代入は行われません。
ByRefの確認にはウォッチウィンドウ
ウォッチウィンドウやイミディエイトウィンドウよりも、ローカルウィンドウのほうが初心者向けのデバッグツールだということを私はお伝えしています。
ですが今回のように、複数のプロシージャのデータ受け渡しの状態を確認する場合は、ローカルウィンドウでは代入が同時に行われることを確認し辛いので、ウォッチウィンドウがおすすめです。
- Newer:ショートカットキーとアクセスキーの目次
- Older:VBAでアクティブウィンドウ名を取得するには?
Home » エクセルマクロ・Excel VBAの使い方 » ウォッチウィンドウでByRef・参照渡しを確認する