SSブログ

VBA フォーム上でレコードを検索する [VBA]

 フォーム上にデータ一覧を表示させ、指定された文字を含むレコードを検索し、そのレコードへ移動する方法です。
 この方法を活用する場面があるかどうかは分かりませんが、フォームのRecordsetは(通常)DAOであって、DAOのメソッドが利用できる、と言うことを知っておくと、いろいろ応用が利くと思います。

 解説用のフォームです。

 連結フォームを帳票フォームで作成し、データの一覧を表示させています。
 フォームの上部分の「検索」テキストボックスに文字を入力し、「先頭から検索」ボタンをクリックすると、都道府県名にその文字を含むレコードに移動するようにします。

 「先頭から検索」ボタン、「次を検索」ボタンのクリックイベントに、以下のコードを記述します。 

Private Sub cmdFind_Click()
'先頭から検索
    Me.Recordset.FindFirst "TDFKMEI LIKE '*" & Me.txtFind & "*'"

    If Me.Recordset.NoMatch = True Then
        MsgBox "見つかりません。", vbExclamation
    End If

End Sub

Private Sub cmdNext_Click()
'次を検索
    Me.Recordset.FindNext "TDFKMEI LIKE '*" & Me.txtFind & "*'"

    If Me.Recordset.NoMatch = True Then
        MsgBox "見つかりません。", vbExclamation
    End If

End Sub

 検索を行っているのは、
Me.Recordset.FindFirst "TDFKMEI LIKE '*" & Me.txtFind & "*'"
 の箇所になります。
 Meは現在のフォームを指しています。
 フォームのRecordsetFindFirstメソッドを使用しています。

 FindFirst構文は以下のようになります。

FindFirst Criteria

 Criteriaには、Where句に記述する条件式を指定します。(Whereは不要です)
 ANDやORなどを使って、複数の条件を記述することもできます。

 FindFirstは、レコードの先頭から、条件に当てはまるレコードを探します。
 見つからなかった場合、NoMatchプロパティがTrueになります。
 これを利用して、見つからなかった場合にメッセージを出力しています。

 検索テキストボックスに「山」を入力して、「先頭から検索」ボタンをクリックすると、

 「山形県」のレコードにレコードセレクタが移動します。
 (このフォームは、都道府県CD・都道府県名テキストボックスをEnabled=Falseにしているので、テキストボックスにフォーカスが移動しません。)
 FindFirstは先頭から検索するので、何度「先頭から検索」ボタンをクリックしても、「山形県」になります。

 山形県の次を検索するには、FindNextを使用します。
 構文などはFindFirstと同じです。
 FindNextは、現在のレコード位置の、次のレコードから検索を行います。
 「山形県」で「次を検索」をクリックすると、「富山県」に移動します。

 以降、「次を検索」をクリックする度に、「山梨県」「和歌山県」「岡山県」「山口県」と移動し、さらにクリックすると「見つかりません」のメッセージが表示されます。

 Findは、検索開始位置と、検索方向別に、以下の4つのメソッドがあります。
FindFirst・先頭から、末尾に向かって検索
FindLast・末尾から、先頭に向かって検索
FindNext・現在の次のレコードから、末尾に向かって検索
FindPrevious・現在の前のレコードから、先頭に向かって検索

 「単票フォーム」でも同じように、レコードを検索して、そのレコードへ移動することができます。

 FindFirstを使う注意点として、Recordsetがダイナセットまたはスナップショットでなければなりません。
 また、RecordsetにADOを利用している場合は、当然DAOであるFindFirstなどは使えません。

 ユーザに提供する機能としては、これはあまり適していないように思います。
 場合によるとは思いますが、検索して該当レコードに移動するよりも、条件に当てはまるレコードのみに絞り込んで表示する方が、使い勝手が良いと思います。
 どちらかと言えば、レコード一覧などで、特定のレコードに移動したい場合に便利です。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。