Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Workbooks

Excel VBA VBA
スポンサーリンク

Workbooks は「今 Excel で開いている“ブックの集合”」

まずイメージからいきます。
Excel では、1つ1つのファイルが Workbook(ブック)です。
そして Workbooks は「今 Excel で開いているすべてのブックをまとめた“グループ(コレクション)”」 です。

  • 1冊のブック → Workbook
  • 開いているブック全部 → Workbooks

という関係です。

VBA では、

Application.Workbooks
VB

と書くことで、「Excel 全体が今抱えているブックたち」にアクセスできます。


特定のブックを名前で指定して触る

Workbooks(“名前”) でそのブックを取り出す

一番よく使うのが、「ファイル名でブックを指定する」書き方です。

Sub SampleWorkbooksByName()

    Dim wb As Workbook

    Set wb = Workbooks("売上集計.xlsx")

    wb.Activate
    MsgBox "今アクティブにしたブックは " & wb.Name & " です。"

End Sub
VB

ここでのポイントは、

  • Workbooks("売上集計.xlsx") で、その名前のブックを1つ取り出している
  • それを Workbook 型の変数 wbSet で入れている

という流れです。

「すでに開いている特定のブックに対して処理したい」ときは、
この Workbooks("ファイル名") パターンが基本になります。

※拡張子(.xlsx など)まで含めた名前で指定するのが安全です。


新しいブックを作る・既存ブックを開く

Workbooks.Add で新しいブックを作る

新しいブックを1冊作りたいときは、Add を使います。

Sub SampleWorkbooksAdd()

    Dim wb As Workbook

    Set wb = Workbooks.Add   ' 新しいブックを1冊作る

    wb.Worksheets(1).Range("A1").Value = "新規ブックです"

End Sub
VB

Workbooks.Add の戻り値は「作られたばかりの Workbook」なので、
それを変数 wb に受け取っておくと、その後の操作が書きやすくなります。

Workbooks.Open で既存ファイルを開く

保存済みのファイルを開きたいときは、Open を使います。

Sub SampleWorkbooksOpen()

    Dim wb As Workbook

    Set wb = Workbooks.Open("C:\Data\売上集計.xlsx")

    MsgBox "開いたブックは " & wb.Name & " です。"

End Sub
VB

ここで重要なのは、

  • Workbooks.Open(フルパス) でファイルを開く
  • 開いたブックが Workbook として戻ってくるので、変数に受け取る

ということです。

「開く」と「その後どう触るか」をセットで考えると、コードがスッキリします。


開いているブックをまとめて扱う(For Each)

すべてのブックに対して同じ処理をする

Workbooks は「コレクション(集合)」なので、
For Each で1冊ずつ取り出して処理できます。

Sub SampleWorkbooksLoop()

    Dim wb As Workbook

    For Each wb In Workbooks
        Debug.Print wb.Name
    Next wb

End Sub
VB

これは「今開いているすべてのブック名をイミディエイトウィンドウに出す」例です。

応用として、
「開いているすべてのブックを保存する」
「特定の名前以外のブックを全部閉じる」
といった処理も書けるようになります。


ActiveWorkbook との違いをはっきりさせる

Workbooks は“全部”、ActiveWorkbook は“今選ばれている1冊”

ここで一度整理しておきます。

Workbooks        ' 開いているブック全部(コレクション)
ActiveWorkbook   ' 今アクティブなブック1冊
VB

例えば、

Sub SampleActiveVsWorkbooks()

    Dim wb As Workbook

    Set wb = ActiveWorkbook
    MsgBox "今アクティブなブック: " & wb.Name

    MsgBox "開いているブックの数: " & Workbooks.Count

End Sub
VB

Workbooks.Count は「開いているブックの数」です。
「全部の中のどれか1つが ActiveWorkbook」という関係になっています。

  • 「特定の名前のブック」 → Workbooks("名前")
  • 「今ユーザーが触っているブック」 → ActiveWorkbook
  • 「全部まとめて」 → Workbooks を For Each

という使い分けを意識すると、迷いにくくなります。


Workbooks を使うときに意識してほしい重要ポイント

「開いている前提」か「これから開くのか」をはっきりさせる

Workbooks("名前") を使うときは、
そのブックが「すでに開いている」ことが前提です。
開いていないとエラーになります。

一方、Workbooks.Open は「まだ開いていないファイルを開く」ためのものです。

  • すでに開いている → Workbooks("名前")
  • これから開く → Workbooks.Open("パス")

この前提を自分の中でハッキリさせてから書くと、エラーに悩まされにくくなります。

変数に入れてから触ると、コードが読みやすく・安全になる

Workbooks("売上集計.xlsx").Worksheets("集計").Range("A1")...
のように、1行で全部書くこともできますが、
超初心者のうちは、いったん Workbook 変数に入れてから触る方が分かりやすいです。

Dim wb As Workbook
Set wb = Workbooks("売上集計.xlsx")

wb.Worksheets("集計").Range("A1").Value = "OK"
VB

こうしておくと、

  • どのブックを触っているのかが明確
  • 同じブックを何度も使うときに書きやすい

というメリットがあります。


まとめ:Workbooks は「開いているブックたちへの入口」

Workbooks の本質は、

「今 Excel で開いているすべてのブックにアクセスするための“集合オブジェクト”」

です。

押さえておきたいポイントをコンパクトにまとめると、

Workbooks は「開いているブック全部」、その1冊が Workbook
Workbooks("名前") で特定のブックを取り出せる(開いている前提)
Workbooks.Add で新規ブック、Workbooks.Open で既存ファイルを開ける
For Each で「開いているブック全部」に対して処理できる
ActiveWorkbook は「今アクティブな1冊」、Workbooks は「全部」

VBAVBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました