【Excelマクロ】マクロの呼び出し

未分類

VBAでマクロを呼び出す方法:「Call」を活用する

VBAでは、1つのマクロ(プロシージャ)を他のマクロ内で呼び出して使うことができます。

これにより、同じ処理を何度も書かずに済み、コードがスッキリする というメリットがあります。

例えば、印刷のマクロ を作成しておけば、他のマクロから簡単に印刷処理を呼び出す ことができます。

・A4で全てのデータが収まるようにした印刷のマクロ
・A4で2ページになるように設定した印刷のマクロ
・A4で横の設定にした印刷のマクロ など

1. マクロを呼び出す方法

VBAでは、マクロの呼び出しに 「Call」ステートメント を使用します。

Sub メインのマクロ()

    Call 使いたいマクロ名

End Sub

「Call」を記述するだけ で、他のマクロを実行できます。

また、「Call」は省略することも可能です(使いたいマクロ名 だけでも動作します)。

ただ、省略してしまうとなんの作業をしているか分かりづらくなるので、Callは残したままにすることをお勧めします。

2. 実際のコード例(印刷マクロの呼び出し)

例えば、「請求書を作成するマクロ」を実行した後に 印刷処理 を自動で実行したい場合、次のように記述します。

Sub 請求書発行()

    '請求書作成マクロの処理
    
    Call 印刷  ' 印刷マクロを呼び出す

End Sub

' 印刷マクロ
Sub 印刷()

    ActiveSheet.PrintOut  ' アクティブシートを印刷

End Sub

内容

  • 請求書発行 マクロの中で Call 印刷 を記述すると、請求書発行 マクロが終わった後に、印刷 マクロが実行される。
  • 印刷処理を別のマクロとして定義することで、他のマクロでも簡単に使い回せる。

今回は非常にシンプルな印刷マクロにしていますが、ここには印刷に関する詳細な設定をすることで、この内容の時は「このパターン」、違う内容に時は「このパターン」などパターンを分けることができます。

3. 複数の動作をまとめて処理する

マクロの呼び出しは、特定の手順を繰り返し使いたいとき に非常に便利です。

例えば、ファイルを閉じる前に次の動作を毎回行いたいとします。

  • パスワードを設定する
  • 指定範囲を保護する
  • 特定のシートを非表示にする

この場合、「ファイルを閉じる前の処理」を1つのマクロとして作成 し、各マクロから呼び出すことで、何度も同じコードを書く必要がなくなります。

Sub Aの処理()
    ' Aの処理・・・
  
    Call ファイルを閉じる準備
End Sub

Sub Bの処理()
    ' Bの処理・・・

    Call ファイルを閉じる準備
End Sub

Sub Cの処理()
    ' Cの処理・・・

    Call ファイルを閉じる準備
End Sub

' ファイルを閉じる前の共通処理
Sub ファイルを閉じる準備()
    ' パスワードを設定
    ' 指定範囲を保護
    ' 特定のシートを非表示
    ' ここで必要な処理をまとめる
End Sub

ポイント

  • 「ファイルを閉じる準備」マクロを1つ作成し、他のマクロから呼び出す ことで、同じ処理を何度も書かずに済む。
  • コードが整理され、修正が必要になった際も1か所直せばOK!

まとめ

VBAの 「Call」ステートメント を使うことで、他のマクロを簡単に呼び出すことができます。

方法説明
Call 使いたいマクロ名他のマクロを実行する
複数のマクロから共通処理を呼び出す同じコードを何度も書かずに済む

マクロの呼び出しを活用するメリット ・コードがシンプルになり、読みやすくなる
同じ処理を何度も書く必要がなくなる
・修正が必要なときも、1つのマクロを変更するだけで済む

同じ処理を繰り返し書きそうになったら、「別マクロにして呼び出す」ことを検討しましょう!

ただし、Callを乱用するとあちらこちらにコードがあることになり、コードを行ったり来たりしないといけなくなってしまうので、繰り返し使うものに限定して、使用することをお勧めします。

コメント