複数フィールドを検索対象とし、キーワードに基づいて動的にフィルタを生成する処理

Sub ApplyConcatenatedFieldsFilterAndCondition()
    Dim strFilter As String
    Dim strConcatFields As String
    Dim strKey1 As String: strKey1 = "あいう"
    Dim strKey2 As String: strKey2 = "かきく"
    Dim strKey3 As String: strKey3 = "さしす"
    Dim arrKeys As Variant
    Dim i As Integer
    Dim strKeyConditions As String
    
    ' キーワードを配列に格納
    arrKeys = Array(strKey1, strKey2, strKey3)
    
    ' フィールド値の連結式を作成
    strConcatFields = "フィールド1 & フィールド2 & フィールド3 & フィールド4 & " & _
                      "フィールド5 & フィールド6 & フィールド7 & フィールド8 & " & _
                      "フィールド9 & フィールド10"
    
    ' キーワードに基づいてフィルタ条件を組み立てる(「かつ」条件)
    For i = LBound(arrKeys) To UBound(arrKeys)
        If arrKeys(i) <> "" Then
            If strKeyConditions <> "" Then strKeyConditions = strKeyConditions & " AND "
            strKeyConditions = strKeyConditions & strConcatFields & " Like '*" & arrKeys(i) & "*'"
        End If
    Next i
    
    ' 最終的なフィルタ条件を設定
    If strKeyConditions <> "" Then
        strFilter = "(" & strKeyConditions & ")"
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.FilterOn = False ' 条件がない場合はフィルタをオフにする
    End If
End Sub

コメント