複数の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
を使うのが効率的 - 開いたブックを変数で管理すると、後続の処理がやりやすい
コメント