カテゴリ: Excel VBA 更新日: 2026/01/19

ThisWorkbookに書くべき処理とは?VBAプロジェクトの正しい構成方法

ThisWorkbookに書くべき処理・書くべきでない処理の判断基準
ThisWorkbookに書くべき処理・書くべきでない処理の判断基準

先生と生徒の会話形式で理解しよう

生徒

「VBAの編集画面にある『ThisWorkbook』って、結局何のためにあるんですか?全部ここに書いちゃダメなんですか?」

先生

「実はそこ、ブック全体を見守る『管理人室』のような場所なんです。何でも書いてしまうと、後でどこに何があるか分からなくなってしまいますよ。」

生徒

「管理人室……。じゃあ、ここに書くべきことと、書かないほうがいいことの区別はどうつければいいんですか?」

先生

「判断の基準は『ブック全体の出来事に関わるかどうか』です。初心者の方でも迷わないように、具体的な例を出しながら解説しますね!」

1. ThisWorkbookの正体とは?

1. ThisWorkbookの正体とは?
1. ThisWorkbookの正体とは?

Excel VBAの世界では、開いているExcelファイル自体のことを「ブック(Workbook)」と呼びます。そして、そのファイル全体に関連する命令を書き込むための特別な場所が「ThisWorkbook」です。

プログラミングを全くやったことがない方でも、学校やマンションをイメージしてみてください。各教室(シート)で起きる細かいことではなく、「学校全体が開門したとき(ファイルを開いたとき)」や「学校が閉まるとき(ファイルを閉じるとき)」などの、全体行事を管理するのがこの場所の役割です。プロジェクト構成を考える上で、この場所の役割を理解することは、整理整頓された使いやすいマクロを作るための第一歩となります。

2. ここに書くべき処理:ブックの「イベント」

2. ここに書くべき処理:ブックの「イベント」
2. ここに書くべき処理:ブックの「イベント」

ThisWorkbookに書くべき処理の代表格は、Excelファイルに対して「何かが起きたとき」に自動で動き出すプログラムです。これを専門用語でイベント処理と呼びます。例えば、以下のような処理はThisWorkbookに書くのが正解です。

  • Workbook_Open:ファイルを開いた瞬間に実行する(挨拶を出す、初期設定をするなど)
  • Workbook_BeforeClose:ファイルを閉じる直前に実行する(入力漏れがないかチェックするなど)
  • Workbook_BeforeSave:上書き保存する前に実行する(特定のセルの値をリセットするなど)

これらは「ファイル全体」に対する動作なので、特定のシート専用の場所に書くのではなく、ファイル全体の管理人であるThisWorkbookに任せるのがルールです。


' ファイルを開いたときに自動で挨拶を表示する例
Private Sub Workbook_Open()
    MsgBox "ファイルが開かれました。最新のデータを入力してください。"
End Sub

3. 逆に書いてはいけない処理:一般的な「マクロ」

3. 逆に書いてはいけない処理:一般的な「マクロ」
3. 逆に書いてはいけない処理:一般的な「マクロ」

初心者の方がよくやってしまうのが、「計算をする」「データをコピーする」といった一般的なマクロをすべてThisWorkbookに書いてしまうことです。これは避けるべきです。

なぜなら、ThisWorkbookに書いたマクロは、Excelの「マクロ一覧(マクロの実行ボタン)」から見えにくかったり、他のプログラムから呼び出すのが少し面倒だったりするからです。計算や表の加工といった「作業」に関する命令は、標準モジュールという「作業部屋」に書くのがベストプラクティスです。管理人室でバリバリと事務作業(計算)をするのではなく、作業は作業部屋に任せましょう。

4. 判断基準は「きっかけ」がどこにあるか

4. 判断基準は「きっかけ」がどこにあるか
4. 判断基準は「きっかけ」がどこにあるか

「ThisWorkbookに書くべきか迷ったとき」の最強の判断基準は、そのプログラムが動き出す「きっかけ」は何か?を考えることです。以下の表を参考にしてみてください。

きっかけ(イベント) 書くべき場所
ファイルを開く・閉じる・保存する ThisWorkbook
特定のシートのセルが変更された シートモジュール
実行ボタンを押して動かしたい 標準モジュール
複数の場所で何度も使う計算式 標準モジュール

5. 実践!保存前に自動で日付を入力する

5. 実践!保存前に自動で日付を入力する
5. 実践!保存前に自動で日付を入力する

実際の活用例を見てみましょう。ファイルを保存するたびに、特定のセルに「最終更新日」を自動で入れたい場合があります。これは「保存」というブック全体のイベントなので、ThisWorkbookに記述します。


' 保存する直前に自動的に動くプログラム
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Sheet1のA1セルに今日の日付を入れる
    Sheets("Sheet1").Range("A1").Value = Date
    MsgBox "更新日を記録して保存します。"
End Sub

このように、「ユーザーが意識しなくても勝手に動いてほしい全体ルール」を組み込むのがThisWorkbookの正しい使い方です。パソコンを触ったことがない方でも、このように自動化の仕組みを作ると、「VBAってすごい!」と実感できるはずです。

6. ThisWorkbookをスッキリ保つテクニック

6. ThisWorkbookをスッキリ保つテクニック
6. ThisWorkbookをスッキリ保つテクニック

ThisWorkbookにはイベント処理を書きますが、中身が何百行も長くなってしまうのは「整理整頓」の観点から良くありません。管理人室が書類で溢れかえっているようなものです。そこで、「呼び出し」だけを書くというテクニックを使いましょう。

実際の複雑な中身は標準モジュールに書いておき、ThisWorkbookからは「あっちの作業をやって!」と命令を飛ばすだけにするのです。これを専門用語でCall(コール)と呼びます。


' ThisWorkbookにはこれだけ書く
Private Sub Workbook_Open()
    ' 標準モジュールにある「初期設定」というマクロを呼ぶ
    Call InitialSetting
End Sub

こうすることで、ThisWorkbookは常にスッキリとした状態に保たれ、プロジェクト全体の保守性(メンテナンスのしやすさ)が劇的に向上します。

7. 共有マクロや設定値の管理について

7. 共有マクロや設定値の管理について
7. 共有マクロや設定値の管理について

もし、あなたの作ったマクロを他の人も使う場合、ThisWorkbookに色々な設定を詰め込みすぎると、他の人が混乱してしまいます。例えば、「保存先フォルダのアドレス」や「消費税率」といった設定値をThisWorkbookの中にバラバラに書くのはやめましょう。

そういった「設定情報」は、専用の定数や、あるいはExcelのシート上に「設定シート」を作って管理するのが一般的です。ThisWorkbookはあくまで「タイミングを計る場所」に徹し、データ管理や複雑なロジックは別の場所に持たせる。この役割分担こそが、初心者が中級者へステップアップするための重要な考え方です。

8. エラーを未然に防ぐための注意点

8. エラーを未然に防ぐための注意点
8. エラーを未然に防ぐための注意点

ThisWorkbookに処理を書く際、特に注意が必要なのが「対象のシートが存在しない」などのエラーです。例えば、ファイルを開いたときに Sheet1 を操作するマクロを書いたとします。もし誰かがそのシートの名前を変えてしまっていたら、プログラムは止まってしまいます。

こうしたエラーを防ぐために、ThisWorkbookに書く処理はできるだけ「どの環境でも動く安全なもの」にするか、エラーが起きても大丈夫なように対策を施す必要があります。最初は難しいかもしれませんが、「ここは大事な場所だから、壊れにくい命令を書こう」という意識を持つだけで、プロジェクトの質は大きく変わります。

9. 実行結果のイメージを確認しよう

9. 実行結果のイメージを確認しよう
9. 実行結果のイメージを確認しよう

実際にThisWorkbookを正しく活用すると、Excelの使い勝手はどう変わるでしょうか。実行結果のイメージをまとめてみました。


【正しく設定できている場合】
1. ファイルをダブルクリックして開く
2. 「おはようございます!」と挨拶が出る(Workbook_Open)
3. データを入力して保存ボタンを押す
4. 「管理台帳に記録しました」と表示される(Workbook_BeforeSave)

【悪い例(標準モジュールに書くべきことをここに書いた場合)】
1. 「マクロ実行」画面を開く
2. マクロ名が出てこない、またはたくさんありすぎてどれが全体用か不明
3. ファイルを閉じるときにエラーが出てExcelが固まる

いかがでしょうか。正しい場所にコードを書くだけで、Excelがまるで生きているかのようにスムーズに動作してくれます。まずは「Workbook_Open」を使って、自分に挨拶するだけの簡単なマクロから試してみてください。それだけで、あなたはもう立派なVBA開発者の仲間入りです!

カテゴリの一覧へ
新着記事
New1
Excel VBA
VBAモジュールを安全にエクスポート・インポートする方法と注意点
New2
Office Scripts
Office Scriptsの基本!Excel自動化で学ぶ関数の分割と再利用で読みやすさを向上させる方法
New3
Excel VBA
ThisWorkbookに書くべき処理とは?VBAプロジェクトの正しい構成方法
New4
Office Scripts
Office Scriptsの基本!Excel自動化で理解する非同期処理(async/await)は本当に必要?
人気記事
No.1
Java&Spring記事人気No1
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
No.2
Java&Spring記事人気No2
Excel VBA
VBAクラスモジュールとは?メリットと基本的な使い方を初心者向けに解説
No.3
Java&Spring記事人気No3
Excel VBA
ThisWorkbookに書くべき処理とは?VBAプロジェクトの正しい構成方法
No.4
Java&Spring記事人気No4
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
No.5
Java&Spring記事人気No5
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方
No.6
Java&Spring記事人気No6
Office Scripts
Office Scriptsの基本!Excel自動化で学ぶ関数の分割と再利用で読みやすさを向上させる方法
No.7
Java&Spring記事人気No7
Office Scripts
Office Scriptsの基本!Excel自動化で理解する非同期処理(async/await)は本当に必要?
No.8
Java&Spring記事人気No8
Office Scripts
Office Scriptsの基本!Excel自動化で使う関数とコードの書き方