【VBA言語】プロシージャ内のサブルーチン呼び出し(GoSub)【初心者向け解説】

【VBA言語】プロシージャ内のサブルーチン呼び出し(GoSub)【初心者向け解説】

GoSubとは?

GoSubの構文

GoSubの簡単な例

GoSubと戻り値

GoSubの制限と注意点

GoSubとは?

VBA(Visual Basic for Applications)では、サブルーチンや関数を呼び出す方法として「GoSub」というキーワードを使うことができます。これは、あるプロシージャの中から、別の部分へ処理を一時的に移動させ、処理が終わった後に元の位置に戻るという特徴を持っています。

「GoSub」を使うと、コードを短く保つことができ、特定の処理を繰り返し使う場合に便利です。しかし、現在では「GoSub」はあまり推奨されていません。代わりに、サブルーチンや関数を呼び出す方法がよく使用されますが、初心者向けに「GoSub」の使い方を詳しく説明します。

GoSubの構文

「GoSub」を使う場合の基本的な構文は次の通りです:

Sub MainProcedure()
    ' MainProcedureの処理
    GoSub SubRoutine
    ' GoSubの後続処理
    Exit Sub
    
Sub SubRoutine
    ' SubRoutineの処理
    Return
End Sub
    

この構文では、MainProcedure内でGoSubを使ってSubRoutineを呼び出し、SubRoutineの処理が終わると「Return」によってMainProcedureに戻ります。

GoSubの簡単な例

以下のコードでは、GoSubを使用して2つのサブルーチンを呼び出し、処理を移動させる例を示します。

Sub MainProcedure()
    MsgBox "メインプロシージャ開始"
    
    ' SubRoutine1を呼び出す
    GoSub SubRoutine1
    
    MsgBox "SubRoutine1終了後のメイン処理"
    
    ' SubRoutine2を呼び出す
    GoSub SubRoutine2
    
    MsgBox "SubRoutine2終了後のメイン処理"
    Exit Sub

Sub SubRoutine1
    MsgBox "SubRoutine1が実行されました"
    Return

Sub SubRoutine2
    MsgBox "SubRoutine2が実行されました"
    Return
    

この例では、メインプロシージャ内から2回「GoSub」を使用して、別のサブルーチンに処理を移動させています。各サブルーチンの処理が終了すると「Return」によって元の位置に戻ります。

GoSubと戻り値

GoSubを使ったサブルーチンでは、戻り値を返すことができません。戻り値を取得したい場合は、サブルーチンではなく関数を使用する必要があります。以下に、戻り値を求める方法を示します。

Sub MainProcedure()
    Dim result As Integer
    
    ' 戻り値を受け取る
    result = AddNumbers(5, 3)
    
    MsgBox "足し算の結果は: " & result
End Sub

Function AddNumbers(a As Integer, b As Integer) As Integer
    AddNumbers = a + b
End Function
    

この例では、「AddNumbers」関数を使って戻り値を受け取っています。GoSubの場合は戻り値を利用できないため、代わりに関数を使うのが適切です。

GoSubの制限と注意点

GoSubは簡単にサブルーチンを呼び出すことができますが、いくつかの制限や注意点があります。

  • 「GoSub」を使った後、処理を戻すためには必ず「Return」が必要です。
  • 「GoSub」を使用するコードは、長くなると可読性が低くなり、メンテナンスが難しくなることがあります。
  • VBAの最新バージョンでは、「GoSub」は非推奨となっているため、代わりに「Call」や関数呼び出しを使用することが推奨されます。

これらの点を考慮して、GoSubを使う場合はコードの簡潔さや可読性にも配慮しましょう。

【VBA言語】プロシージャ内のサブルーチン呼び出し(GoSub)【初心者向け解説】」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です