人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル2007では、filesearch が使えなくなってしまいました。2003で多用していたモノで、とても困っています。次のような使い方をしていた場合、同じ処理を最も簡単に行うためにはどうしたらいいでしょう?できれば参考URLよりも、処理文を回答頂けるとうれしいのですが。
with application.fileserach
.lookin=thisworkbook.path
.filename="*.xls"
if .execute>0 then
for i = 1 to .foundfiles.count
workbooks.open filename:=.foundfiles(i)
next i
end if
end with



●質問者: choro3
●カテゴリ:コンピュータ
✍キーワード:application NeXT open xls エクセル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●100ポイント ベストアンサー

FileSystemObjectと再帰を使ってこんな感じかな

(ちなみに下の階層に同名のファイルがあるとエラーでますが)

Private FSO

Sub Macro()
 Dim fold As Object
 Set FSO = CreateObject("Scripting.FileSystemObject")
 
 Set fold = FSO.getfolder(ThisWorkbook.Path)
 
 Call openFile(fold)
 
 Set FSO = Nothing
End Sub

Sub openFile(fold As Object)
 Dim myFile As Object
 Dim myFold As Object
 
 For Each myFile In fold.Files
 If StrConv(Right(myFile.Name, 4), vbLowerCase) = ".xls" Then
 Workbooks.Open Filename:=myFile.Path
 End If
 Next
 
 For Each myFold In fold.subfolders
 Call openFile(myFold)
 Next
End Sub
◎質問者からの返答

やっぱりこの方法になるんですね。ネット検索してこの方法は見たのですが、独学の自分には、"Set"とかが出てくると、かなりのステップアップ感があって、使いこなせるかなぁと思ってはいたのです。

ちなみに、"sub openFile"の最後のfor?Nextは、下層のディレクトリの検索をさせている部分と考えてよろしいのでしょうか。

ちょっと概念的に今の自分には難しい感じがするのですが、これを少し簡略化して使ってみることにします。ありがとうございました。


2 ● ardarim
●50ポイント

これで同じ動きになると思いますが、どうでしょうか。

 Dim FoundFile As String
 
 FoundFile = Dir(ThisWorkbook.Path & "\*.xls")
 Do While FoundFile <> ""
 Workbooks.Open Filename:=FoundFile
 FoundFile = Dir()
 Loop
◎質問者からの返答

これは簡単ですね。"Dir"関数は使ったことがなかったので、この発想はありませんでした。

ちなみに、"FoundFile"はファイル名だけのようで、パスをつけてやらないとだめみたいでした。

Workbooks.Open Filename:=Thisworkbook.Path & "\" & FoundFile

お答えいただいた方法だと下層のディレクトリの検索もしたい場合は、ちょっと工夫して再帰を仕込まなければならないんですね。参考になりました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ