世間的には VBA に限らず Goto 文の使用は推奨されていません。しかし、現在はどうか分かりませんが、10年以上前の Linux カーネルでは Goto 文が、いい塩梅で使用されていた記憶があります。
無下に Goto 文の使用を否定することもないでしょう
昔話はここまでにして、VBA では Goto 文に近い感覚で GoSub ~ Return ステートメントを使って制御することもできます。
スポンサーリンク
GoSub ~ Return ステートメント
GoSub ~ Return ステートメントを使用して、関数内に関数を作るようなイメージになります。例えが良くないような気もします。。。。
GoSub Proc1 ' 処理1を実行 GoSub Proc2 ' 処理2を実行 Debug.Print ("Exit Sub") Exit Sub ' プロシージャ終了(これが重要) Proc1: Debug.Print ("Proc1") Return Proc2: Debug.Print ("Proc2") Return ' 実行結果 '----------------------- ' Proc1 ' Proc2 ' Exit Sub
実行時エラー ‘3’ : Return に対応する GoSub がありません
上記サンプルのコメント内で、Exit Sub が重要だと記載しましたが、この Exit Sub をコメントアウトして実行すると、以下のエラーダイアログが出力されます。
これは、Return で復帰する場合は、必ず GoSub から呼び出されている必要があるということです。Exit Sub をコメントアウトした場合、Proc1 の処理に入っても Return で復帰する場所が特定できません。
なお、実行時エラーなので上記のサンプルの場合、以下のように 2回目の Proc1 が処理された後、エラーダイアログが出力されてしまいます。VBA の困った挙動です。
' 実行結果 '----------------------- ' Proc1 ' Proc2 ' Proc1
いずれにしましても Goto 文と同様に、GoSub ~ Return 構文は使わないで済むのであれば、使わない方が良いでしょう。
矛盾するようですが、使いたい人は使いましょう。「○○すべき」みたいな偉そうなことは言えません。腰の低いおっさんです。