【VBA】ファイルの最終更新日からの経過日数を一括取得する方法!

この記事では、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関数の使い方
=FileDateTime(ファイルのフルパス)

 

〇STEP3:ファイルの最終更新日からの経過日数を取得
FileDateTime関数で最終更新日を取得したら、次は本日からの経過日数を取得しましょう。
そのためにはDateDiff関数を使用します。

〇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日前ということになりますね。

 

その他のファイルも問題なく最終更新日からの経過日数が取得できていると思います。
参考までにカレンダーを載せておきます。

処理結果を確認できるようにするためのカレンダー
気になる方はファイル名と照らし合わせて数えてみましょう。
(青枠が本日です。)

 

なお、この経過日数は純粋に日付を数えていくものです。
作成した時刻までは考慮されておりませんので、ご注意ください。

スポンサーリンク

おわりに

というわけで今回は指定フォルダ内にあるファイルの最終更新日からの経過日数を一括取得する方法をご紹介しました。

 

更新されてない古いファイルを一括削除する際などに、ぜひご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

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