あぷつう.com

弱ニートだから楽しいことだけやっていく

*

ExcelVBAのThisworkbookとAcitveWorkBookの違い

   

業務上でExcelでちょこちょこ自動化しているため、最近気づいたExcelVBAのThisworkbookとAcitveWorkbookの違いについて少し解説していきます。

ThisworkbookとAcitveWorkBookの違い

ThisworkbookとAcitveWorkBookの違いは、使う側と使われる側の違いです。
ちょっと何言っているかわからないですよね?

もう少し詳しく説明しましょう。

  • Thisworkbook:マクロを使用されるファイル(使われる側)
  • AcitveWorkBook:現在表示されているファイル(使う側)

以上になります。
もちろん、これだけだとよくわからないのでさらに具体例も含めて詳しく解説していきます。

ThisworkbookとAcitveWorkBookの具体例

基本一つのファイルでしかマクロを使用しない場合は、ThisworkbookとAcitveWorkBookは同じものにしかなりません。

以上の実行の結果は、どちらもこのように同じになります。

Excel01

なので、一つのファイルでしかVBAを使用しない場合は、特に気にすることなくどっち使っても問題ないですね。

では、どういったケースでこれは使われるのかというと同じコードを複数のファイルで使用したい場合に使用されます。

さらに、具体例を挙げていきます。

Thisworkbook(使われる側)

新しくファイルを作成して「開発」→「Visual Basic」→「挿入」→「標準モジュール」でコードは以下のようになります。

VBAを入力したらファイル名は「Book1」でファイルの種類を「Excelアドイン」の形式で保存してください。
Excel02

これで使われる側の作成完了です。

AcitveWorkBook(使う側)

新しくファイルを作成「Book2」というファイル名でファイルの種類は「Excelマクロ有効ブック」で保存しておいてください。

「Book2」も先程と同じように、「開発」→「Visual Basic」→「挿入」→「標準モジュール」でコードは以下のようになります。

Application.Run “‘ファイルパス’!マクロ名”で入力してください。

自分の場合は、C:\Users\user\excel\Book1.xlamとなっていますが、人によって「ファイルパス」違ってきますので、「ファイルパス」の確認方法についてご説明します。

先程作ったBook1の「ファイルパス」はwindows保存場所で「パスコピー」をするとコピーできます。
Excel03

マクロ名については、先程作った「Book1」のマクロ名「test」になります。

上記を実行すると「Book1」の「test」マクロが実行されます。

ThisWorkbook.FullNameではこのように表示されます。これが使われる側です
Excel04

ActiveWorkbook.FullNameではこのように表示されます。これが使う側です。
Excel05

つまり、VBAを使われる側がThisWorkbookであって、ActiveWorkbookは使う側であるということがこれでわかる。

なんでこれが必要なの?

一番最初に話しましたが、一つのファイルでVBAを使用する場合は問題ないのですが、複数のファイルでVBAを使用する場合が特に重要です。

特に同じコードを複数ファイルで使用する場合、もしコードに変更があったら、ひとつひとつのファイルを開き、VBAを変更していく作業が必要になります。

これって結構面倒なんですよ。ひとつ変更したらすべて変更できるようにしたいじゃないですか!

ここの例では、使われる側(Book1)のコードを変更してしまえば使う側は変更が必要なくなります。

ただし、使われる側のファイル保存場所を変更したりすると、使う側のコードを変更しなくてはいけないんですけどね。

これによって、使われる側(Book1)で使う側(Book2)のパスを把握できるため、どこのファイルなのか?をすぐに判断することができます。また、使う側(Book2)のコードをいちいちいじらなくて済むため業務効率が上がるというメリットもあります。

 - program ,