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型の変数wbにSetで入れている
という流れです。
「すでに開いている特定のブックに対して処理したい」ときは、
この 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
VBWorkbooks.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
VBWorkbooks.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冊が WorkbookWorkbooks("名前") で特定のブックを取り出せる(開いている前提)Workbooks.Add で新規ブック、Workbooks.Open で既存ファイルを開ける
For Each で「開いているブック全部」に対して処理できる
ActiveWorkbook は「今アクティブな1冊」、Workbooks は「全部」
