「エクセルvba ファイルを開く ディレクトリ指定」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
指定したディレクトリ・フォルダー内のファイルをすべて開くExcelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索でしょうか。
「エクセル マクロ ファイルを開く loop」
「同じブック内にあるファイルを開く マクロ」
という検索キーワードも、おそらく同じようなマクロを探していたのだろうと推測しています。
指定フォルダー内のExcelファイルをすべて開くサンプルマクロ
以下のマクロを実行すると「C:\tmp」フォルダーにあるExcelファイルをすべて開くことができます。
Const DIR_PATH = "C:\tmp"
Dim fl_name As String
fl_name = Dir(DIR_PATH & "\*.xls*")
If fl_name = "" Then
MsgBox "Excelファイルがありません。"
Exit Sub
End If
Workbooks.Open Filename:=DIR_PATH & "\" & fl_name
fl_name = Dir
Loop Until fl_name = ""
End Sub
サンプルマクロの解説
Dir関数を使って、定数・DIR_PATHで指定されたフォルダー「C:\tmp」内の、拡張子に「xls」という文字列が含まれるファイルの、ファイル名を取得して変数・fl_nameに格納します。
fl_name = Dir(DIR_PATH & "\*.xls*")
Dir関数は、引数に指定された条件に該当するファイルが存在しない場合には、空白文字列を返してきますから、定数・DIR_PATHで指定されたフォルダーにExcelファイルが存在していないときには、メッセージを表示してマクロを終了しています。
If fl_name = "" Then
MsgBox "Excelファイルがありません。"
Exit Sub
Dir関数を、引数指定なしで呼ぶと、直前に呼ばれたときと同じ条件で次のファイルを探して、みつかればみつかったファイル名を返します。
空白が返されたとき変数・fl_nameが空白文字列になったときは、該当するすべてのファイルを探し終わったということになります。
このことを利用して、
Do
Loop Until fl_name = ""
という条件でDo~Loopループを回して、ループの中でExcelファイルを開く処理を行っています。
Do~Loopループの中で、WorkbooksコレクションオブジェクトのOpenメソッドを使ってファイルを開き、
Do
Workbooks.Open Filename:=DIR_PATH & "\" & fl_name
引数を指定せずに再度Dir関数を呼んで、同じ条件で次のファイルを探し、
fl_name = Dir
探し終わったら(Dir関数が空白文字列を返してきたら)ループを抜け、マクロを終了しています。
Loop Until fl_name = ""
最終更新日時:2019-04-17 14:48
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 指定フォルダー内の全Excelファイルを開くマクロ