今回はGotoステートメントについて紹介したいと思います。
処理を結果に応じてスキップさせたりしたい時などに使えるので、参考にしていただければと思います。
また当ブログではVBAに関する記事を不定期で投稿していますので、良ければ是非ご覧ください!
使い方
Gotoステートメントをざっくり説明すると、指定したラベル名までジャンプするステートメントになります。
書き方はこんな感じです。
Goto GoHaribona
【ここから下は処理しない】
~
~
【ここまで上は処理しない】
GoHaribona: 'これより下のコードが処理される
このようにGotoの後ろにジャンプしたいラベル名を指定するだけです。
Gotoステートメントが実行されるとそのラベル名のところまでジャンプするため、ラベル名より上のコードは処理されずスキップされます。
サンプルコードの紹介
続いてサンプルコードの紹介です。コピペして実行してみてください。
Sub haribona_YesNo()
If MsgBox("処理しますか?", vbYesNo) = 7 Then
GoTo BtnNo
End If
MsgBox "実行時刻:" & Now
Exit Sub
BtnNo:
MsgBox "処理がキャンセルされました。"
End Sub
実行すると「はい」「いいえ」付きのメッセージボックスが表示されます。
![使い方_サンプルコードの紹介_1](https://masashi-blog418.com/wp-content/uploads/2022/12/image-12.png)
「はい」を押すと現在の時間が表示されます。
![使い方_サンプルコードの紹介_2](https://masashi-blog418.com/wp-content/uploads/2022/12/image-14.png)
「いいえ」を押すと「処理がキャンセルされました。」と表示され、そのまま処理が終了します。
![使い方_サンプルコードの紹介_3](https://masashi-blog418.com/wp-content/uploads/2022/12/image-15.png)
このようにGotoステートメントを使用すると、結果に応じて処理を分岐させることができます。
注意点
Gotoステートメントを使用する上で「必ずこうしろ」というのもないんですが、強いて言えばExit Subを付けるかどうかでしょうか。
今回の例で言うと実行時刻を表示するコードのすぐ下にExit Subを指定しています。
MsgBox "実行時刻:" & Now
Exit Sub
BtnNo:
MsgBox "処理がキャンセルされました。"
End Sub
が、Exit Subがついていないと実行時刻を表示した後に「処理がキャンセルされました。」の処理も実行されてしまいます。
'ついていない場合
Sub haribona_YesNo()
If MsgBox("処理しますか?", vbYesNo) = 7 Then
GoTo BtnNo
End If
MsgBox "実行時刻:" & Now
BtnNo:
MsgBox "処理がキャンセルされました。"
End Sub
![注意点_1](https://masashi-blog418.com/wp-content/uploads/2022/12/image-15.png)
場合によっては必要ないと思いますが、End Sub付近にラベルを書く場合は処理に異常がでないようにExit Subをラベルの上に書くようにしておきましょう。
まとめ
今回はGotoステートメントについて紹介しました。
使用するときは、
- 指定したラベル名が存在するか
- ラベル名の位置がおかしくないか
- Exit Subが付いているか(必要な場合のみ)
上記3点に気を付けて使用しましょう。
コメント