検索される配列と検索文字の入った配列を送ると、すべての検索文字が入っている文字列の配列を返す関数

以下がタイトルの関数です。

' 検索される配列と検索文字の入った配列を送ると、すべての検索文字が入っている文字列の配列を返す関数
Function FilterStringsWithKeywords(stringsToSearch() As String, searchKeywords() As String) As String()
    Dim filteredStrings() As String
    Dim containsAllKeywords As Boolean
    Dim stringCount As Integer
    ReDim filteredStrings(0 To 0)
    Dim searchString As Variant
    Dim keyword As Variant
    
    
    ' 検索される配列を走査
    For Each searchString In stringsToSearch
        ' 各キーワードが文字列に含まれているか確認
        containsAllKeywords = True
        For Each keyword In searchKeywords
            If InStr(1, UCase(searchString), UCase(keyword)) = 0 Then
                containsAllKeywords = False
                Exit For
            End If
        Next keyword

        ' 全てのキーワードが含まれていた場合は配列に追加
        If containsAllKeywords Then
            ReDim Preserve filteredStrings(0 To stringCount)
            filteredStrings(stringCount) = searchString
            stringCount = stringCount + 1
        End If
    Next searchString

    ' 配列を返す
    FilterStringsWithKeywords = filteredStrings
End Function

使用例は、以下です。

Sub ExampleUsage()
    Dim stringsToSearch() As String
    Dim searchKeywords() As String
    Dim filteredStrings() As String
    Dim i As Integer

    ' 検索される文字列を含む配列を作成
    stringsToSearch = Split("Apple,Banana,Orange,Pineapple,Grapes,Watermelon", ",")

    ' 検索するキーワードを含む配列を作成
    searchKeywords = Split("a,e,l", ",")

    ' 関数を使用して検索される文字列からキーワードを含むものを抽出
    filteredStrings = FilterStringsWithKeywords(stringsToSearch, searchKeywords)

    ' 結果を出力
    If filteredStrings(0) <> "" Then
        For i = LBound(filteredStrings) To UBound(filteredStrings)
            Debug.Print filteredStrings(i)
        Next i
    Else
        Debug.Print "一致する文字列が見つかりませんでした。"
    End If
End Sub

以下が実行結果です。
“Apple,Banana,Orange,Pineapple,Grapes,Watermelon” から、”a,e,l” のすべての文字が含まれている文字列が選択できました。

Follow me!