ThisWorkBookとActiveWorkBookの違い

VBAでブックを参照する際に、「現在利用中のブック」を参照したいことがあります。そのときに、ThisWorkBookとActiveWorkBookのどちらを使えばよいか分からないことがあります。

簡単に整理すると、ThisWorkBookは、VBAコードが記述されているブックのことを指します。ActiveWorkBookは、現在表示されているブックのことを指します。

どちらもWorkBookオブジェクトです。

ThisWorkBook

上記の通り、ThisWorkBookは、VBAコードが記述されているブックのことを指します。

マクロを保存するブックには大きく3種類あります。Excelマクロ有効ブック(*.xlsm、*.xls)と、アドイン(*.xlam、*.xla)と、個人用マクロブック(personal.xlsb)です。これら3種類にもThisWorkBookは含まれており、ThisWorkBookが指すものは、それぞれのブックやアドインになります。用途としては今処理中のコードのブックはどれか、ということを取得したい場合に利用します。

補足ですが、個人用マクロブック(personal.xlsb)はタスクバーには表示されませんが内部的には別ブックとして開かれています。あまり気にする必要はありませんが、例えばExcel起動時にBook1という新規ページが開いた状態でタスクバーに1つしか無いように見えていても、個人用マクロブックがあれば2つのブックが開いていることになります。

ActiveWorkBook

上記の通り、ActiveWorkBookは、現在表示されているブックのことを指します。例えば、Book1.xlsx、Book2.xlsx、Book3.xlsxの3ファイルを開いている場合に、Book3.xlsxを現在表示しているとします。その場合のActiveWorkBookはBook3.xlsxになります。

なお、ブックを開いていない場合やサブウィンドウが開いている場合はNothingになります。

通常はActiveWorkBookを使う

セルの参照などを行うようなExcelに閉じた処理を行う場合には、ActiveWorkBookを推奨します。その理由は、処理を行う対象のExcelブックと、マクロが保存されているブックが同じとは限らないためです。個人用マクロブックを利用している場合などがそうです。

VBAコードを保存しているブックがどれかを知りたい場合のみThisWorkBookを利用し、それ以外は全てActiveWorkBookを利用すると覚えておいても支障ありません。

使用例

VBAコードが書いてあるブック名が先に表示され、次に現在表示されているブック名が表示されます。