【Excel VBA】作成日から一定時間経過したファイルを削除するプログラム

【Excel VBA】作成日から一定時間経過したファイルを削除するプログラム

2021年11月14日

どうも青瓶です。

今回は作成日から一定期間経過したファイルを削除するプログラムを紹介します。

スポンサーリンク

コード

Sub sample()

    '使用する際はツール→参照設定の「Microsoft Scripting Runtime」にチェックを入れてください。

    Dim ads As String  'ファイルアドレス
    Dim fn  As String  'ファイル名
    Dim n   As Long    '経過日数(今から何日前のファイルを削除するかの日数)

    ads = "C:\Users\ユーザー名\Desktop\sample" & "\"  'アドレスを指定
    fn = "*"                                          'ファイル名・形式を指定
    n = "30"                                          '期間を指定
    
    Call KillFile(ads, fn, n)

End Sub

'作成日から指定期間経過したファイルを削除するプログラム
'---------------------------------------------
Private Sub KillFile(ByVal ads As String, ByVal fn As String, ByVal n As Long)

    Dim fso As FileSystemObject
    Dim fle As String            'ファイル名
    Dim d   As Date              '作成日
    
    Set fso = New FileSystemObject
    
    fle = Dir(ads & fn)

    Do While fle <> ""
    
        'ファイル作成日
        d = DateValue(fso.GetFile(ads & fle).DateCreated)
        
        '作成日が指定日より前のファイルを削除
        If DateAdd("d", -1 * n, Date) > d Then Kill ads & fle
            
        fle = Dir()
    Loop
    
    Set fso = Nothing
    
    MsgBox ads & "に存在する" & vbNewLine & _
           n & "日以上前に作成されたファイルを削除しました。", vbInformation

End Sub

上記のコードをコピペで使用可能です。

プログラム解説

プログラム1:設定値(Sub Sample)

ツール→参照設定の「Microsoft Scripting Runtime」にチェックを入れておく必要があります。

またSub Sampleの各変数にお好みの値を設定してください。

ads:ファイルアドレス
fn :ファイル名
n :ファイル作成日から現在までの経過日数

ファイル名については”*”アスタリスクを使用することで該当フォルダ内に存在する特定のファイル形式を持つファイルのみを削除することが可能になります。

ファイル形式を問わない場合

fn="*"

CSVファイルのみを削除したい場合

fn="*.csv"

Excelファイル(.xlsx)のみを削除したい場合

fn="*.xlsx"

プログラム2:ファイル削除(KillFile)

本プログラムでファイルを削除していきます。

1.まずは 指定したファイルアドレス内に存在している、指定した形式のファイルを取得します。

 fle = Dir(ads & fn)

2.ループ処理です。指定したファイルが無くなるまで処理を続けます。

Do While fle <> ""
  
Loop

3..DateCreate でファイル作成日を取得しています。

d = DateValue(fso.GetFile(ads & fle).DateCreated)

拡張機能

d = DateValue(fso.GetFile(ads & fle).DateLastModified)

.DateCreate の代わりに .DateLastModified を使用することで最終更新日時を参照することができます。

d = DateValue(fso.GetFile(ads & fle).DateLastAccessed)

.DateCreate の代わりに .DateLastAccessed を使用することで最終アクセス日時を参照することができます。

4.現在より”n”日前の日付と、作成日”d”を比較します。

If DateAdd("d", -1 * n, Date) > d Then     

拡張機能

DateAdd関数の値を変更することで比較基準を変更できます。

例えば現在より1か月前を参照したい場合はコード以下のようにします。

DateAdd("m", -1 , Date) > d Then   

他にも時間なら第一引数を””、週なら”ww“と変更することで判別期間を変更することが可能です。

5.killステートメントで対象のファイルを削除します。

Kill ads & fle
    

使用用途

週報や計画表等、時間が経過するにつれ無限に増えていくようなファイルを自動的に削除できます。

また、一度使ったら今後使用することがないけど1か月くらいは他人に聞かれた時の為にデータを残しておきたい場合にも役に立ちますので良ければ使ってみて下さい。