サイトについて      連絡先   検索

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

はじめに

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

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

名前やインデックスや実行中などを指定できます。

  • 目次
    • ブックを取得する
    • すべてのブックを取得する

ブックを取得する

ブック名で取得

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)

開いた順番にインデックスが増えていきますが、わかりづらいためブック名で取得するのをオススメします。

アクティブなブックを取得

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


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

アクティブなブックとは、手前に表示されているブックです。

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

マクロを実行しているブックを取得するには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
  • 目次
    • ブックを取得する
    • すべてのブックを取得する