こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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"
と、ワイルドカードが使えるか試したらエラーになりました。
初歩的な事かもしれませんが、マクロの勉強を始めたばかりで試行錯誤しながらやってます。ご助言、よろしくお願いします。

投稿日時 - 2008-11-18 22:30:24

QNo.4489703

困ってます

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

例えば。
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

こんな感じではどうでしょう。(他にも方法はあると思いますけど)

投稿日時 - 2008-11-18 23:32:23

お礼

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

投稿日時 - 2008-11-19 08:48:38

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2008-11-19 00:03:36

お礼

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

投稿日時 - 2008-11-19 08:50:12

あなたにオススメの質問