• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelのマクロでのExit Subの役割とは)

ExcelのマクロでのExit Subの役割とは

このQ&Aのポイント
  • Excelのマクロで使用されるExit Subの役割について、詳しく説明してください。
  • マクロ内でのExit Subの使用によって、セルA1に表示される値が制御される仕組みについて教えてください。
  • マクロ内でのExit Subの挙動について、理解が深まると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

>何度も test() に戻るだけで ではなく、test()から、test()を呼び出すと、コンピュータ上では、同じコードのtest()ではあるのですが、別のtest()ととして呼び出すのです。 これを再帰呼び出しといいます。 なので、なんどもtest2()が呼び出されてしまうのです。

niftynejp
質問者

お礼

早速のご回答 ありがとうございました。 大変分かりやすく 説明していただきました。 おかげさまで とてもすっきりしました。 「再帰呼び出し」という言葉 これからしっかり勉強したいと思います。 何かありましたら そのときはまた ぜひよろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asciiz
  • ベストアンサー率70% (6871/9771)
回答No.2

すでにANo.1さんの「再帰呼び出しをしてしまっている」というので正解なんですが、別の説明をしてみます。 「『call test』と書けば、制御が先頭に移る」と考えたのでしょうけど、call文を使ってしまったために、副作用が生じています。 単に命令実行位置を変えたければ、GoTo文を使うべきだったでしょう。 サブルーチンの頭に「test_top:」とラベルを書いておき、「call test」ではなく「GoTo test_top」と書けば、お望みの動作になったかと思います。 -- ではサブルーチン呼び出しではなぜうまく行かないか? サブルーチンを呼び出すってことは、呼び出す元の位置に、サブルーチン内容を丸々コピペするのと同じですよね。 つまり、サブルーチンtest内で「call test」と書いたなら、そこにまたtestサブルーチン全体をコピペしたことになってしまいます。 callによって単に制御が頭にもどったのではありません、サブルーチン呼び出しが一段深くなった上で、新たにtestサブルーチンの先頭から実行しているんです。 停止条件が満たされない限り、何重にもtestが呼び出される、すなわちtestサブルーチンのコピペが行われる、プログラムになってしまっているのですね。 停止条件が成立すれば、test2を呼び出しサブルーチン呼び出しは一段階終了、元の呼び出しcall文の次から実行を再開します。 一度停止条件が成立すれば、これまで何重にもたまったcallが解消されていき、その度にtest2が呼び出されます。 なので、最終結果として、ご質問にかかれた動作をしてしまいました。 -- このように、サブルーチン内から自分自身を呼び出すことを「再帰呼び出し」といい、プログラミング手法のひとつです。 使える場面では便利な手法です。 例えば、HDDの全フォルダ、全段階に渡って特定ファイルを調べる、とか。 今回は使うべき場面ではなかったのではないでしょうか?

niftynejp
質問者

お礼

ご回答 ありがとうございました。 お礼コメントが大幅に遅れてしまって 申し訳ございません。 GoTo文の使い方を 大いに活用させていただきます。 何かありましたら またよろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A