• ベストアンサー

Excelのマクロでファイル情報の取得方法(更新日付情報付)

現在Excelのマクロで 「指定フォルダの中のファイルで指定日より前のファイルを自動削除する」 マクロを作成中なのですが、現在指定ディレクトリ内のファイル情報の取得の部分で困っています。 ・dir() ではファイル名は取れるが(私の調べた限りでは)日付情報が取れない ・shellでdirコマンドを発行しようとすると、ディレクトリがロングファイルネームでひっかかってしまい、そのままではエラーになる。 例【shell("command.com /c dir c:\Documents and Settings > 結果.txt")】 といった状態です。 最悪ロングファイルネームをすべてDOSルールに変換してshellコマンドで発行するテもあるかと思いますが、略時に同じ名前が重ならないか(mydocu~1で良いのかmydocu~2になるのか)等で管理が煩雑になりそうです。 マクロ上でファイル名と最終更新日付を取得できる方法がご存知の方がいらっしゃいましたら教えてください。 尚、指定ディレクトリ名の取得~削除の実行、ログの作成あたりは殆ど出来上がっています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 OS は、9x 系? 2k 系?なのでしょうか?この前もここで書いたばかりですが、Excel2003 + XP SP2 の組み合わせでは、FileSearch オブジェクトが、問題なく使えるようです。 それから、VBAの中にFileDateTime関数が用意されてされていますから、そのまま使えます。 サンプル:設定期日より以下のファイルを格納する Sub DirDateCheckPrc() Dim MyPath As String Dim myFName As String Dim myDirs() As Variant Dim ChkDate As Date Dim i As Long Const ENDLINE As Date = #8/1/2006# '設定期日 MyPath = ThisWorkbook.Path & "\" 'パスセパレータはこちらのキメウチです  myFName = Dir(MyPath & "*.txt")  Do While myFName <> ""   ChkDate = CDate(FileDateTime(MyPath & myFName))   If DateDiff("d", ChkDate, ENDLINE) > 0 Then   ReDim Preserve myDirs(1, i)   myDirs(0, i) = myFName    '日付を格納する必要がなければ、配列変数は必要ないです。そのまま削除(Kill)等の処理してください。   myDirs(1, i) = FileDateTime(MyPath & myFName)   i = i + 1   End If   myFName = Dir()  Loop End Sub

porilin
質問者

お礼

回答ありがとうございました。 No1の方の回答にも書きましたが、一度Wendy02様の回答が見れなくなっていましたが、また見える様になりましたので、改めて御礼申し上げます。 おかげさまで上手く動きました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

最終更新日は以下で取得できます。下記URLもご参考にどうぞ。 Sub Macro() Dim FSO,LastUpdate Set FSO = CreateObject("Scripting.FileSystemObject") 'File情報取得準備 LastUpdate = FSO.GetFile(フォルダパス\ファイル名).DateLastModified End Sub ファイル名は Dim buf As String  buf = Dir(フォルダフルパス & "*")  Do While buf <> ""   buf = Dir() 'bufにファイル名が格納される    '何らかの処理  Loop でロングネームであっても取得できると思います。

参考URL:
http://www.officetanaka.net/excel/vba/filesystemobject/file.htm
porilin
質問者

お礼

ありがとうございました。 大変助かりました。 もう1名ご回答を頂きましたが、削除された様で、見えなくなってしまいましたが、その方にもお礼申し上げます。 zap35様のご回答では何故かロングファイルネームのディレクトリには対応出来ませんでしたが、もしかしたら私の転記ミス等があったかもしれません。 2つ目の回答を頂いた方の書式では読めました。 本当に助かりました。ありがとうございました。 ちなみにOSはWin2000です(コーディングはxpで行っていますが)

関連するQ&A