最新更新エクセルファイルの取得方法と勤怠処理について

このQ&Aのポイント
  • 勤怠処理において、フォルダー内の最新更新エクセルファイルを取得する方法について教えてください。
  • 勤怠記録は各課や係別のフォルダーに月毎にエクセルファイルで保存されています。
  • ユーザーが指定したフォルダー内の全てのファイルの中から、最新の更新日のエクセルファイルを取得し、シート上に表示したいです。
回答を見る
  • ベストアンサー

フォルダー内の最新更新エクセルファイル

勤怠処理を行っています。 記録の方法は、各課や係別にフォルダーがあって、その中に社員が月毎に勤務時間をエクセルファイルで記録しています。 ¥**¥A部¥B課¥C係¥社員A¥12月.xls と言うような感じで構成されています。A部より下層はフォルダーが複数存在します。 この状態で、A部のフォルダーをユーザーが指定すると、下層のフォルダーを全て検索し、最下層の最新更新日の.xlsのフルパスとファイル名を取得して、それをシート上に表示したいのです。 フォルダー内全てのファイルの最終更新日を取得する方法は検索すると見つかります。それをいじって日付を比較して最新日を抜き出せばいいのでしょうが、コマンドの意味が判っていないので上手く行きません。 完全に「教えて君」で申し訳有りませんが、宜しくお願い致します。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

Private dt As Date Private fname As String Sub test() Const Ps As String = "c:¥**¥A部" dt = 0 Call FFS(Ps) Cells(1, 1) = fname End Sub Private Sub FFS(ByVal Ps As String) Dim f With CreateObject("Scripting.FileSystemObject") For Each f In .Getfolder(Ps).Files If f.DateLastModified > dt Then dt = f.DateLastModified fname = f.Path End If Next For Each f In .Getfolder(Ps).SubFolders Call FFS(f.Path) Next End With End Sub 最新だけのファイルのフルパスがA1に表示されるようにしました。 「再帰呼び出し」が理解しづらいと思って「そこそこ難しいロジック」と書いたのですが。 最新日を探す(最大値を探す、最小値を探す同じロジックです) 要するに最初にdt=0として dtより大きい日付がきたらの値をdtにセットしてそのときのファイル名をFnameに入れる。 全てのファイルの処理が終わるとdtに最新日、fnameのその名前が残る。

ae-1sp
質問者

お礼

実際の所コードの意味が分からないところもありますが、パス名を変数で変えていく事により全員の最新ファイルを検索できそうです。 本当にありがとうございました。

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

>フォルダー内全てのファイルの最終更新日を取得する方法は検索すると見つかります それが簡単にできるならそれを提示してもらえばそこから回答へはすぐだと思います。 私にはVBAでの回答で、かつそこそこ難しいロジックしか思いつきません。 それでよければコードを書いてもいいのですが

ae-1sp
質問者

補足

幾つか見つけたのですが、簡潔なのはこれです。 掲示板から拾ったものですが、質問内容から実行できるの思うのですが、どちらもエラーで停止します。 ファイル名の取得ではConst Ps String = "c:\tmp" 時間取得の方は階層Box.Value の箇所です。 時間取得の方はIF Thenを削除すれば動作しますが、ファイル名の方は私には全く分かりません。 これでどうでしょうか? ’ファイル名を取得する方法 Private n As Long Sub test() Dim tbl() Dim i As Long Const Ps String = "c:\tmp" n = 0 Call FFS(Ps, tbl()) For i = 1 To UBound(tbl) MsgBox tbl(i) Next End Sub Private Sub FFS(ByVal Ps As String, ByRef tbl()) Dim f With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(Ps).Files n = n + 1 ReDim Preserve tbl(1 To n) tbl(n) = f.Path '--> f.Name Next For Each f In .GetFolder(Ps).SubFolders Call FFS(f.Path, tbl()) Next End With End Sub ’時間を取得する方法 Function get_folder_path(mes, Optional ByVal opt As Variant = 1) Dim fld As Object Set fld = CreateObject("Shell.Application").BrowseForFolder(0, mes, opt, 0) On Error Resume Next If Not fld Is Nothing Then get_folder_path = fld.items.Item.Path If Err.Number <> 0 Then get_folder_path = False End If Else get_folder_path = False End If End Function Sub test() Dim ファイルパス As Variant Dim tbl() As Variant, i As Long, f As Object ファイルパス = get_folder_path("保存先フォルダを選択して下さい") If TypeName(ファイルパス) <> "Boolean" Then 階層Box.Value = ファイルパス End If With CreateObject("Scripting.FileSystemObject").Getfolder(ファイルパス) ReDim tbl(1 To .Files.Count, 1 To 4) '2と3は他のフィールドで使用の為4に年月日 For Each f In .Files i = i + 1 tbl(i, 1) = f.Name tbl(i, 4) = Format(f.DateLastModified, "yyyy-mm-dd") '時間まで入っるので、時間を削除 Next f End With End Sub

関連するQ&A

  • 二つのフォルダ内を比較して最新に更新できるソフト

    二つのフォルダ内を比較して最新に更新できるソフト 任意の二個のフォルダを選択後、下層も含めて比較してくれて 二つのフォルダを共に最新に更新してくれるソフトはありませんか?

  • サブフォルダを含めた最新のエクセルを取得したいです

    VBA初心者です。 ①サブフォルダを含めた最新更新日のエクセルファイルを取得したいです。 ②そして、最新更新日のエクセルファイルは、そのエクセルが入っていたフォルダの名前に変更し、別フォルダへコピーしたいです。 お手数ですが、ご教授ください。

  • VBA 最新ファイルをコピーし名前変更 Excel

    いつもお世話になっております。 今回やりたいことは、 ●指定フォルダの中にある全てのファイル名、更新日時を取得(自ファイル以外) ●シートに記述 ●最新ファイルをコピー ●コピーしたファイル名称を変更 ※ファイル名の数値部分のみ変更 になります。 例1)C:\TEST C:\TEST\TEST1.xls 更新日時2013/11/11 C:\TEST\TEST2.xls 更新日時2013/11/12 C:\TEST\TEST3.xls 更新日時2013/11/14 ⇒C:\TEST\TEST4.xls を作成 例2)C:\TEST C:\TEST\2013TEST11_11.xls 更新日時2013/11/11 C:\TEST\2013TEST11_17.xls 更新日時2013/11/15 C:\TEST\2013TEST11_19.xls 更新日時2013/11/18 ⇒C:\TEST\2013TEST11_20.xls を作成 例3)C:\TEST C:\TEST\TEST1(2013_11_11).xls 更新日時2013/11/16 C:\TEST\TEST2(2013_11_15).xls 更新日時2013/11/21 C:\TEST\TEST3(2013_12_01).xls 更新日時2013/12/01 ⇒C:\TEST\TEST4(2013_12_11).xls を作成 Inputboxが出てきて、 数値の部分のみ変更ができるというのでも良いのです。 最新ファイルを取得し、コピーして名前を変更がしたいのです。 できれば、ファイル名の法則?に従って数値のみ編集したいと思っています。 やはり、難しいでしょうか? 回答よろしくお願い致します。

  • 指定したフォルダ内の最新ファイルのみをコピー

    WinXP Pro × VB6 指定したフォルダ内で「更新日時」が最新のファイルの名前を取得するにはどのようにすればよいでしょうか? ファイル名がランダムのため、困っています。

  • バッチファイルでファイル検索&置き換えをしたい。

    こんばんは、batファイルで、ファイルの検索&置き換えを行いたいです。 現在、職場に前からあるbatファイルを利用しているのですが、色々とやりたい事が増えてきて 現在のままでは辛くなってきました。どなたか、ご教示下さい。 やりたいこと。 1.Aフォルダにある複数のファイル名を取得する。 2.BフォルダにAフォルダで取得したファイル名と取得したファイルの先頭7文字を比べて 一致するものがあるか確認し、同じものがあり、かつBフォルダのファイルの更新日時が 新しければAフォルダのファイルに上書きする。 * 置いてあるファイルは以下の名前になります。 NICHI1:~.xls ~ NICHI99:~.xls 使用しているOSはWIN7です。 おいそがしい中、書き込みを呼んで下さり有難うございます。 ぜひ、お知恵を貸して下さい。

  • VBSでフォルダ内の最新のファイルを開く方法

    よろしくおねがいします。 あるフォルダ(固定)の中にある、.hogeというファイルのうち、最新のファイルを既定のプログラムで開きたいと考えています。 このフォルダには、.hoge 以外のファイルも混在しています。 既定のプログラムで開くには、 Dim WSH As Object Set WSH = CreateObject("WScript.Shell") WSH.Run """C:\開きたいフォルダ\最新のファイル.hoge""" このように書くことで動作確認できました。 1) フォルダ内で .hoge を列挙して 2) その中で一番更新日時が新しいファイルの名前を取得 この2点ができれば完成なのですが、どうすればよいかわかりません。 具体的な書き方を教えていただけますでしょうか。

  • エクセル VBA ファイルをフォルダへ移動させる

    エクセル VBA 手探り状態です。 001大企業.xls、001中小企業.xls、003大企業.xls、003中小企業.xls、008大企業.xls、008中小企業.xls・・・・というファイルが300ほど企業種類という名前のフォルダにあります。 VBAで企業種類という名前のフォルダの中に、001、003、008・・・というフォルダは作成しました。 (ネットで”フォルダ作成”を検索して、、、自力ではVBAは書けません) それを001という名前のフォルダへは、001大企業.xls、001中小企業.xlsのファイル、003という名前のフォルダへは003大企業.xls、003中小企業.xlsのファイルを、008フォルダへは008大企業.xls、008中小業.xlsファイルを・・・というように、マクロで移動させたいのです。 これらのファイル、フォルダは全て、企業種類というフォルダの中にあります。 VBAを教えていただけましたら嬉しいです。

  • 最新フォルダの取得

    C:\ Cフォルダの下に、1A、2A、3A というフォルダがあり、その3つの中で最新のもの(一番最近作成されたもの)を取得する方法を教えていただけませんか? フォルダー数は可変で、フォルダー数、名前の取得は何とかできたのですが、それがいつ作られたのか、どれが最新か、という操作ができず困っています。 よろしくお願いいたします。

  • EXCELファイルのカレントフォルダを取得するには?

    EXCELファイルのカレントフォルダを取得するには? C:\経理\予算.xls D:\2005年度\予算.xls EXCEL97ファイルがあります。 VBAで   カレントフォルダ名 (C:\経理\,D:\2005年度\) を取得する事は可能でしょうか? CURDIRでは上手い方法が見つかりませんでした。

  • VBAで複数のフォルダから最新のファイルを検索してコピーするには?

    はじめましてこんにちは!エクセルを少しいじり始めた者です。 エクセルのVBAで複数のフォルダから最新更新日のファイルを検索して特定シートのセルD1からF20までをコピーして貼り付けるにはどのようにコードを書いたらいいのでしょうか?具体的に申し上げますと、ある特定のフォルダの中に複数のフォルダが入っており、複数のフォルダにはそれぞれ同じ名前の後に日付が入っていて、さらにその中には同じファイル名の後に日付が付いているファイルがあります。(「日本」フォルダの中に「日本200401」、「日本200402」、「日本200403」フォルダが入っていてさらにそれぞれのフォルダ内には「全国200401」」、「全国200402」、「全国200403」みたいな感じでフォルダ名と同じ日付が付いたファイルが入っています。) その複数のフォルダの中から最新更新日時のファイルだけを開いて特定のシートからデータをコピーして貼り付けるにはどのようにコードを記述したら良いのでしょうか?