更新日:、 作成日:

VBA ファイルの作成日時や更新日時を取得または変更する

はじめに

Excel VBA マクロでファイルの作成日時や更新日時を取得または変更する方法を紹介します。

DateLastModified プロパティなどを使って、作成日時や更新日時の取得または設定ができます。

フォルダ内のファイル一覧から指定したファイルのみ設定できます。

フォルダの日時を取得または設定するには「フォルダの日時の取得または変更」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

ファイルの日時を取得または変更する

ファイルの日時を取得

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim f As File
Set f = fso.GetFile("D:\Tips.txt") ' ファイルを取得

Dim d As Date

d = f.DateCreated      ' 作成日時を取得
Debug.Print(d)

d = f.DateLastModified ' 更新日時を取得
Debug.Print(d)

d = f.DateLastAccessed ' アクセス日時を取得
Debug.Print(d)

' 後始末
Set fso = Nothing

fso.GetFile 関数で指定したパスの File オブジェクトを取得します。ファイルが存在しないときはエラーが発生します。

f.DateCreated プロパティから、作成日時を取得できます。

f.DateLastModified プロパティから、更新日時を取得できます。

f.DateLastAccessed プロパティから、アクセス日時を取得できます。

ファイルに日時を設定

FileSystemObject や VBA の標準機能には日時を変更する機能はありません。代わりに Shell.Application を使って更新日時の変更ができます。それ以外の作成日時などは変更できません。

Dim shell As Object
Set shell = CreateObject("Shell.Application") ' インスタンス化

Dim fl As Object
Set fl = shell.Namespace("D:\")  ' フォルダを取得

Dim f As Object
Set f = fl.ParseName("Tips.txt") ' フォルダ内のファイルを取得

f.ModifyDate = Now ' 更新日時を変更

' 後始末
Set f = Nothing
Set fl = Nothing
Set shell = Nothing

CreateObject 関数で Shell.Application オブジェクトのインスタンスを生成します。

shell.Namespace 関数でフォルダを取得できます。

fl.ParseName 関数でそのフォルダ内にあるファイルを取得できます。

f.ModifyDate プロパティから、更新日時を取得または変更できます。

フォルダ内のファイルの日時を取得

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fl As Folder
Set fl = fso.GetFolder("D:\") ' フォルダを取得

Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
    If f.Name = "Tips.txt" Then  ' 日時を取得したいファイル
        Dim d As Date
        d = f.DateCreated      ' 作成日時を取得
        d = f.DateLastModified ' 更新日時を取得
        d = f.DateLastAccessed ' アクセス日時を取得
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数で、指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。

f.DateCreatedf.DateLastModifiedf.DateLastAccessed プロパティから、日時の取得ができます。