INDEX
GoSubの概要
プロシージャ内の特定の位置へジャンプし、処理を実行した後に戻る VBAの予約語 | ||
GoSub 概要 GoSub ステートメントは、VBAでプロシージャ内の指定したラベルへジャンプし、処理を実行した後、元の位置に戻るために使用されます。ただし、現在のVBAでは 推奨されていない古い制御構造 であり、代わりに わかりやすく説明 プロシージャの中で一時的に別の処理にジャンプし、処理後に元の位置に戻る命令。 |
||
|
GoSubを使った基本的なサブルーチンの呼び出し
以下の例では、GoSub を使ってサブルーチンへジャンプし、処理後に元の位置へ戻ります。
Sub TestGoSub()
Dim num As Integer
num = 5
GoSub CalculateSquare
MsgBox "計算結果: " & num
Exit Sub ' GoSubを使う場合は明示的にExit Subを入れる
CalculateSquare:
num = num * num
Return
End Sub
解説:
GoSub CalculateSquare
:CalculateSquare:
の位置へジャンプ。Return
: GoSub が呼ばれた次の行に戻る。Exit Sub
: もしReturn
ではなく直接Exit Sub
に到達した場合、エラーを防ぐ。
GoSubの問題点とSub/Functionを使った代替
GoSub はコードの可読性を低下させるため、Sub や Function を使用する方が良いです。
' GoSubを使わずにSubで代替
Sub TestSub()
Dim num As Integer
num = 5
num = CalculateSquare(num)
MsgBox "計算結果: " & num
End Sub
Function CalculateSquare(n As Integer) As Integer
CalculateSquare = n * n
End Function
解説:
Function
を使って、GoSub の代わりに再利用可能な処理を定義。- 可読性が向上し、コードの保守性が高まる。
Excel VBAでのGoSubの活用例(非推奨)
以下の例では、Excelのセルの値を変更するためにGoSubを使っています。
Sub UpdateCell()
Range("A1").Value = 10
GoSub DoubleValue
MsgBox "A1の新しい値: " & Range("A1").Value
Exit Sub
DoubleValue:
Range("A1").Value = Range("A1").Value * 2
Return
End Sub
解説:
GoSub DoubleValue
により、セルの値を2倍にする処理へジャンプ。- ただし、この処理も
Sub
に分離する方が適切。
GoSubの注意事項
- 現在のVBAでは非推奨:
Sub
やFunction
を使うのが推奨される。 - Returnを忘れるとエラーになる: GoSub のジャンプ先には必ず
Return
を記述する。 - Exit Subを使わないと制御が不明確になる: プロシージャの終了時には明示的に
Exit Sub
を書く。
よくある質問
- Q: GoSub を使うべき場面はありますか?
- A: いいえ。現在のVBAでは、Sub や Function を使う方が適切です。
- Q: GoSub の代わりに何を使えばよいですか?
- A: Sub または Function を使い、処理を明確に分離するのがベストです。
- Q: GoSub を使うとエラーになることがありますか?
- A: はい。Return がないと「Return なしの GoSub」で実行時エラーが発生します。
まとめ
- GoSub はプロシージャ内の特定の位置にジャンプし、処理後に元の位置へ戻る。
- 現在のVBAでは非推奨であり、Sub や Function を使うのが推奨される。
- GoSub を使う場合は、Return を必ず記述する必要がある。
- Excel VBAの処理でも Sub や Function に分離することで可読性が向上する。