- 締切済み
VBAで複数のフォルダから最新のファイルを検索してコピーするには?
はじめましてこんにちは!エクセルを少しいじり始めた者です。 エクセルのVBAで複数のフォルダから最新更新日のファイルを検索して特定シートのセルD1からF20までをコピーして貼り付けるにはどのようにコードを書いたらいいのでしょうか?具体的に申し上げますと、ある特定のフォルダの中に複数のフォルダが入っており、複数のフォルダにはそれぞれ同じ名前の後に日付が入っていて、さらにその中には同じファイル名の後に日付が付いているファイルがあります。(「日本」フォルダの中に「日本200401」、「日本200402」、「日本200403」フォルダが入っていてさらにそれぞれのフォルダ内には「全国200401」」、「全国200402」、「全国200403」みたいな感じでフォルダ名と同じ日付が付いたファイルが入っています。) その複数のフォルダの中から最新更新日時のファイルだけを開いて特定のシートからデータをコピーして貼り付けるにはどのようにコードを記述したら良いのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- fumufumu_2006
- ベストアンサー率66% (163/245)
こんなのではどうでしょうか? 細かい仕様が分からないので、チェック系はアバウトですが・・・ Sub sample() Dim fso As New FileSystemObject Dim fld As Folder Dim f As String Dim LastModifiedDate As Date Dim LastModifiedFile As String 'ファイルを探す For Each fld In fso.GetFolder("c:\日本").SubFolders If fld.Name Like "日本*" Then '日本???ファイル? If Val(Replace(fld.Name, "日本", "")) > 0 Then '日本の後が数値かチェック(簡易チェックです) f = Replace(fld.Name, "日本", "全国") & ".xls" '探すファイル(日本???を全国???に変更したエクセルブック) f = fld.path & "\" & f 'フルパスを作る If (fso.FileExists(f) = True) Then 'ファイルある? If fso.GetFile(f).DateLastModified > LastModifiedDate Then '最終更新日時チェック LastModifiedDate = fso.GetFile(f).DateLastModified '新たな最終更新日時 LastModifiedFile = f 'その時のファイル End If End If End If End If Next Set fso = Nothing '最後に更新したファイルの特定シートの特定セル(例えばSheet1のA1)を表示 With Workbooks.Open(LastModifiedFile) MsgBox .Sheets("Sheet1").Range("A1") .Close End With End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
私は最近言っていることだが、課題を解決するための、 (1)要素スキル(最終具体的にはコードだが、とりあえず置いといて)を文章で書き上げて、どこがわからないかを見極めるのが良い。 処理順序(時間順序)に沿って箇条書きするのが良い。 (2)大きいほうの課題からまず解決するよう、力を入れる。 しかし小さいほうでも調べてわかれば、コードを集めて良いが。 (3)本やWEBで照会するため、適切な語句は何か考える。 その語句で、本やWEB照会してみる。そこのコードをコピーしてやってみて、そのケースの限りではうまくいけば、自分の場合には変更箇所はないか考える。 (4)それ(変更箇所の修正)が自力で出来ないときは、こういうコーナーに質問せざるを得ないでしょう。 本質問など上記をやってなくて、丸投げだ。 ーー 語句の候補は(全て下記に「VBA」を添えること) フォルダ名 指定 開く フォルダ ファイル 読む 複数フォルダの指定(これはテクニックかと思う) ファイル 更新日付 取得(ファイル名から判るのか?) (特定範囲の)コピー 張り付け 別ファイル Etc
- zawax
- ベストアンサー率50% (3/6)
うーん。 一つ一つ取り出して舐めていくしかないでしょうね。 指定したフォルダ内にあるファイルまたはフォルダは dir関数でとってこれます。 do while分を使用してdir関数の戻りがカラになるまでループ、 フォルダ名の後ろ6桁を持ってきて前回の抽出と比較 大きければ変数に保存。 一番大きい日付が判れば、そのフォルダを元にまたdir関数で 今度はファイル名を一つ一つ取ってきて比較して・・ とやれば一応目的は達せます。。