GoToステートメントって使ってますか?GoToステートメントは所定の記述まで処理をジャンプさせることができます。
この記事では、GoToステートメントについて
という基本的な内容から、
など応用的な内容についても解説していきます。
今回はGoToステートメントについて、使い方をわかりやすく解説します!
GoToステートメントとは
GoToステートメントはラベル先へ処理をジャンプさせます。ループ処理内である条件では処理をスキップしたい場合や、エラー処理を行いたい場合などで使われます。
ラベル先は同じプロシージャ内だけで、他のプロシージャへジャンプさせることはできません。
必要以上にGoToステートメントを多用すると、コードのフローが複雑になり読みにくくなりバグが発生する原因にもなりますので注意しましょう!
ラベルへジャンプする方法
GoToステートメントは以下のように記述して使用します。
GoTo ラベル名 処理1 ラベル名: 処理2
この場合GoToステートメントでラベル先の処理2は実行されますが、処理1は実行されません。
それではサンプルコードで確認していきましょう。
Sub macro1() Dim point As Integer point = 70 If False Then ElseIf point > 80 Then GoTo L1 ElseIf point > 60 Then GoTo L2 ElseIf point > 40 Then GoTo L3 Else: GoTo L4 End If L1: MsgBox "優です" Exit Sub L2: MsgBox "良です" Exit Sub L3: MsgBox "可です" Exit Sub L4: MsgBox "不可です" Exit Sub End Sub
実行結果:
このサンプルコードでは、ElseIfステートメントでの記述を1行に省略し、処理の記述はGoToステートメントのラベル先にまとめています。
ループをスキップする方法
ループ処理では、ある条件の場合はそれ以降の処理を省略してループ内の先頭の記述にスキップしたい場合があります。
そんな場合にVBAでは、continue文は使いません。GoToステートメントを使用します。
サンプルコードで確認しましょう。
Sub macro2() Dim i As Integer, sum As Integer For i = 2 To 10 L1: If Not IsNumeric(Range("B" & i)) Then i = i + 1 GoTo L1 End If sum = sum + Range("B" & i) Next i MsgBox "合計点数は" & sum & "点です" End Sub
実行結果:
このサンプルコードでは、Excelシートのセルに入力されている点数の合計を求めています。
セルに数値以外の値が入力されている場合は、GoToステートメントを使って合計を算出する処理をスキップして、For文内の最初にあるラベルL1にジャンプしています。
For Next文でループをスキップする方法については、こちらで詳しく解説していますので、ぜひ参考にしてください。
On Error GoToでエラー処理をする方法
On Errorステートメントを使用し処理中にエラーが発生した場合は、GoToステートメントでラベル先のエラー処理へジャンプします。
サンプルコードで確認していきましょう。
Sub macro3() On Error GoTo ErrLabel Dim ErrMsg As String Dim num1 As Integer, num2 As Integer, result As Double num1 = 1 num2 = 0 result = num1 / num2 'エラー発生 MsgBox ErrMsg & "処理完了" Exit Sub ErrLabel: ErrMsg = ErrMsg & "エラー番号" & Err.Number & vbCrLf & _ "エラー内容" & Err.Description & vbCrLf Resume Next 'エラーが発生した次のステートメントから プログラムを継続 End Sub
実行結果:
このサンプルプログラムでは、意図して0(ゼロ)で除算するエラーを発生させています。On Errorステートメントを使用し、GoToステートメントによりラベルErrLabelのエラー処理の記述までジャンプしています。
なおResume Nextステートメントを使うと、エラーの発生によってプログラムが中断することなくエラーが発生した次のステートメントから処理を継続することができます。
エラーを処理する方法については、こちらで詳しく解説していますので、ぜひ参考にしてください。
まとめ
ここでは、GoToステートメントについて説明しました。GoToステートメントはラベル先に処理をジャンプさせることができるので便利ですが、多用するとコードが読みにくくなる原因になります。
ループで処理をスキップする場合やOn Error GoToでエラー処理を行う場合など、用途を限定して使用することをオススメします。
使いこなすことができるように、この記事を何度も参考にして下さいね!