プロが教える店舗&オフィスのセキュリティ対策術

vbaでファイルを開く際にフォルダー名、ファイル名は分かっていますが、そのファイルのあるサブフォルダーが分かりません。ファイル名はセルの文字列を変数に入れて開きます。サブフォルダーの名前は全く関連がなく、dir関数とワイルドカードを使っても共通の文字などがないためあいまい検索できません。何か良い方法をご存知でしたら教えていただけませんか?

A 回答 (2件)

こんにちは


なさりたい事が分かりませんので 無駄になるかも知れませんが推測で

サブフォルダが知りたいのでしょうか
= CreateObject("Scripting.FileSystemObject").GetFolder(Path).SubFolders
でサブフォルダパスが取得できると思います
Pathは parent_path ”親パス”
複数サブフォルダがある場合は再帰呼び出しで取得します
限定して取得(検索)する場合は、当然ながらキーワードが必要になります

>フォルダー名、ファイル名は分かっています
此れって 親フォルダー名、ファイル名は分かっています と言う事?
であれば総当たりで再帰処理、ファイル名があった時に処理すれば良いかと

Sub Test()
'暫定Value
'Path: ThisWorkbook.Path
'FileName:"xxx.xlsm"
Call find_filePath_SubFolders(ThisWorkbook.Path, "xxx.xlsm")
End Sub
Sub find_filePath_SubFolders(Path As String, fname As String)
Dim buf As String, f As Object
buf = Dir(Path & "\*.*")
Do While buf <> ""
If buf = fname Then
'target_process
MsgBox Path & "\" & buf
Exit Sub
End If
buf = Dir()
Loop
With CreateObject("Scripting.FileSystemObject")
For Each f In .GetFolder(Path).SubFolders
Call find_filePath_SubFolders(f.Path, fname)
Next f
End With
End Sub

ちなみに親フォルダ内も探しています
    • good
    • 0

以下は、フォルダ名とファイル名をあたえて、


該当ファイルが存在した場合、そのファイルのフルパスを返す関数です。
(該当ファイルが存在しない場合は””が返ります)
folder試験は呼び出しのサンプルです。
folder試験からGetFullPathを呼び出します。
find_fileはGetFullPathから呼び出される関数です。
直接find_fileを呼び出す必要はありません。
GetFullPathを呼び出すときの注意点
フォルダ名はフルパスで指定すること。(最後に\を付加しないこと)
ファイル名は、拡張子を含めて指定すること。

ここに投稿するとエラーになるので、下記URLにアップしました。
https://ideone.com/W1bVhz
「vbaサブフォルダーをワイルドカードで取」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとう

ファイルシステムオブジェクト、これを機に勉強して目的の処理ができました!ご回答ありがとうございました!

お礼日時:2022/11/19 17:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A