VBAのCallでプロシージャを明示的に呼び出す方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Callの概要

プロシージャを明示的に呼び出す VBAの予約語

Call

概要 Call ステートメントは、VBAで別のプロシージャ(SubやFunction)を呼び出す際に使用されます。通常、プロシージャを呼び出す際にCallを省略できますが、Callを明示すると引数を必ず括弧で囲む必要があります。

わかりやすく説明 別のSubやFunctionを実行するための命令。

  • SubやFunctionを明示的に呼び出す。
  • Callを省略できるが、使用すると引数を括弧で囲む必要がある。
  • Excelのマクロ実行時に他のプロシージャを連続して実行する際に便利。

Callの基本的な使い方

Call を使って Sub プロシージャを呼び出す例です。

Sub Greet()
    MsgBox "こんにちは!"
End Sub

Sub TestCall()
    Call Greet ' Callを使ってSubプロシージャを呼び出す
End Sub

解説:

  • Sub Greet(): 「こんにちは!」と表示するマクロ。
  • Call Greet: Call を使って Greet を実行。

Callを省略した場合

Call は省略可能で、次のように記述しても問題ありません。

Sub TestNoCall()
    Greet ' Call を省略しても実行可能
End Sub

解説:

  • VBAでは Call を省略しても Sub を実行できる。
  • 可読性を向上させたい場合や明示的に記述したい場合に Call を使う。

Callを使うときの括弧の扱い

Call を使うと、引数は必ず括弧で囲む必要があります。

Sub ShowMessage(msg As String)
    MsgBox msg
End Sub

Sub TestCallWithArgs()
    Call ShowMessage("Hello!") ' Call を使う場合は括弧が必要
End Sub

解説:

  • Call ShowMessage("Hello!"): Call を使う場合は括弧で引数を囲む。
  • Call を省略するときは、括弧なしで記述できる(例:ShowMessage "Hello!")。

Excel VBAにおけるCallの活用

Excel VBAでは、Callを使って複数のマクロを順番に実行することができます。

Sub FirstMacro()
    MsgBox "最初のマクロ実行"
End Sub

Sub SecondMacro()
    MsgBox "次のマクロ実行"
End Sub

Sub RunAll()
    Call FirstMacro
    Call SecondMacro
End Sub

解説:

  • RunAll を実行すると、FirstMacroSecondMacro の順に実行される。
  • 複数のマクロを順番に実行したい場合に便利。

Application.Runを使ったCallの応用

ExcelのVBAでは、Application.Run を使うことで他のブックのマクロを実行できます。

Sub RunMacroFromAnotherWorkbook()
    Application.Run "別のブック.xlsm!MacroName"
End Sub

解説:

  • Application.Run を使うことで、他のExcelブックのマクロを実行可能。
  • Call は同じモジュール内のプロシージャを実行する際に使用するが、Application.Run は異なるブックのマクロも実行できる。

CallとDoEventsを組み合わせる

VBAで長時間実行する処理の途中で CallDoEvents を組み合わせると、ユーザーの操作を受付可能にできます。

Sub LongProcess()
    Dim i As Long
    For i = 1 To 1000000
        If i Mod 1000 = 0 Then Call DoEvents ' 一定間隔でユーザー操作を許可
    Next i
    MsgBox "処理完了"
End Sub

解説:

  • ループ内で Call DoEvents を実行し、Excelの応答を維持。
  • Call を付けずに DoEvents だけでも動作するが、明示的に Call を使うことで可読性を向上させる。

注意点

  • Call を使うと括弧が必須: Call を使用した場合、引数があるプロシージャの引数は必ず括弧で囲む必要がある。
  • 省略可能: VBA では Call を省略してもプロシージャは実行される。
  • Excelのマクロ実行順を制御できる: Call を使うことで、複数のマクロを順番に実行することができる。

よくある質問

Q: Call を省略するとどのような影響がありますか?
A: ほとんどの場合、省略しても問題ありません。ただし、引数を渡す場合は Call を使うと括弧が必要になります。
Q: Call を使うメリットは何ですか?
A: 明示的にプロシージャを呼び出すことを示すことで、コードの可読性を向上させることができます。
Q: Excelのマクロ実行順を管理するにはどうすればよいですか?
A: Call を使うことで、複数のマクロを順番に実行できます。また、Application.Run を使えば、他のブックのマクロを実行することも可能です。

まとめ

  • Call は VBA で Sub や Function を明示的に呼び出すためのステートメント。
  • 省略可能だが、使用すると引数は括弧で囲む必要がある。
  • Excel VBA では、複数のマクロを順番に実行する際に役立つ。
  • 異なるブックのマクロを実行する場合は、Application.Run を使用する。
  • 長時間処理の途中で Call DoEvents を使うと、Excelの応答を維持できる。