Microsoft Access 掲示板

access VBA 抽出 / 4

5 コメント
views
4 フォロー
4

下記でどうでしょう。

Private Sub 抽出ボタン_Click()
    Dim sFilter As String
    
    '日付入力値チェック
    If Not IsNull(Me!開始) And Not IsDate(Me!開始) Then
        Me!開始.SetFocus
        MsgBox "正しい日付を入力してください。", vbCritical + vbOKOnly, "日付入力不備"
        Exit Sub
    End If
    If Not IsNull(Me!終了) And Not IsDate(Me!終了) Then
        Me!終了.SetFocus
        MsgBox "正しい日付を入力してください。", vbCritical + vbOKOnly, "日付入力不備"
        Exit Sub
    End If
    '期間指定チェック
    If IsDate(Me!開始) And IsDate(Me!終了) Then
        If Me!開始 > Me!終了 Then
            MsgBox "期間指定が不適切です。再入力してください。", vbCritical + vbOKOnly, "期間指定不備"
            Exit Sub
        End If
    End If
    
    '抽出条件式生成
    If IsDate(Me!開始) Then
        sFilter = " AND 日付 >= #" & Me!開始 & "#"
    End If
    If IsDate(Me!終了) Then
        sFilter = sFilter & " AND 日付 <= #" & Me!終了 & "#"
    End If
    If Me!キーワード <> "" Then
        sFilter = sFilter & " AND [A] & ';' & [B] & ';' & [C] Like '*" & Me!キーワード & "*'"
    End If
    sFilter = Mid(sFilter, 6) '先頭の" AND "を削除
    
    If sFilter = "" Then
        Me.FilterOn = False
    Else
        Me.filter = sFilter
        Me.FilterOn = True
    End If
End Sub

A, B, Cの各フィールドに対して部分一致(あいまい検索)になってます。
例えば、Aフィールド 「あいう」、キーワード「う」でも一致とみなします。

もし、各フィールドに対して完全一致の条件にしたいなら、キーワードの条件式のコードを下記に修正してください。

        sFilter = sFilter & " AND ';' & [A] & ';' & [B] & ';' & [C] & ";" Like '*;" & Me!キーワード & ";*'"

フィールドの区切り記号として';'(セミコロン)を使用してますが、フィールド値にセミコロンが含まれる可能性がある場合は、含まれる可能性がない文字にしてください。

通報 ...