• ベストアンサー

ExcelのマクロでExcelファイルを抽出して開きたい

あるフォルダ内にある複数のExcelファイルの中から、希望のExcelファイルを開くマクロをつくりたいと思っています。 フォルダ名は任意の数字、ファイル名は任意の数字(フォルダ名と同一)+版数データです。 例) C:\excelsheets\1234567890_1\1234567890_1_0_2_Sheet.xls 「_整数」の部分が版数データ。 動作としては、マクロを実行したら、任意の番号を入力してExcelファイルを開くという流れを考えています。 ちなみに、開くファイルは、 希望A 指定した番号の最新のファイルだけを開く。 希望B 指定した番号のファイルを、版数に関係なく全て開く。 を考えています。(AがダメならB) マクロの自動保存で出来たマクロに手を加えて出来たのが下記です。 Sub test() Dim Select1 As Double Select1 = Application.InputBox("Noを入力してください", "No. Select") ChDir "C:\excelsheets\" & Select1 & "_1" Workbooks.Open Filename:= _ "C:\excelsheets\" & Select1 & "_1\" & Select1 & "_1_0_2_Sheet.xls" End Sub ただし、これだと版数の変化についていけないので、試しに、    "C:\excelsheets\" & Select1 & "_1\*.xls" と、ワイルドカードが使えるか試したらエラーになりました。 初歩的な事かもしれませんが、マクロの勉強を始めたばかりで試行錯誤しながらやってます。ご助言、よろしくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えば。 Dドライブ直下にabc_0_1.txt~abc_0_5.txtと言う5つのテキストファイルがあるとします。 ファイル名abcは重複しますが、_0_1~_0_5が版数とします。 そのうちの最新版のフルネームを出すとしたら、 Sub try() Dim st As String Dim Fname As String Dim i As Integer st = Dir("D:\abc*.txt", vbNormal) Fname = st Do Until st = "" If st > Fname Then Fname = st st = Dir() Loop Fname = "D:\" & Fname MsgBox Fname End Sub こんな感じではどうでしょう。(他にも方法はあると思いますけど)

tatakana
質問者

お礼

ご回答ありがとうございます。 n-junさんの方法で解決できました!

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

な~るほど、#1さんの様に、単純にファイル名の比較でできてしまうんですね。最終更新日で見つけるコードを書いてみましたので、折角作ったのでアップしておきます。(自分の環境で試験したままなので、ご質問の内容に沿っていません) Sub test3() Dim fileList As New Collection, fileName As Variant, folderName As String Dim fso As Object Dim newest As Double, latestFile As Variant Dim timeSerial As Double Set fso = CreateObject("Scripting.FileSystemObject") folderName = "C:\Documents and Settings\?????\My Documents\" fileName = Dir(folderName & "20081116*.xls", vbNormal) Do While fileName <> "" fileList.Add Item:=fileName fileName = Dir() Loop For Each fileName In fileList timeSerial = DateValue(fso.GetFile(folderName & fileName).DateLastModified) + TimeValue(fso.GetFile(fileName).DateLastModified) If newest < timeSerial Then newest = timeSerial latestFile = fileName End If Next Workbooks.Open fileName:=folderName & latestFile End Sub

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

お礼

ご回答ありがとうございます。 こちらは更新日で抽出する方法ですね。 参考になります。

関連するQ&A