
Excel VBA ThisWorkbookについて、基本的な使い方から応用テクニック、注意点までを詳しく解説します。具体的な使い方や、注意点やサンプルコードを紹介します。
特に、インターネット上の古いVBAコードでは、ActiveWorkbook を前提とした書き方が多く、複数のブックを開いた状態で誤動作する原因になることがあります。
ThisWorkbookを正しく使うことで、こうしたトラブルを未然に防ぐことができます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
命令の意味は分かるけど、何に使うのか分からないと感じている方へ。
30万人が読んだ記事をもとに再構成。
データ分割を題材に、実務の流れの中で理解できる講座です。
↓↓↓↓↓
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Excel VBA ThisWorkbookの予備知識
よくある質問
ThisWorkbook = いま開いている“そのExcelファイルそのもの”
何も変わりません。
普段使っているExcel(売上.xlsx、管理表.xlsxなど)すべて「ブック(ファイル)」です。
VBAの世界でも同じで、Excelファイルを操作します
いまマクロを作成している、Excelファイルのこと。
今操作しているExcelファイルを1つ思い浮かべてください。
たとえば、売上.xlsxのなかに、Sheet1、Sheet2がありますよね。
その全体がThisWorkbookです。
This = この
Workbook = Excelファイル
- Excelは「ファイル(ブック)」と「シート」でできています。
- VBAでも同じ構造。ThisWorkbookはその「ファイル」そのものです。
下記の考えになります。
① マクロ用ファイル(ThisWorkbook)
└ ボタン・設定・マクロ
② データ用ファイル(今まで使っていたExcel)
└ 実際のデータ
- ThisWorkbook(マクロ用)
- マクロコードが入っている
- 操作の中心(司令塔)
- 今までのExcel(データ用)
- 売上データや顧客データなど
ThisWorkbook(マクロ)
↓
データExcelを開く
↓
データを処理する
①設定を書く
・ファイルのパス
・日付
・出力先
②ボタン置き場
・「実行」ボタン
③一時データ
・ 集計途中のデータ
・ 作業用シート
「ThisWorkbookは作業する人、データExcelは作業される対象」
・ ThisWorkbook=マクロ用ファイル
・ データExcel=別ファイル
このような考えで説明しましたが、データExcelでマクロを作成しているケースもあります。
現実はこういうケースのほうが多いかもしれませんね。
データもマクロも同じExcelに存在する。これは、自分で自分を操作するようになっています。
ThisWorkbookは「マクロが入っているExcel」であって、Excelがマクロ専用でもOK、データも入っていてもOK
ということです。
では、どっちが正しいの?と思われるでしょう。
・ ThisWorkbook=マクロ用ファイル、データExcel=別ファイルの分離型は、管理しやすく、再利用でやすい。
・マクロが入っているExcelは、シンプル、初心者向きです。
ThisWorkbook=マクロ専用ファイルではなく、ThisWorkbook=マクロが入っているExcelになります。
「マクロが入っている場所=ThisWorkbook」
・ ThisWorkbookは「特別なファイル」ではない
・ マクロが入っているExcelを指すだけ
・ データがあってもOK
ThisWorkbookに書くコードは「このExcelファイルがどう動くか」を決めるもの。詳しくは、下記の「ThisWorkbookに書くコード」で解説しています。そちらをご確認ください。
ThisWorkbookの場所
- Excelを開く
- キーボードでAlt + F11→「VBE画面」が開きます
左側に下記のように表示します
VBAProject(売上管理.xlsm)←VBAブック
├ Sheet1
├ Sheet2
└ ThisWorkbook
Excel VBA ThisWorkbookの利用
以下のようなシーンで利用されます。
- マクロがどのブックから実行されても、確実にマクロが含まれるブックを対象に操作する場合に使います。
- 複数のブックを開いている場合に、間違えて別のブックに操作を行わないようにするために利用します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
命令の意味は分かるけど、何に使うのか分からないと感じている方へ。
30万人が読んだ記事をもとに再構成。
データ分割を題材に、実務の流れの中で理解できる講座です。
↓↓↓↓↓
▶ 自分で作れるレベルへ(こちらから閲覧できます)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ThisWorkbookの使い方
ThisWorkbookは特別なオブジェクトで、VBAでコードを書く際に直接使うことができます。他のブックを参照する際には、Workbooks("ブック名")のように指定しますが、ThisWorkbookは特定の名前を必要とせずに使えます。
- ThisWorkbookはマクロが含まれるブックを指します。アクティブなブックを指すActiveWorkbookとは異なります。
- 他のブックを操作した後に、ThisWorkbookに戻って操作を行う際は、明示的にThisWorkbookを使います。
| ブック | 説明 |
| ThisWorkbook | VBAコードが属するブック(マクロが記述されているブック)を指す |
| ActiveWorkbook | 現在アクティブなブック(ユーザーが操作中のブック)を指す |
※注意:マクロ実行中に ActiveWorkbook は切り替わることがある
よくある不安定な書き方
ActiveWorkbook.Sheets("Sheet1").Range("A1").Value = "Test"
このコードは、マクロ実行中に別のブックがアクティブになると、意図しないブックを書き換える危険があります。
ThisWorkbookを使った安全な書き方
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "Test"
操作対象を明示することで、複数ブック環境でも安全に動作します。
ThisWorkbook は、Workbook_Open イベント内でもよく使用されます。起動時処理では、ActiveWorkbook が想定外になるケースがあるため、初期処理では ThisWorkbook を使うのが安全です。
ThisWorkbook 2種類のサンプルコード
Option Explicit
Sub ExampleThisWorkbook()
' ThisWorkbookを使って特定のシートに値を入力する
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "Hello, World!"
End Sub
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合った学習スタート地点がわかる無料の選択問題集をご用意しました。(VBAエキスパートベーシック資格試験から抜粋した問題です)
80%ならスタンダード合格レベル、50〜79%はベーシック理解途中、49%以下は基礎理解不足 (※ご安心ください。この問題をされた人の情報は一切残りません。実力のチェックができる問題集で、クリックすぐにスタートではありません。解説内容の下に問題があります)
複数のブックが開いている場合でも、確実にマクロが含まれるブックを操作する例
Option Explicit
Sub ExampleMultipleWorkbooks()
' 他のブックを開いている場合でも、ThisWorkbookを使って操作
Dim otherWorkbook As Workbook
Set otherWorkbook = Workbooks.Open("C:\Users\User\Desktop\OtherWorkbook.xlsx")
' 他のブックに対して操作を行う
otherWorkbook.Sheets("Sheet1").Range("A1").Value = "Data from other workbook"
' ThisWorkbookに戻って操作を行う
ThisWorkbook.Sheets("Sheet1").Range("B1").Value = "Back to ThisWorkbook"
' 他のブックを閉じる
otherWorkbook.Close SaveChanges:=False
End Sub
ThisWorkbookオブジェクトを使うことで、特に複数のブックを扱う場合において、コードの安定性と安全性を高めることができます。初心者にも使いやすいので、ぜひ利用してみてください。
特に、複数のブックを扱うマクロでは、ActiveWorkbook ではなく ThisWorkbook を使う意識が重要です。
ThisWorkbookに書くコード
初心者の人が誤解しやすいThisWorkbookに書くコードについて解説します。
VBE画面左側(プロジェクト エクスプローラ)の左側に見える内容(例)
売上管理.xlsm
├ データ(Sheet1)
├ データ(Sheet2)
└ ThisWorkbook・・・ここに書くコードのことです
標準モジュール
└ Module1
ThisWorkbookに書くコードとは
ThisWorkbookに書くコードは「このExcelファイルがどう動くか」を決めるものです
プロジェクト エクスプローラに表示
- シート
- ThisWorkbook
- 標準モジュール
この3つが表示されていますが、マクロ作成したコードた自分で作成するコードは、標準モジュールになります。場所と役割を整理すると以下になります。
| 場所 | 役割 |
|---|---|
| 標準モジュール | 自分で実行する処理 |
| ThisWorkbook | ファイル全体の動き |
ファイルを開いたときにする処理のコード
Private Sub Workbook_Open()
MsgBox "このファイルが開かれました"
End Sub
これは、Excelを開いた瞬間に動く処理です。
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合った学習スタート地点がわかる無料の選択問題集をご用意しました。(VBAエキスパートベーシック資格試験から抜粋した問題です)
80%ならスタンダード合格レベル、50〜79%はベーシック理解途中、49%以下は基礎理解不足 (※ご安心ください。この問題をされた人の情報は一切残りません。実力のチェックができる問題集で、クリックすぐにスタートではありません。解説内容の下に問題があります)
ファイルを閉じるときのコード
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "閉じます"
End Sub
これは、Excelを閉じる直前に動く処理です。
ThisWorkbookに書いたコードは何をするか
- 開いたら初期設定
- シートを表示
- 初期値をセット
- 保存前チェック
- 入力漏れチェック
- 警告表示
- 閉じるとき後処理
- 一時データ削除
- 保存確認
このコードは標準モジュールに書けるのか
「ファイルの動き」に関するコードは、ThisWorkbookに記載します。
標準モジュールに「ファイルの動き」に関するコードを書くと動きません。
まとめ
初心者の人は混乱しやすいところなので、下記内容で覚えるとすっきりします。
「マクロが入っている場所=ThisWorkbook」
「ThisWorkbookに書くコードは、自動で動く仕組みを書く場所」
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
すでに気づいている人もいるかもしれません。
VBAができる人は、特別なコードを書いているわけではなく、
作る順番が違うだけです。まとめたガイドを公開しています。
▶ 実務マクロ設計ミニガイド(無料)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━