この記事では、VBAを使って指定フォルダ内にある全ファイルの最終更新日からの経過日数を一括取得する方法をご紹介していきます。
具体的にはエクセルシートに以下のような情報(ファイル名と経過日数)を一括入力するVBAサンプルコードご紹介していきます。
「最終更新日から2週間以上経っているファイルを全部削除したい。」
こんな状況のときに役立つはずです。
※今回は経過日数を取得するところまでです。経過日数に応じたファイル削除まで実行するプログラムは次回ご紹介しようとおもいます。
それではさっそくやっていきましょう。
最終更新日を取得するファイル一覧
今回は以下のファイル達の最終更新日(画像でいう日付時刻)から本日までの経過日数を一括取得してみようと思います。
後々の説明をわかりやすくするために各ファイルの名前にも日付を入れています。
(すべてについている【_1】に意味はないので気にしないでください。)
また、今回の作業を実施しているのは、以下のとおり2021/06/07となっています。
それでは実際の作業に入っていきましょう。
最終更新日からの経過日数を一括取得するVBAコード
早速ですが、サンプルコードのご紹介です。
以下が冒頭にご紹介した情報を一括取得するVBAサンプルコードです。
※5行目、6行目はあなたの状況に応じて書き換えましょう。
Sub date_diff_file()
Dim base_path As String, extension As String, file_name As String
Dim file_date As Date
Dim Diff_day As Integer
base_path = "C:\Users\Desktop\test"
extension = "JPG"
file_name = Dir(base_path & "\*" & extension, vbNormal)
i = 0
Do Until file_name = ""
file_date = FileDateTime(base_path & "\" & file_name)
Diff_day = DateDiff("d", file_date, Now())
Cells(2 + i, 1) = file_name
Cells(2 + i, 2) = Diff_day
file_name = Dir()
i = i + 1
Loop
End Sub
※今回はデスクトップ直下のtestというフォルダ内にある拡張子が.JPGのファイルを対象に、最終更新日からの経過日数を一覧化するという処理を行っています。
もし、拡張子を指定せず、全ファイルを探索したい場合は、
extension = “.JPG” の部分を
extension = “” と変更すればOKです。
サンプルコードの解説
次に先ほどのコードの要点を簡単に解説しておきましょう。
最終更新日から本日までの経過日数を取得するためには、まずは各ファイルの最終更新日を取得しなければ話になりません。
ですが、最終更新日を取得するうえでは、各ファイルの名前を指定しなければ取得することができません。
つまり、まずは各ファイルのファイル名が必要になってきますので、まずはその取得から始めます。
〇STEP1:ファイル名の取得
フォルダの中にあるファイル名を取得する場合は、Dir関数というものを用います。
Dir関数の使い方は以下の記事で詳細解説していますので、興味があればご覧ください。
【VBA】Dir関数の特性を詳細解説!ファイル確認や一括処理に超便利!
〇STEP2:ファイルの最終更新日を取得
Dir関数でファイル名の取得ができたら、次はそのファイルの最終更新日を取得します。
ファイルの最終更新日を取得するにはFileDateTime関数を使用します。
=FileDateTime(ファイルのフルパス)
〇STEP3:ファイルの最終更新日からの経過日数を取得
FileDateTime関数で最終更新日を取得したら、次は本日からの経過日数を取得しましょう。
そのためにはDateDiff関数を使用します。
=DateDiff(“d”, 日付1, 日付2)
この日付1、日付2には、先ほどのFileDateTime関数で取得した変数や、現在の時刻を取得できるNow()を指定して使います。
また、”d”の部分はdateの頭文字を意味しており、日数を取得する際に指定するものです。
この部分を”w”にすればweek、つまり何週間たったかを取得でき、”m”にすればmonthで何か月たったかを取得できます。
さきほどのサンプルコードでは、これら3つのステップで取得されたファイル名とそのファイルの最終更新日から本日までの経過日数をエクセルシートに順番に記入しています。
サンプルコードの実行結果
最後にサンプルコードの実行結果を見てみましょう。
以下がさきほどのコードの実行結果です。
(1行目は自分で記入しておく必要があります。)
(このコードを実行しているのは、さきほども紹介したとおり2021/06/07です。)
一番下のファイルは06/02に作成されたものですので、本日(6/7)からさかのぼって、
6/6, 6/5, 6/4, 6/3, 6/2 で5日前ということになりますね。
その他のファイルも問題なく最終更新日からの経過日数が取得できていると思います。
参考までにカレンダーを載せておきます。
気になる方はファイル名と照らし合わせて数えてみましょう。
(青枠が本日です。)
なお、この経過日数は純粋に日付を数えていくものです。
作成した時刻までは考慮されておりませんので、ご注意ください。
おわりに
というわけで今回は指定フォルダ内にあるファイルの最終更新日からの経過日数を一括取得する方法をご紹介しました。
更新されてない古いファイルを一括削除する際などに、ぜひご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント