Recordsetであいまい検索をする|Likeとワイルドカードを使用|Access VBA入門

あいまい検索をするには、Like演算子とアスタリスク(*)を使ったワイルドカードでできます。Recordsetで検索するには、FindFirst・FindPrevious・FindNext・FindLastのメソッドを使用します。

BackHome BackVBA入門


FindFirstで先頭からあいまい検索をする

あいまい検索のワードを入力するテキストボックスと、[検索]ボタンを配置したフォームを作成しました。
フォームの詳細に帳票形式でテーブルを表示し、テキストボックスとボタンはフォームフッターに作成しました。
あいまい検索のワードを入力するテキストボックスと、[検索]ボタンを配置したフォーム

検索したいデータの一部を入力し[検索]ボタンをクリックすると、見つかったレコード位置へ移動します。
見つからなかった場合は、「見つかりませんでした」とメッセージが表示されます。
見つかったレコード位置へ移動

[検索]ボタンのクリックイベントのVBAです。
[検索]ボタンのクリックイベントのVBA

・フォームのレコードソースと同じテーブルで、レコードセットを作成しています。
・検索は、FindFirst・Like・ワールドカード(*)を使用し、FindFirst "検索するフィールド名 LIKE '*" & 検索ワード & "*'" となります。
・見つかったかどうかは、NoMatchプロパティで判定します。
・見つかれば、Recorsetのブックマークをフォームのブックマークに代入します。

Private Sub コマンド11_Click()
    Dim rs As Recordset
     
    Set rs = CurrentDb.OpenRecordset("T-顧客マスター", dbOpenDynaset)
     
    If IsNull(Me!テキスト9) Then
        MsgBox "「会社名 あいまい検索」を入力してください。"
        Exit Sub
    End If
     
    rs.FindFirst "会社名 LIKE '*" & Me!テキスト9 & "*'"
    If rs.NoMatch Then
        MsgBox "見つかりませんでした"
    Else
        Me.Bookmark = rs.Bookmark
        Me.顧客ID.SetFocus
    End If
End Sub

FindNextを使用し、次々にあいまい検索する

フォームを開き、1回目に[検索]ボタンをクリックすると最初に見つかったレコードに移動します。
1回目に[検索]ボタンをクリックすると最初に見つかったレコードに移動

2回目に[検索]ボタンをクリックすると、次に見つかったレコードに移動します。
2回目に[検索]ボタンをクリックすると、次に見つかったレコードに移動

3回目に[検索]ボタンをクリックすると、見つからないので「見つかりませんでした」のメッセージが表示されます。
3回目に[検索]ボタンをクリックすると、「見つかりませんでした」のメッセージが表示

RecordsetとFindNextを使ったVBAです。
RecordsetとFindNextを使ったVBA

・FindNextを何回も使うので、レコードセットはフォーム全体のプライベート変数にします。
・フォームの「読み込み時イベント」で、レコードセットを作成します。
・FindNextの使い方は、FindFirstと同じです。

Option Compare Database

Dim rs As Recordset

Private Sub Form_Load()
    Set rs = CurrentDb.OpenRecordset("T-顧客マスター", dbOpenDynaset)
End Sub

Private Sub コマンド11_Click()
    If IsNull(Me!テキスト9) Then
        MsgBox "「会社名 あいまい検索」を入力してください。"
        Exit Sub
    End If
     
    rs.FindNext "会社名 LIKE '*" & Me!テキスト9 & "*'"
    If rs.NoMatch Then
        MsgBox "見つかりませんでした"
    Else
        Me.Bookmark = rs.Bookmark
        Me.顧客ID.SetFocus
    End If
End Sub

今回の場合、見つからない所まで進むとそのままです。
本格的なアプリにする場合、[最初から(FindFirst)]や[後方検索(FindPrevious)]などを追加します。

BackHome BackVBA入門

Copyright(C) FeedSoft