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でエラー処理を行う場合など、用途を限定して使用することをオススメします。
使いこなすことができるように、この記事を何度も参考にして下さいね!






