Home » エクセルマクロ・Excel VBAの使い方 » ウォッチウィンドウでByRef・参照渡しを確認する

ウォッチウィンドウでByRef・参照渡しを確認する

参照渡し・ByRefをどう使うのか解説しました。

ByRefについて理解するにはウォッチウィンドウで、

ウォッチウィンドウでByRef・参照渡しを確認する

呼ぶプロシージャの変数と、呼ばれるプロシージャの引数の中身を確認することをおすすめします。

[スポンサードリンク]

ウォッチ式の追加

呼び出し元プロシージャの変数code_1とcode_2、元データを代入している変数code_org、呼ばれるほうのプロシージャの引数val1とval2をウォッチ式として追加します。

ウォッチウィンドウでByRef・参照渡しを確認する

いずれもコードに存在していますから、ドラッグアンドドロップするのが簡単でしょう。

ステップ実行の開始

ウォッチ式の追加が終わったら、ショートカットキー[F8]でSubプロシージャmainのステップ実行を開始します。

ウォッチウィンドウでByRef・参照渡しを確認する

Subプロシージャmainの変数code_1・code_2・code_orgは、文字列型ですから「""」で初期化されていることを確認できます。

変数code_orgへの代入後

代入ステートメント「code_org = abcd012345」が実行され、変数code_orgへの代入が行われると、

ウォッチウィンドウでByRef・参照渡しを確認する

もちろん上図のように変数code_orgに「abcd012345」が代入されていることを確認できます。

SubプロシージャのCall

SubプロシージャsplitCodeが呼ばれると、

ウォッチウィンドウでByRef・参照渡しを確認する

splitCodeの引数val1・val2も、文字列型ですから先に見たmainの変数と同様に、「""」で初期化されます。

変数code_1にも値が入る

次が、ByRef(参照渡し)の重要なポイントです。

代入ステートメント「val1 = Mid(code, 1, 4)」が実行されると、当然SubプロシージャsplitCodeのval1に「abcd」が代入されます。

それと同時に、splitCodeの呼び出し元であるSubプロシージャmainのcode_1にも同じく「abcd」が代入されます。

ウォッチウィンドウでByRef・参照渡しを確認する

これがByRefの効果です。
Functionプロシージャの戻り値(返り値)で、別のプロシージャからデータを受け取ることができるのと同じように、参照渡しの引数でもデータを受け取れることを、ウォッチウィンドウで確認できたわけです。

変数code_2にも値が入る

ステップ実行をつづけて、代入ステートメント「val2 = Mid(code, 5, 6)」が実行されれば、

ウォッチウィンドウでByRef・参照渡しを確認する

val2とcode_2に「012345」が同時に代入されます。

SubプロシージャsplitCodeの引数val2もByRefだからです。

ByValにして確認しておきましょう

ここでは参照渡しの確認手順をご紹介していますが、値渡しの場合にどうなるかも確認しておきましょう。

SubプロシージャsplitCodeの引数val1とval2を、ByRefではなくByValにしてステップ実行したときには、val1とval2に代入が行われてもmainのcode_1とcode_2に代入は行われません。

ByRefの確認にはウォッチウィンドウ

ウォッチウィンドウやイミディエイトウィンドウよりも、ローカルウィンドウのほうが初心者向けのデバッグツールだということを私はお伝えしています。

ですが今回のように、複数のプロシージャのデータ受け渡しの状態を確認する場合は、ローカルウィンドウでは代入が同時に行われることを確認し辛いので、ウォッチウィンドウがおすすめです。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ウォッチウィンドウでByRef・参照渡しを確認する

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.