特定のフォルダ内の、指定された日以降に更新されたExcelファイル・ブックだけを開きたい、といったニーズが実務で出ることがあります。
そんなExcelマクロを作ってみました。
FileSystemObjectを利用しない、Dir関数を使ったマクロです。
指定日以降に更新されたブックを開くサンプルマクロ
以下のマクロを実行すると、特定のフォルダ内の、指定された日付以降に更新されたExcelが開かれます。
指定された日付以降に更新されたファイルが存在しない場合は、
「○○以降に以降に更新されたExcelファイルはありません。」
というメッセージが表示されます。
' ファイルのあるフォルダと日付
Const DIR_PATH = "C:\TEST"
Const DATE_REF = #3/31/2013#
Dim file_name As String
Dim file_path As String
Dim cnt As Long
Dim msg As String
file_name = Dir(DIR_PATH & "\*.xls*")
If file_name = "" Then
msg = "指定されたフォルダにExcelファイルがありません。"
MsgBox msg
Exit Sub
End If
cnt = 0
Do Until file_name = ""
file_path = DIR_PATH & "\" & file_name
If FileDateTime(file_path) >= DATE_REF Then
Workbooks.Open file_path
cnt = cnt + 1
End If
file_name = Dir
Loop
msg = DATE_REF _
& "以降に更新されたExcelファイルはありません。"
Else
msg = cnt _
& "個のExcelファイルを開きました。"
End If
MsgBox msg
End Sub
フォルダと更新日は、定数で指定するようにしています。
Const DIR_PATH = "C:\TEST"
Const DATE_REF = #3/31/2013#
サンプルマクロの解説
Dir関数を使って、定数・DIR_PATHで指定されたフォルダ内で拡張子に「.xls」の含まれるファイルの、ファイル名を変数・file_nameに格納します。
file_name = Dir(DIR_PATH & "\*.xls*")
Dirは、該当するファイルが存在しないときに空白の文字列を返すので、ファイルが存在しないときにはメッセ-ジを表示して、マクロを終了します。
If file_name = "" Then
msg = "指定されたフォルダにExcelファイルがありません。"
MsgBox msg
Exit Sub
End If
Dir関数は、引数を指定せずに呼ばれると、同じフォルダの次のファイル名を返してきます。ですから、空白文字列が返されるまで(該当するファイル名をすべて取得するまで)ループを回して、
Do Until file_name = ""
見つかったファイルの更新日時をFileDateTime関数で取得して、定数・DATE_REFで指定された日よりも新しければ、
If FileDateTime(file_path) >= DATE_REF Then
そのExcelファイルを開き、
Workbooks.Open file_path
引数を指定せずにDir関数を呼んで、次のファイルを探します。
file_name = Dir
Loop
ループ処理の中でファイルをいくつ開いたかをカウントして、「0」だったときは該当するファイルが存在しないので、
If cnt = 0 Then
「○○以降に更新されたExcelファイルはありません。」というメッセージが表示されるように変数・msgに文字列を格納し、
msg = DATE_REF _
& "以降に更新されたExcelファイルはありません。"
該当するファイルが存在したときは「○個のExcelファイルを開きました。」という文字列を変数・msgに格納し、
Else
msg = cnt _
& "個のExcelファイルを開きました。"
最後にそのメッセージを表示しています。
MsgBox msg
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 指定日以降に更新されたExcelファイルを開くマクロ