モジュールにコードを書く【コピペVBA】

icocho

Excel VBAを使ってみたいけど、コードはどこに書いたらいいの?
モジュールってなに?

標準モジュールにコードを書く

標準モジュールとは

標準モジュールは、ブック全体で共通して使用する汎用的なマクロ(Subプロシージャ)や関数(Functionプロシージャ)を記述するための、最も基本的な場所です。

ここに書いたマクロは、ショートカットキーやリボンに配置したボタンに登録して使います。

手順

  1. Excelで Alt+ F11キーを押し、VBEを開きます。
  2. 画面左側の「プロジェクトエクスプローラー」で、マクロを追加したいブック名を探します。
  3. ブック名を右クリックし、メニューから 挿入標準モジュール を選択します。
  4. プロジェクトエクスプローラーに標準モジュールというフォルダと、その中にModule1が作成されます。
  5. 画面右側に表示された白いエリア(コードウィンドウ)に、以下のようにコードを記述します。これで、マクロの実行ができるようになります。
Sub MyMacro()
    MsgBox "これは標準モジュールに書かれたマクロです。"
End Sub

シートモジュールにコードを書く方法

シートモジュールとは

シートモジュールは、特定のワークシートに関連する処理を記述する場所です。

特に、そのシート上で「セルが選択された」「値が変更された」といったイベント(出来事)をきっかけに自動実行される「イベントプロシージャ」を記述するのに使われます。

手順

  1. Excelで Alt+ F11 キーを押し、VBEを開きます。
  2. 画面左側の「プロジェクトエクスプローラー」で、Microsoft Excel Objectsフォルダ内にある、目的のシート(例: Sheet1 (シート名))をダブルクリックします。
  3. 画面右側に、そのシート専用のコードウィンドウが表示されます。
  4. コードウィンドウの上部にある2つのドロップダウンリストを使います。
    • 左側のドロップダウン(オブジェクトボックス)で Worksheet を選択します。
    • 右側のドロップダウン(プロシージャボックス)で、実行のきっかけとしたいイベント名(例:SelectionChange)を選択します。
  5. コードの枠組みが自動で挿入されるので、Private SubEnd Sub の間に処理を記述します。
    このサンプルコードは、ユーザーが該当シートのA1セルを選択するたびに自動で実行されます。
'A1セルが選択されたらメッセージを表示する例
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        MsgBox "A1セルが選択されました。"
    End If
End Sub 

2つのモジュールの違い

標準モジュールシートモジュール
*汎用的な処理をまとめる場所*特定のシートでのイベント処理を記述する場所

簡単に言うと、「能動的に呼び出して使う」のが標準モジュール、「何かが起きたら自動で動く」のがシートモジュールです。

コードの呼び出し方

標準モジュール

マクロ実行ダイアログ(Alt+F8)の一覧に表示され、手動で実行できます。
ボタンやショートカットキーに登録できます。

シートモジュール

基本的にマクロ実行ダイアログの一覧には表示されません。
シート上でのイベント発生時に自動で呼び出されます。

使い分けのポイント(まとめ)

  • このマクロは「ボタン」で動かしたい → 標準モジュール
  • この処理は「セルを編集したら」自動で動いてほしい → シートモジュール
  • 複数のシートから呼び出して使いたい便利機能 → 標準モジュール
  • 「Sheet1」だけで使う特別な処理 → シートモジュール

このように、マクロを「いつ」「どのように」動かしたいかに応じて、適切なモジュールを選択することが重要です😊