Recordsetであいまい検索をする|Likeとワイルドカードを使用|Access VBA入門
あいまい検索をするには、Like演算子とアスタリスク(*)を使ったワイルドカードでできます。Recordsetで検索するには、FindFirst・FindPrevious・FindNext・FindLastのメソッドを使用します。
FindFirstで先頭からあいまい検索をする
あいまい検索のワードを入力するテキストボックスと、[検索]ボタンを配置したフォームを作成しました。
フォームの詳細に帳票形式でテーブルを表示し、テキストボックスとボタンはフォームフッターに作成しました。
検索したいデータの一部を入力し[検索]ボタンをクリックすると、見つかったレコード位置へ移動します。
見つからなかった場合は、「見つかりませんでした」とメッセージが表示されます。
[検索]ボタンのクリックイベントの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回目に[検索]ボタンをクリックすると最初に見つかったレコードに移動します。
2回目に[検索]ボタンをクリックすると、次に見つかったレコードに移動します。
3回目に[検索]ボタンをクリックすると、見つからないので「見つかりませんでした」のメッセージが表示されます。
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)]などを追加します。