【VBA】複数のブックを順に開く

複数のExcelブックを順番に開くには、配列やループを利用する方法が便利です。
ここでは、固定のファイル名を順に開く方法と、フォルダ内の全ブックを開く方法を紹介します。


1. 複数パスを配列にして順に開く

Sub OpenMultipleBooks()
Dim files As Variant
Dim i As Long

'開きたいブックのフルパスを配列で指定
files = Array( _
"C:\Users\Public\Sample1.xlsx", _
"C:\Users\Public\Sample2.xlsx", _
"C:\Users\Public\Sample3.xlsx")

'配列内のパスを順に開く
For i = LBound(files) To UBound(files)
Workbooks.Open files(i)
Next i
End Sub

解説:

  • files = Array(...) … 開きたいファイルのパスを配列に格納
  • For i = LBound(files) To UBound(files) … 配列の先頭から末尾までループ
  • Workbooks.Open files(i) … 配列内のパスを1つずつ開く

2. フォルダ内のすべてのブックを開く

指定したフォルダ内にあるExcelファイルを一括で開く場合、Dir 関数を使う方法が便利です。

Sub OpenAllBooksInFolder()
Dim folderPath As String
Dim fileName As String

'フォルダパス(最後に \ を忘れない)
folderPath = "C:\Users\Public\Reports\"

'最初のExcelファイルを取得
fileName = Dir(folderPath & "*.xlsx")

'ファイルが見つからなくなるまでループ
Do While fileName <> ""
Workbooks.Open folderPath & fileName
fileName = Dir() '次のファイル名を取得
Loop
End Sub

解説:

  • Dir(folderPath & "*.xlsx") … 指定フォルダ内の .xlsx ファイルを順番に取得
    (引数が同じ条件の場合2回目以降は、Dir()で次のファイル名を取得できる)
  • Do While fileName <> "" … ファイルがなくなるまでループ
  • Workbooks.Open folderPath & fileName … 各ブックを開く

3. 開いたブックを変数に格納して処理する

開いたブックをすぐに編集する場合は、変数を使うと便利です。

Sub OpenBooksAndWrite()
Dim files As Variant
Dim wb As Workbook
Dim i As Long

files = Array( _
"C:\Users\Public\Sample1.xlsx", _
"C:\Users\Public\Sample2.xlsx")

For i = LBound(files) To UBound(files)
Set wb = Workbooks.Open(files(i))
wb.Sheets(1).Range("A1").Value = "データ更新"
Next i
End Sub

解説:

  • Set wb = Workbooks.Open(files(i)) … 開いたブックを wb 変数に保持
  • wb.Sheets(1).Range("A1").Value … 各ブックの1シート目にデータを書き込み

4. まとめ

  • 複数のブックを開くには配列や Dir 関数を活用
  • フォルダ内の全ブックを処理するなら Dir を使うのが効率的
  • 開いたブックを変数で管理すると、後続の処理がやりやすい

コメント

タイトルとURLをコピーしました