VBA ワークブックを取得する

はじめに

Excel VBA マクロでワークブックを指定して取得する方法を紹介します。

Workbooks プロパティから、ブックを取得できます。

ActiveWorkbook オブジェクトから、アクティブブックを取得できます。

ThisWorkbook オブジェクトから、VBA を実行しているブックを取得できます。

取得できるのは開いているブックです。開いていないブックは先に開く必要があります。

ブック名を取得するには「ワークブック名やパスを取得する」をご覧ください。
  • 目次
    • ブックを取得する
    • すべてのブックを取得する

ブックを取得する

ブック名で取得

Workbooks の引数に名前を指定すると、そのブックを取得できます。大文字と小文字は区別しません。

ブック名「Book1.xlsx」のブックを取得するには Workbooks("Book1.xlsx") を入力します。

Dim wb As Workbook
Set wb = Workbooks("Book1.xlsx") ' ブック「Book1.xlsx」を取得
Debug.Print(wb.Name)

' ブック「Book1.xlsx」のシート「sheet1」を取得
Dim ws As Worksheet
Set ws = Workbooks("Book1.xlsx").Worksheets("Sheet1") 
Debug.Print(ws.Name)

指定したブックが存在しないときは「エラー 9 インデックスが有効範囲にありません。」が発生します。

ブックの存在チェックをするには「ワークブックの存在確認をする」をご覧ください。

インデックスで取得

Workbooks の引数にインデックスを指定すると、そのブックを取得できます。

1 番目のブックを取得するには Workbooks(1) を入力します。

Dim wb As Workbook
Set wb = Workbooks(1) ' 1 番目のブックを取得
Set wb = Workbooks(2) ' 2 番目のブックを取得
Debug.Print(wb.Name)

インデックスは、ブックを開いた順番に 1 からスタートします。

アクティブブックを取得

アクティブブックを取得するには ActiveWorkbook を入力します。

Dim wb As Workbook
Set wb = ActiveWorkbook
Debug.Print(wb.Name)

アクティブブックとは、開いているすべてのブックの中で一番手前に表示されているブックです。

ブックをアクティブにするには「ワークブックをアクティブにする」をご覧ください。

VBA を実行しているブックを取得

VBA を実行しているブックを取得するには ThisWorkbook を入力します。

Dim wb As Workbook
Set wb = ThisWorkbook
Debug.Print(wb.Name)

すべてのブックを取得する

Workbooks はコレクションになっているので、これをループしてすべてのブックを取得できます。

' For Each でループする
Dim wb As Workbook
For Each wb In Workbooks
    Debug.Print(wb.Name)
Next

' For Next でループする
Dim i As Integer
For i = 1 To Workbooks.Count
    Set wb = Workbooks(i)
    Debug.Print(wb.Name)
Next