pickup

目次

レコードある限り検索する

こんにちは。伊川(@naonaoke)です。

今回は、ACCESSの検索フォームについて解説します。

テーブルに同じ値がある場合です。

今までは、最初に見つかった値のみ表示しました。

今回は、レコードある限り検索を実行するコードを紹介します。

問題提起

 

((株)IKAWAの阿久 世子男(アク セスオ)は上司から下記の依頼を受けました。

検索フォームで同じ値がときは、

すべて検索できるようにして欲しい。

どのようなコードを記載すればいいだろうか?

解決策

 

回答
sesuo2.jpg
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 コードを実行する




これで検索終了です。

ここがポイント

 

ここがポイント
Function8.png
このFindメゾットは、Excelでも良く使います。NoMatchはACCESSでよく使います。Findメゾットと聴いて、Excelの場合、ACCESSの場合と、連想できれば、VBAに慣れてきた証拠です。

 

スポンサーリンク

まとめ

今回のまとめ
sesuo6.jpg
思うようにレコードを抽出できるようになり、また少し、ACCESSが好きになった、阿久 世子男(アク セスオ)なのでした。

今回のサンプルファイルは、No69です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事