検索される配列と検索文字の入った配列を送ると、すべての検索文字が入っている文字列の配列を返す関数
以下がタイトルの関数です。
' 検索される配列と検索文字の入った配列を送ると、すべての検索文字が入っている文字列の配列を返す関数
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” のすべての文字が含まれている文字列が選択できました。