Excel VBAのコードはどのモジュールに書く?

こんにちは。コウノ工房のコウノです。
かれこれ、20年近くVBAでコーディングしています。
ExcelでVBAをコーディングするときに使うモジュールについて解説します。「Sheet1」「ThisWorkbook」「標準モジュール」と、似たような場所がいくつもあって混乱しますよね。
この記事では、それぞれのモジュールの役割と、プロも実践している正しい使い分けのルールを、初心者向けにわかりやすく解説します。
VBAのコードを書ける場所は3つ
標準モジュール
- 役割: みんなの場所。汎用的な処理を書く。
- 特徴: どのシートからでも呼び出せる。
「標準モジュール」に書いたマクロは、Excelブック内のどこからでもアクセスできる「公共の道具」になります。ボタンを押して実行するマクロや、複雑な計算処理はここに書きます。
シートモジュール (Sheet1, Sheet2...)
- 役割: そのシート専用のルールを書く。
- 特徴: 基本的にそのシートの中でしか機能しない。
「Sheet1」のモジュールは、Sheet1専用の部屋です。「この部屋に入ったら電気をつける」「この部屋の家具(セル)を動かしたら音を鳴らす」といった、その場所限定のルールを書くのに適しています。
ブックモジュール (ThisWorkbook)
- 役割: ファイル全体のルールを書く。
- 特徴: ファイルを開いた時や閉じる時の処理を書く。
Excelファイル(ブック)全体に関わるルール、例えば「ファイルを開いた瞬間に挨拶する」「保存する前にチェックする」といった処理を書きます。
標準モジュールに書けば間違いない
最初に結論を言ってしまうと、初心者のうちは、すべてのコードを「標準モジュール」に書いてください。これでやりたいことの9割は実現できます。
なぜシートモジュールではダメなのか?
シートモジュール(Sheet1など)をダブルクリックして書いたコードは、「Sheet1専用」になってしまいます。そのため、汎用性がなくなり、予期せぬエラーの原因になります。
正しい始め方
コードを書くときは、必ず以下の手順で「標準モジュール」を用意しましょう。
- VBEのメニューから [挿入] をクリック
- [標準モジュール] を選択
- 新しくできた「Module1」にコードを書く
これだけで、多くのトラブルを未然に防げます。
ここまでは、標準モジュールに書いた方がいい理由を説明してきましたが、「えっ、じゃあ他のは何のためにあるの?」と思った方のために、それぞれの役割を解説しましょう。
シートモジュール・ブックモジュールはイベントがキッカケで動作する処理
「全部標準モジュールじゃダメなの?」と思うかもしれませんが、分かれていることには大きなメリットがあります。それは「特定の操作(イベント)による起動」と「持ち運び(移植性)」です。
特定の操作とは、「セルに値を入力したとき」、「ブックを開いたとき」などを指します。何かのイベントがあったときに「勝手に動いてほしい(自動実行)」という特殊な事情がある時だけ、シートやブックモジュールを使います。
持ち運びとは、例えば、便利な機能付きの「請求書シート」を作ったとします。その機能をシートモジュールに書いておけば、そのシートを「移動またはコピー」で別のブックに持っていくだけで、マクロの機能も一緒に付いてきます。
「このシートさえコピーすれば使えるよ」という配布用ツールを作るとき、この独立した構造が非常に役に立つのです。
まとめ
- 基本: まずは「標準モジュール」に書く癖をつける。
- 注意: シートモジュールに普通のコードを書かないように注意!
- 応用: 「自動で動かしたい」ときだけ、シート・ブックモジュールを使う。
この使い分けを意識するだけで、VBAの理解度はグッと深まります。まずは「挿入 > 標準モジュール」、ここから始めてみましょう!

