PR

【ExcelVBA】ファイルのタイムスタンプ(更新日時)を取得する方法

エクセルVBA-ファイルのタイムスタンプを取得-アイキャッチ ブックの操作

ファイルの更新日時(タイムスタンプ)を取得する方法を説明します。日付・時間のみ取得する方法や、フォルダ内のファイルを一括で取得する方法も紹介していますのでご覧ください。

スポンサーリンク

ファイルのタイムスタンプを取得する方法

フォルダの中にファイルを3つ保存しています。
サンプル用のマクロを実行すると指定したファイルのタイムスタンプを取得してメッセージボックスに表示します。

エクセルVBA-ファイルのタイムスタンプを取得-フォルダの状態

サンプルマクロで実行している内容

① 対象のファイルパスを変数に格納する
② ファイルが存在するか確認(存在しない場合は何もしない)
③ ファイルのタイムスタンプを取得してメッセージボックスに表示

Sub sample1()

Dim FilePath As String

  ’対象のファイルパスを変数にセット
    FilePath = "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルのタイムスタンプを取得\ファイルA.xlsx" '※⓵
    
  ’ファイルが存在する場合
    If Dir(FilePath) <> "" Then '※⓶
    ’ファイルの更新日時をメッセージボックスに表示
    MsgBox FileDateTime(FilePath) '※⓷
    End If
    
End Sub

マクロを実行すると↓のメッセージボックスが表示されます。

エクセルVBA-ファイルのタイムスタンプを取得-ファイルAのタイムスタンプ

デフォルトでは日付+時刻が表示されます。

日付だけ表示したい場合はformat関数で”yyyy/MM/dd”など表示形式を指定します。

Sub sample2()
'日付だけ

Dim FilePath As String

  ’対象のファイルパスを変数にセット
    FilePath = "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルのタイムスタンプを取得\ファイルB.xlsx" 

    ’ファイルが存在する場合
    If Dir(FilePath) <> "" Then
    ’ファイルの更新日付をメッセージボックスに表示
        MsgBox Format(FileDateTime(FilePath), "yyyy/MM/dd")
    End If

End Sub

yyyy/MM/dd形式で日付のみ表示されました。

エクセルVBA-ファイルのタイムスタンプを取得-ファイルAのタイムスタンプ_日付のみ

同様に時間だけ表示させたい場合。(”hh:mm”形式)

指定したファイルが存在しない場合は↓のエラーが表示されてしまうので、タイムスタンプを取得する前にファイルが存在するかを確認して、存在する場合だけ取得するようにしています。

実行時エラー53:ファイルが見つかりません。

スポンサーリンク

フォルダ内のファイルのタイムスタンプを一括取得する方法

次はフォルダ内のファイルを繰り返して、ファイル名とタイムスタンプを取得してシートに書き出す処理を説明します。

フォルダ内にはファイルA~ファイルCの3つのファイルが格納されています。

エクセルVBA-ファイルのタイムスタンプを取得-フォルダの状態

サンプルマクロで実行している内容

① 対象のフォルダパスを変数に格納する
② フォルダ内のファイルを繰り返す
③  ファイル名をA列に書き出す
④  ファイルのタイムスタンプをB列に書き出す
⑤ 書き出す行を1行UPする 

Sub sample3()
'フォルダ内のファイルを繰り返してファイル名とタイムスタンプを取得する

Dim ForderPath As String
Dim TargetRow As Integer
Dim TargetFile As Object
Dim fso As Object

    '対象のフォルダパスを変数に格納する
    ForderPath = "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルのタイムスタンプを取得\" '※⓵
    
    'FileSystemObjectのインスタンスを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    TargetRow = 1
        
    'フォルダ内のファイルをループ
    For Each TargetFile In fso.GetFolder(ForderPath).Files '※⓶
         
        'ファイル名をA列に書き出す
        Cells(TargetRow, 1) = TargetFile.Name '※⓷

        'ファイルのタイムスタンプをB列に書き出す
        Cells(TargetRow, 2) = FileDateTime(TargetFile) '※⓸
        
        '書き出す行を1行UPする
        TargetRow = TargetRow + 1 '※⓹
        
    Next TargetFile

    Set fso = Nothing
    Set TargetFile = Nothing

End Sub

マクロを実行すると↓のようになります。

ファイル名とファイルの更新日時がシートに書き出されました。

エクセルVBA-ファイルのタイムスタンプを取得-フォルダ内のファイルを繰り返し
スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

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