• 締切済み

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

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

noname#102038
noname#102038

みんなの回答

回答No.3

こんなのではどうでしょうか? 細かい仕様が分からないので、チェック系はアバウトですが・・・ 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/17068)
回答No.2

私は最近言っていることだが、課題を解決するための、 (1)要素スキル(最終具体的にはコードだが、とりあえず置いといて)を文章で書き上げて、どこがわからないかを見極めるのが良い。 処理順序(時間順序)に沿って箇条書きするのが良い。 (2)大きいほうの課題からまず解決するよう、力を入れる。 しかし小さいほうでも調べてわかれば、コードを集めて良いが。 (3)本やWEBで照会するため、適切な語句は何か考える。 その語句で、本やWEB照会してみる。そこのコードをコピーしてやってみて、そのケースの限りではうまくいけば、自分の場合には変更箇所はないか考える。 (4)それ(変更箇所の修正)が自力で出来ないときは、こういうコーナーに質問せざるを得ないでしょう。 本質問など上記をやってなくて、丸投げだ。 ーー 語句の候補は(全て下記に「VBA」を添えること) フォルダ名 指定 開く フォルダ ファイル 読む 複数フォルダの指定(これはテクニックかと思う) ファイル 更新日付 取得(ファイル名から判るのか?) (特定範囲の)コピー 張り付け 別ファイル Etc

  • zawax
  • ベストアンサー率50% (3/6)
回答No.1

うーん。 一つ一つ取り出して舐めていくしかないでしょうね。 指定したフォルダ内にあるファイルまたはフォルダは dir関数でとってこれます。 do while分を使用してdir関数の戻りがカラになるまでループ、  フォルダ名の後ろ6桁を持ってきて前回の抽出と比較  大きければ変数に保存。 一番大きい日付が判れば、そのフォルダを元にまたdir関数で 今度はファイル名を一つ一つ取ってきて比較して・・ とやれば一応目的は達せます。。

関連するQ&A

  • フォルダに入っている複数のファイルをコピーしたい。

    エクセルなのですが、 1つのフォルダに入っている複数のエクセルファイルを 1つのエクセルファイルに(下に付け加えて)まとめたいと思っています。 このようなことをやりたいと思っているのですが、 お力をお貸ししていただけないでしょうか? どのシートも形式は同じなのですが、 1つのエクセルファイルに複数のBookがある場合もあります。 中身としてはA~Z列まであり、また行についてはそれぞれのシートによって異なります。 そして、どのシートに対しても1~3行についてはタイトル等が書いてありますので、 4行目以降でデータが入っているところまで、同じフォルダに用意したファイルに 順番にコピーしていきたいと思っています。 色々と試してみたのですが、どうしても複数のファイルから取り出してくることができなくて、 すみませんがよろしくお願します。

  • 複数ファイルから特定シートのコピー

    同じフォルダ内に、エクセルファイルがいくつかあります。 そのフォルダ内のファイルから、特定のシート名(例:シートA)のシートをコピーしシートAだけの新しいファイルとして作成しようと思います。 シートAを含むファイルは複数あります。 何か方法がありましたらご教授お願いいたします。

  • 複数フォルダ内のファイル群をひとつに纏める

    Excel2003のVBA で、以下の作業を行いたいので宜しくご教示下さい。   サーバー上や自分のPC上にある、任意フォルダA直下には、   複数のフォルダがあり、その複数フォルダ内に多数のファイル(約3万個)が入っている。   そのファイル群を、任意フォルダAの直下に新しいフォルダを1つ作り、全てコピーし纏めたい。   当方の構想(希望)としては、   1.エクセルシート1に全ファイル名を書きだす。(行:フォルダ名、列:ファイル名)   2.同名ファイルの有無を判定し、有ればエクセルシート2にフォルダ名とファイル名を抽出する。     (同名ファイルは、エクセルシート2を確認し、手動で変更する)   3.同名ファイルが無ければ、新しいフォルダに全てコピーする。 コードを記載しご教示頂ければ助かります。 皆様よろしくお願い致します。

  • VBA_フォルダ内複数のExcelファイルの集約

    Excel VBAに関する質問です。 特定のフォルダ内(例としてC:\folder1)の複数のExcelファイルにおける シート(例としてSheet1)内のセル範囲A2:I1000の情報をコピーし、 特定のフォルダ内に格納されたExcelファイル(例としてC:\tougou\tougou.xls)の シート(例としてTOUGOU)内のA2を起点に貼り付け処理をしたいのですが、可能でしょうか? <貼り付けイメージ> (例)特定のフォルダ内(例としてC:\folder1)のExcelファイル数が2つの場合 A2 B2 ・・・・・I2 ・ ・ ・ ・ ・ A1999・・・・・・I1999 A2~I1999の範囲にデータが集約される。 どうぞよろしくお願いいたします。

  • 【Excel VBA】1つのファイルにまとめる方法

    1つのフォルダの中に複数のExcelファイルが保存されています。 seat1だけを1つに集めたExcelファイルを新規で作成したいです。 ※シート1をどんどん追加させるイメージです。 ※フォルダの中に入っているExcelファイル数は毎月変わります。 手順(1)フォルダに入っているExcelシートを開く 手順(2)sheet1を【シートの移動またはコピー】新規BOOKにコピー 手順(3)フォルダに入っているExcel分繰り返す。 手順(4)シート名を変更する。    どういう風にVBAコードを記入すればいいかわからないので教えていただきたいです。どうぞよろしくお願いいたします。

  • 検索結果を最新ファイルのみ1フォルダにコピーするには?

    はずかしながら、ソフトウェア業界にいる者ですが、 検索結果のファイルを最新ファイルのみ残す( 複写)で うまくいかないので、他に方法がないか教えて頂きたいのです。 コマンドまたはユーティリティ、フリーソフトでの方法がありましたら 教えて下さい。 WINDOWS98SEにて、1998年から2005年までの1000近い仕様書ドキュメントを 検索にて検索結果を表示させて、1フォルダに最新のバックアップとして まとめコピー(複写)させようとしていますが、 ドキュメントは修正時の各フォルダに名称同一のまま格納されているため 検索結果を更新日付時刻順(昇順)で表示させた後、 全選択し、ドラッグ&ドロップで別フォルダに複写します。 (同一ファイルは「全て上書き」を指定する) しかしながら、更新日付時刻順(昇順)で複写されなく、 格納順で格納されるケースがあり、 現状では、1ヶ月単位の選択範囲を決めてコピーしています。 いい方法教えて下さい。

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

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

  • 複数のEXCELファイルより一部の行を自動でマージするマクロ

    「(1)複数のEXCELファイル」より、「(2)特定のシート」の中のさらに「(3)特定の行」をコピーし、あるEXCELファイルの1シートに挿入していくマクロ(VBA)か、ソフトが掲載されているサイト、もしくは、やりかたを教えてください。 1.EXCELは、2003 2.「(1)複数のEXCELファイル」は、一つのフォルダにあり、データ形式は一緒。  そのフォルダにはEXCELファイルしか置きません。 3.「(2)特定のシート」について、シート名はどれも一部のみ一致します。  または位置(順番)は一緒です。 4.「(3)特定の行」はどのファイルも作りが一緒です。 VBA初心者ですが、ヒントをいただければ頑張りたいと考えています。

  • 複数のEXCELファイルの特定セルを別ファイルへコピーする

    EXCELで作った見積書のセル内容を自動的に集めて、見積り一覧表を作りたいなと考えています。 見積書は1見積り1ファイル(シートは複数ありますが1枚目のシートが対象)になっていて、 各ファイルの1枚目のシートの特定セル内容(日付、相手先、件名、金額など)を 見積り一覧表として作成したEXCELシートへ順次コピーしたく思います。 動作イメージは 1.見積り一覧表を開いてボタンを押す等してマクロを起動。 2.同一フォルダー内の自分を除く全EXCELファイルを順次開きセル内容を一覧表へコピー。 3.全てのEXCELファイルを処理したら終了・・・。 発展系として、 ・日付条件で対象EXCELファイルを絞り込む。 ・特定セルに値が入っていなかったら(関係ないEXCELファイル)スキップ。 あとは一覧表が出来た後のソートくらいでしょうか。 まずは基本的な「自動的に複数EXCELを開いて特定セル内容をコピーする」のヒントがほしく思います。 なお、自動処理対象としたいEXCEL見積りファイルは約500本ほどです。 関連情報等ご存知でしたらお教えください。 よろしくお願いいたします。

  • リストにあるファイルを検索して特定フォルダにコピー

    フォルダの中に10000個のファイルがあり、 特定の100個のファイルをコピーしたいのですが、 手軽に行えるツールややり方はあるでしょうか。 必要な100個のファイル名だけが分かっているという条件です。

専門家に質問してみよう