目次
レコードある限り検索する
こんにちは。伊川(@naonaoke)です。
今回は、ACCESSの検索フォームについて解説します。
テーブルに同じ値がある場合です。
今までは、最初に見つかった値のみ表示しました。
今回は、レコードある限り検索を実行するコードを紹介します。
問題提起
((株)IKAWAの阿久 世子男(アク セスオ)は上司から下記の依頼を受けました。
検索フォームで同じ値がときは、
すべて検索できるようにして欲しい。
どのようなコードを記載すればいいだろうか?
解決策
回答
Findnext Nomatchを使って、次の値を検索する。
Findnext Nomatch
レコードを検索する場合によく利用される方法です。
メゾット |
検索内容 |
FindFirst | 検索条件の一番最初のレコードに移動 |
FindNext | 検索条件の次のレコードに移動 |
FindPrevious | 検索条件に一致する前のレコードを検索 |
FindLast | 検索条件に一致する最後のレコードを検索 |
条件に一致するレコードの判定は、Recordsetオブジェクトの「NoMatch」プロパティで判定します。
難しいように思うかも知れませんが、今回の方法は、何度か動画で紹介しています。
Findnext Nomatch 作成手順その1 データベース確認
上の図のようなデータベースがあります。
名前のフィールドに同じ値があります。
例えば、仮面ライダーは、2つあります。
仮面ライダーある限り検索を実行します。
Findnext Nomatch 作成手順その2 検索フォームを作成する
検索フォームの作成については、上の記事を確認してください。
また、今回は、レコードの検索ボタンは、2つにしています。
最初は、「レコードの検索」をクリックして、次に「次を検索」をクリックします。
Findnext Nomatch 作成手順その3 コードを仕込む
コードの説明は上の図の通りです。
Private Sub コマンド14_Click() DoCmd.ApplyFilter , "[名前] = '" & Me!名前検索 & "'" End Sub Private Sub コマンド15_Click() Dim myRS As Recordset Set myRS = Me.RecordsetClone myRS.Bookmark = Me.Bookmark myRS.FindNext "名前 = '" & 名前検索.Value & "'" If myRS.NoMatch Then MsgBox "最後まで検索しました。" Else Me.Bookmark = myRS.Bookmark End If myRS.Close Set myRS = Nothing End Sub
Findnext Nomatch 作成手順その4 コードを実行する
これで検索終了です。
ここがポイント
ここがポイント
このFindメゾットは、Excelでも良く使います。NoMatchはACCESSでよく使います。Findメゾットと聴いて、Excelの場合、ACCESSの場合と、連想できれば、VBAに慣れてきた証拠です。
まとめ
今回のまとめ
思うようにレコードを抽出できるようになり、また少し、ACCESSが好きになった、阿久 世子男(アク セスオ)なのでした。
今回のサンプルファイルは、No69です。
毎日の業務が、3時間短縮できます
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。