Microsoft Access 掲示板

どの階層にいるかわからないフォルダをワイルドカードで見つけ出したい

2 コメント
views
4 フォロー

お世話になります。

以下のサイトを参考にして、サブフォルダをワイルドカード検索しています。
https://www.limecode.jp/entry/utility/partialmatch-foldersearch

これを元に、サブフォルダのさらに下の、このサイトでいう子フォルダの下(孫フォルダとでもいうでしょうか)
まで検索してフォルダを見つけたいのですが、可能でしょうか?

もしそれが可能であれば、コードをどう改修すればよいかご教授頂ければ幸いです。

nanana
作成: 2024/01/17 (水) 14:56:44
通報 ...
1
hiroton 2024/01/18 (木) 16:02:23 99b6e@f966d

とりあえずで回答しますが、孫フォルダを対象にしたいなら


Sub フォルダ名が売上データ○○になっているフォルダを取得する()

    Dim FSO As New FileSystemObject

    Dim 検索フォルダ As Folder
    Set 検索フォルダ = FSO.GetFolder("C:\Users\○○\Desktop\検索フォルダ")

    Dim 該当フォルダ As Folder
    Dim フォルダ候補 As Folder
    For Each フォルダ候補 In 検索フォルダ.SubFolders

        If フォルダ候補.Name Like "売上データ*" Then
            Set 該当フォルダ = フォルダ候補
            Exit For
        ElseIf
            'フォルダ候補(子フォルダ)を親として同じことをする

        End If

    Next

    If Not 該当フォルダ Is Nothing Then
        MsgBox "該当フォルダのパス:" & 該当フォルダ.Path
    End If

End Sub


とするだけですね

Sub フォルダ名が売上データ○○になっているフォルダを取得する()
    
    Dim FSO As New FileSystemObject
    
    Dim 検索フォルダ As Folder
    Set 検索フォルダ = FSO.GetFolder("C:\Users\○○\Desktop\検索フォルダ")
    
    Dim 該当フォルダ As Folder
    Dim フォルダ候補 As Folder
    For Each フォルダ候補 In 検索フォルダ.SubFolders
        
        If フォルダ候補.Name Like "売上データ*" Then
            Set 該当フォルダ = フォルダ候補
            Exit For
        ElseIf
            Dim 孫フォルダ As Folder
            For Each 孫フォルダ In フォルダ候補.SubFolders
                
                If フォルダ候補.Name Like "売上データ*" Then
                    Set 該当フォルダ = 孫フォルダ
                    Exit For
                End If
        
            Next
            If Not 該当フォルダ Is Nothing Then
                Exit For
            End If
        End If
        
    Next
    
    If Not 該当フォルダ Is Nothing Then
        MsgBox "該当フォルダのパス:" & 該当フォルダ.Path
    End If
    
End Sub

それぞれの変数がどのように使われるのか理解して、必要に応じて必要な変数を用意してください

ただし、別階層のフォルダを対象とするということは、同名のフォルダがある可能性が否定できないので、処理の順番によっては望んだ結果にならない場合もあります。また、「見つかったものは全て」というのが望みの場合もあるでしょう。仕様を明確にしましょう

2
nanana 2024/01/18 (木) 16:47:57 e48ae@9a838

ありがとうございます!頂いた情報をよく読み、チャレンジしてみます。