はじめに
現在開いているブックを参照したり、指定したりするには、
ThisWorkbook や ActiveWorkbook
を使う事ができます。開いているブックが1つの場合、両者は同じですが複数のブックを開いた場合には意味合いが変わってきます。
複数のブックからあるブックを指定したい場合は、
Workbooks(1) のように1からの数値で指定できます。
Workbooksは現在Excel上で開いているブックの数を配列(コレクション)で保持しています。
Workbooks.Count で開いているブックの総数を取得できます。
順番はブックを開いた順なので、Workbooks(Workbooks.Count) とすれば、最後に開いたブックを指定できます。
現在のブック
ブックが1つだけ開いている場合、ThisWorkbook や ActiveWorkbook は同じ扱いになります。
ただ、Excelでは、新しく開いたブックがアクティブになりますので、最初に開いたブックのプログラム上で別のブックを開くと、そのブックが ActiveWorkbook に移行します。
ThisWorkbook については現在プログラムを実行しているブックを指すことになります。
現在のブックと言っても、ブックが複数ある場合は、現在のアクティブブックなブックと、現在プログラムを実行しているブックでは意味合いが異なってきます。
ThisWorkbook と ActiveWorkbook の違い
複数のブックを開いている場合、最後に開いたブックがアクティブ(ActiveWorkbook)になります。
また、開いているあるブックをユーザーが選択してアクティブにするか、Activateメソッドを実行した場合、そのブックがアクティブに移行します。
'Book2.xlsx を ActiveWorkbook にします。
Workbooks("Book2.xlsx").Activate
ThisWorkbook — 現在プログラムを実行しているブック
ActiveWorkbook — 現在選択されているブック
尚、プログラム開発中にVBEで別ブックのプログラムを指定して実行する場合、ThisWorkbook はそのブックを指すことになります。
ブックの指定
ExcelVBAでは、現在開いているブックを Workbooks という配列(コレクション)に保持しています。
ブックを指定するには、ブック番号で指定する方法とブック名で指定する方法があります。
ブック番号で指定する場合、開いているブック数は、Workbooks.Count とすれば取得できます。
最初のブックは、Workbooks(1) で、Workbooks(Workbooks.Count) とすれば、最後に開いたブックを指定できます。
また、Workbooks(“Book2.xlsx”)のように、ブック名でブックを指定する事もできます。
ブック名はファイル名になります。拡張子は無くても指定できる場合がありますが、拡張子を付けるようにした方が良いでしょう。
ブック名を取得するには以下のようにします。
'アクティブなブックの名前を取得する
Debug.Print ActiveWorkbook.Name
Workbooks(1) — 最初のブック
Workbooks(Workbooks.Count) — 最後のブック
Workbooks(“Book2.xlsx”) — ブック名で指定
尚、数値やブック名でブックを指定しても、アクティブになったわけではないので ActiveWorkbook として使う事は出来ないので注意してください。
以下のブログラムは現在開いているブックのブック名とアクティブブックを表示します。
Sub testBooks()
Dim wb As Workbook
Dim i As Long
For i = 1 To Workbooks.Count
Debug.Print i & ": " & Workbooks(i).Name
Next i
Debug.Print "ActiveWorkbook = " & ActiveWorkbook.Name
End Sub
まとめ
ThisWorkbook と ActiveWorkbook はブックを1つ開いている状態であれば同じブックを指しています。
ただし、ユーザーの操作や、プログラムで別ブックを開いた場合、 ActiveWorkbook は変化します。
このような Excel の挙動を理解するようにしましょう。
また、現在のブックは、Workbooks が保持しており、ブックの数は Workbooks.Count で取得できます。
最初のブックは、Workbooks(1) になります。
ブックをアクティブにしたい場合は、Activate メソッドを使います。
余談ですが、シートの指定は Select メソッドでしたが、ブックの場合は、Activate メソッドを使いますので注意してください。