Excel VBA ThisWorkbookとは?基本から応用まで使い方と注意点を解説

 

Excel VBA ThisWorkbookについて、基本的な使い方から応用テクニック、注意点までを詳しく解説します。具体的な使い方や、注意点やサンプルコードを紹介します。

 

特に、インターネット上の古いVBAコードでは、ActiveWorkbook を前提とした書き方が多く、複数のブックを開いた状態で誤動作する原因になることがあります。

 

ThisWorkbookを正しく使うことで、こうしたトラブルを未然に防ぐことができます。

 

Excel VBA ThisWorkbookの利用

以下のようなシーンで利用されます。

・マクロがどのブックから実行されても、確実にマクロが含まれるブックを対象に操作する場合に使います。

・複数のブックを開いている場合に、間違えて別のブックに操作を行わないようにするために利用します。

 

Excel VBA 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 を使うのが安全です。

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
命令は分かる。でも作れない。その差は「作り方」です。
実務では、ここを知った瞬間にマクロが組み立てられるようになります。

実務マクロ設計ミニガイド(無料)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Excel VBA ThisWorkbookのサンプルコード

ThisWorkbookを使ってシートに値を入力する例
Option Explicit

Sub ExampleThisWorkbook()
    ' ThisWorkbookを使って特定のシートに値を入力する
    ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "Hello, World!"
End Sub

 

複数のブックが開いている場合でも、確実にマクロが含まれるブックを操作する例

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 を使う意識が重要です。

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
すでに気づいている人もいるかもしれません。
VBAができる人は、特別なコードを書いているわけではなく、
作る順番が違うだけです。まとめたガイドを公開しています。
実務マクロ設計ミニガイド(無料)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━