ACCESS Findでレコードを検索する方法

ACCESSでADOを使ってレコード操作をする際、レコードを検索するために利用するのがFindメソッドです。
今回は、Findでレコードを検索する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
Findメソッドとは
Findメソッドとは、ACCESS VBAで準備されているレコードを検索するために利用するメソッドです。
Findを使うと指定したレコードセット(テーブルなど)の中から、条件に合致したレコードを検索することが可能です。
なお、FindはACCESS VBAでもADOで利用します。
ADOとはACCESS VBAでテーブルなどのレコードセットを扱うための手法です。
ADOについて詳しくは以下の記事をご覧ください。

Findの使い方
Findは以下の構文で利用します。
レコードセット名.Find 抽出条件 , SkipRows , SearchDirection , Start
いくつか引数がありますが、抽出条件以外の引数は省略可能でほぼ利用しません。
抽出条件のみ設定すれば利用可能です。
Findの利用例
実際の利用例を見たほうが使い方がわかりやすいので、サンプルでご紹介します。
今回は、以下の売上サンプルテーブルからレコードを検索します。

ここから、商品名などを使ってレコードを検索しましょう。
VBAで以下のプロシージャを作成しました。
商品名が「みかん」のレコードを検索して売上IDをメッセージボックスで表示します。
Public Sub find_test()
'変数の宣言
Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset
'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
'レコードセットを取得
rst1.Open "売上サンプル", cnn, adOpenKeyset, adLockOptimistic
rst1.Find "商品名 = 'みかん'"
MsgBox rst1!売上ID
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing
End Sub
rst1というレコードセットに「売上サンプル」テーブルを格納し、Findメソッドで検索を行っています。
rst1.Find "商品名 = 'みかん'"
の部分でFindを使っていますね。
条件の指定をする際、みかんはテキスト型なので’(シングルクォーテーション)で囲っていることに注意してください。
テキスト型の条件を指定する際にダブルクォーテーションではなくシングルクォーテーションを利用するケースは以下の記事を参照ください。

このプロシージャを実行してみましょう。

メッセージボックスに2と表示されました。
これは指定した売上サンプルテーブルで売上IDが2のレコードの商品名が「みかん」であるためです。
Findでは1レコードしか出力できない
個々で改めて売上サンプルテーブルを見てみると売上ID5もみかんです。
これがFindの結果として出力されないのはなぜでしょうか?
それは、Findメソッドが検索の結果最初に見つかったレコードの値を返すためです。
今回は検索開始位置や検索方向を指定していないので、1レコード目から順に検索していきます。
その結果、2レコード目でみかんを見つけたのでそこで検索を中止し、5レコード目までたどり着かなかったということです。
このように、Findは該当するすべてのレコードを抽出するものではありませんので注意してください。
該当するレコードをすべて抽出したい場合は、Filterプロパティを利用します。
詳しくは以下の記事をご覧ください。

以上、Findでレコードを検索する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に200以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。