CELLNETS Excel開発の専門会社

VBAのThisWorkbookとは?ActiveWorkbookとの違いとプロの活用法【VBA入門】

VBAのThisWorkbookモジュールに基本情報と起動時の処理を書いた例

Excelマクロ開発を量産してゆくと、「どのツールは誰が担当して、どんな概要で・・・」
このようなことが起きるのは望ましくありませんので、基本情報や、伝達事項、備忘メモを残しましょう。

みなさん、こんにちは。セルネッツ竹本です。
今回は、Thisworkbookの活用提案をしたいと思います。

結論から言うと、ThisWorkbookとは「そのマクロを書いたブック自身」のことです。
VBAの画面にあるThisWorkbookモジュールには、ブックを開いたときの処理や、ツールの基本情報を書くのがおすすめです。

この記事では、次の内容がわかります。

  • ThisWorkbookの意味と、ActiveWorkbookとの違い
  • ThisWorkbookモジュールの場所と、標準モジュールとの使い分け
  • プロがThisWorkbookに書いている内容(基本情報のメモと起動時の処理)

属人化したマクロの引き継ぎ

誰が作ったか分からないExcelマクロ、増え続けていませんか?

  • 部署内にツールが量産され、担当者も目的も分からなくなった
  • 作った人の異動・退職で、不具合が出ても誰も直せない
  • 起動するたびに手作業の準備が必要で、使い方が人によって違う

そのお悩み、既存マクロの解析と引き継ぎで解決できます。Excel専門のシステム開発会社『セルネッツ』なら、前任者が作ったマクロを読み解き、改修・整理できます。起動時の準備処理の自動化や、概要・作成者などの情報整備にも対応します。使い続けられるツールへと立て直します。

\Excel専門特化 × 低価格 × スピード対応/

マクロの引き継ぎ・改修を相談する

全国対応・お見積もり無料

ThisWorkbookとは?「マクロを書いたブック自身」を指す

ThisWorkbookとは、いま実行しているマクロのコードが書かれているブックのことです。
VBAでは、次の2つの意味で使われます。

  • オブジェクトとしてのThisWorkbook:コードの中で「このブック」を指す書き方(例:ThisWorkbook.Path)
  • ThisWorkbookモジュール:ブックを開く・閉じるといった、ブック全体の出来事に合わせた処理を書く場所

仕様の詳細は、Microsoft Learn「Application.ThisWorkbook プロパティ」で確認できます。

ThisWorkbookとActiveWorkbookの違い

ThisWorkbookは常に「コードを書いたブック」、ActiveWorkbookは「いま前面に出ているブック」を指します。

比べる点ThisWorkbookActiveWorkbook
指すブックマクロのコードが書かれているブックいまアクティブ(前面)のブック
操作による変化変わらない別のブックを開くと変わる
アドインから使うとアドインのブック自身アドインを呼び出したブック
向いている場面ツール自身のシートや保存先を扱うユーザーが開いているブックを加工する

別のブックを開いて処理するマクロで、ツール自身のシートをActiveWorkbookで指定すると、開いた側のブックを書き換えてしまうことがあります。
ツール自身を指すときはThisWorkbookと書くのが安全です。
アドインでの使い方は、Excelアドインの活用例とファイルの格納先で紹介しています。

ThisWorkbookモジュールはどこにある?開き方

ThisWorkbookモジュールは、VBAの編集画面(VBE)のプロジェクトエクスプローラーにあります。

  1. Excelで Alt + F11 キーを押して、VBEを開く
  2. 左側のプロジェクトエクスプローラーで「VBAProject(ブック名)」→「Microsoft Excel Objects」を開く
  3. 「ThisWorkbook」をダブルクリックする

プロジェクトエクスプローラーが表示されていないときは、VBEのメニューの「表示」から表示できます。
ThisWorkbookモジュールは、どのブックにも最初から1つだけあり、削除できません。

ThisWorkbookモジュールと標準モジュールの違い

ブック全体の出来事(イベント)に合わせた処理はThisWorkbook、それ以外の処理は標準モジュールに書くのが基本です。

モジュール書く内容例
ThisWorkbookモジュールブックのイベントで動く処理開いたとき(Workbook_Open)、閉じる前(Workbook_BeforeClose)、保存する前(Workbook_BeforeSave)
標準モジュールボタンなどから呼び出す、通常の処理集計、転記、ファイルの取り込み

ThisWorkbookに処理をすべて書き込むと、どこに何があるか分かりにくくなります。
ThisWorkbookには「きっかけ」だけを書き、中身の処理は標準モジュールから呼び出す形にすると整理しやすくなります。

プロはThisWorkbookに何を書いている?①基本情報・改修履歴のメモ

プログラム開発という作業は、システムが納品され他の開発プロジェクトが進行すると、仕様や概要は徐々に忘れ去ってゆくもの。
進行中の案件に集中してゆくことになるので、自身で作ったプログラムも時間が経過すれば、「何でこんなことしたんだっけ?」といった記憶をたどるシーンに必ず遭遇するもの。
概要をはじめ、作成者、更新者など、基本情報を簡潔に記載しておくと振り返りにもなります。

たとえば、ThisWorkbookモジュールの先頭に、次のようなコメントを書いておきます。

‘==============================================

‘ ツール名 : 売上集計ツール

‘ 概要     : 各支店のCSVを取り込み、月次の売上表を作成する

‘ 作成者   : 〇〇(作成日 yyyy/mm/dd)

‘ 更新履歴 : yyyy/mm/dd △△ 取り込む支店を追加

‘==============================================

Thisworkbookモジュールは、必ず存在するのと、目に付く場所にあるので、ここに集約したまでですが、システム開発では、改修の履歴も管理する必要があるため、備忘メモを書くエリアとして活用することもできます。
改修依頼をいただいた際に、仕様を思い出しながらの作業をしないためにも、是非。

②Workbook_Open()に起動時の処理を書く

ツール起動時にやっておくべきことがあれば、このModuleに処理を書きます。

Workbook_Openは、ブックを開いたときに自動で実行されるイベントです。
ThisWorkbookモジュールを開き、コードウィンドウ上部の左のリストで「Workbook」を選ぶと、Workbook_Openの枠が自動で入ります。
以下のO_00は、シートに付けたオブジェクト名です(シート名ではありません)。

(1つ目)

Application.ScreenUpdating = False

解説:画面の更新を無効にする
起動時の処理の間、画面のちらつきを抑えて速く動かすためです。処理の最後にTrueに戻します。

(2つ目)

‘[シート保護]でもVBAから書込み可能に

O_00.Protect UserInterfaceOnly:=True

解説:シート保護On/Off繰り返しは避ける
画面からの変更は保護したまま、マクロからの書き込みだけを許可します。
この設定はブックを開き直すと保たれないため、開くたびにWorkbook_Openで設定し直すのが定番です(Microsoft Learn「Worksheet.Protect メソッド」)。

(3つ目)

‘[ホームポジション]

Application.Goto O_00.Range(“A1”), True

解説:ユーザビリティの基本、カーソル位置はホームへ

3つをまとめると、ThisWorkbookモジュールには次のように書きます。

Private Sub Workbook_Open()

    Application.ScreenUpdating = False

    O_00.Protect UserInterfaceOnly:=True

    Application.Goto O_00.Range(“A1”), True

    Application.ScreenUpdating = True

End Sub

シートをオブジェクト名で指定すると、シート名が変わってもコードが動きます。
詳しくは、ワークシートをID管理して可読性を上げる方法をご覧ください。

起動時の自動処理の例

たとえば、「下準備」と考えると意外に出てくるもの。

  • 前提条件の判定チェック(必要な関連ファイルの存在チェック)
  • 外部ファイルからのデータ取り込み
  • ツール起動したため、ログを書き込み
  • 関連ファイル自動バックアップ(リカバリ考慮)
  • 利用権限(管理者/一般)の判定チェック

他にも、ツール内のシートのクリアや入力チェックをすることも多いです。
シートを毎回同じ状態から始める考え方は、リセット処理でバグの発生率を下げる方法で解説しています。

よく使うThisWorkbookのプロパティ・メソッド

オブジェクトとしてのThisWorkbookは、ツール自身の保存先やファイル名を取るときによく使います。

書き方得られるもの・動き
ThisWorkbook.Pathブックが保存されているフォルダのパス(末尾に\は付かない)
ThisWorkbook.Nameブックのファイル名
ThisWorkbook.FullNameフォルダのパスとファイル名をつなげたもの
ThisWorkbook.Worksheets(“設定”)ツール自身の「設定」シート
ThisWorkbook.Saveツール自身を上書き保存する

たとえば、ツールと同じフォルダにあるCSVを開くときは、次のように書きます。

Workbooks.Open ThisWorkbook.Path & “\data.csv”  ‘ツールと同じフォルダのCSVを開く

OneDrive上のブックでは、ThisWorkbook.Pathが「https://」で始まるURLになることがあります。
対策は、OneDrive上で取得したパスがhttpに変わってしまう対策で紹介しています。

ThisWorkbookを使うときの注意点

  • マクロが無効だとWorkbook_Openは動かない:起動時の処理に頼りすぎず、必要ならボタンからも実行できるようにしておく
  • 保存していないブックはPathが空になる:新規ブックでThisWorkbook.Pathを使うと、パスが取れない
  • 起動時の処理を重くしすぎない:開くたびに待たされると、使う人の負担になる
  • ActiveWorkbookと取り違えない:別のブックを開く処理では、どちらのブックを指しているかを必ず確認する

よくある質問

Q. ThisWorkbookとActiveWorkbookは、どちらを使えばよいですか?

A. ツール自身のシートや保存先を扱うならThisWorkbookです。
ユーザーが開いている別のブックを加工するときだけ、ActiveWorkbookや、開いたブックを入れた変数を使います。

Q. マクロはThisWorkbookに書けばよいのですか?

A. 通常の処理は標準モジュールに書きます。
ThisWorkbookには、ブックを開いたとき・閉じる前など、ブックのイベントで動かす処理を書きます。

Q. Workbook_Openが動かないのはなぜですか?

A. よくある原因は、マクロが無効になっていることと、標準モジュールなどThisWorkbook以外に書いていることです。
Workbook_OpenはThisWorkbookモジュールに書く必要があります。

まとめ

  • ThisWorkbookは「マクロを書いたブック自身」を指し、操作しても変わらない
  • ActiveWorkbookは「いま前面にあるブック」で、別のブックを開くと変わる
  • ThisWorkbookモジュールには、ツールの基本情報・改修履歴のメモと、Workbook_Openの起動時処理を書く

保守しやすいマクロの作り方は、コード設計のコツを覚えて設計力をスキルアップする方法でも紹介しています。

本記事が、品質向上において、ご参考お役立てになれば幸いです。

相見積もり歓迎

引き継ぎ・改修の費用は、ツールを拝見してお見積もりします

  • 基本料金50,000円+要件定義・設計・開発の時間単価(税別)
  • 新たに作り直す場合、簡易システムは30万円〜(税別)です
  • 使われていないツールは、無理に改修をおすすめしません

セルネッツでは相見積もりを歓迎しています。改修で済むか、作り直した方がよいかも、正直にご説明します。Excelで続けるのが不向きな業務なら、その旨もお伝えします。システム導入相談やセカンド・オピニオンも、60分無料で承ります。

\Excel専門特化 × 低価格 × スピード対応/

無料見積もり・お問い合わせはこちら

全国対応・お見積もり無料

関連記事

Excelシステム開発

Excelを複数人で共同編集できるExcel for the webとは?Excelオンラインの共有手順と業務改善事例

更新日:2026年10月9日

Excelシステム開発

システム開発の依頼ガイド|費用相場・流れ・会社の選び方と「作りすぎない」判断軸

更新日:2026年9月24日

Excelシステム開発

予約システムの開発依頼にかかる費用相場|小規模店舗は100万円以下で作れる

更新日:2026年9月24日

Excelシステム開発

CRMシステム開発の外注費用は?依頼先の選び方と100万円以下に抑える考え方

更新日:2026年9月24日

Excelシステム開発

勤怠管理システム開発の外注費用相場|100万円以下で作る方法とプラン別料金【2026年版】

更新日:2026年9月24日

Excelシステム開発

SFAシステム開発の依頼相場は?高額SaaSに払い続ける前に知るべき「安く作る」現実解

更新日:2026年9月24日

Excelシステム開発

業務システム開発の依頼はいくら?費用相場と「100万円以下」で頼む方法

更新日:2026年9月24日

Excelシステム開発

受発注システム開発の費用相場は?外注料金の内訳と安く抑える方法を解説

更新日:2026年9月24日

Excelシステム開発

販売管理はエクセルで十分?売上管理表・発注管理表の作り方と「限界」の乗り越え方

更新日:2026年10月9日

newsite