フォームに検索機能を実装する|みどシステム工房
フォームに検索機能を実装する
データ量が少ないときは、1レコードごとに探すことも可能ですが、レコード数が増えてくるとだんだん苦痛になります。
そんなとき「検索機能があれば・・・」と思います。
簡単な方法で検索機能を実装してみます。

ゴールデンゲートブリッジ
USSミッドウェー博物館(サンディエゴ)
【アメリカ合衆国カルフォルニア州】


簡単な方法は

Accessの最大の特徴といえば、クエリです。

クエリを使って検索機能を設置する方法が一番簡単です。

しかし、複雑なクエリになると検索後の処理をしたいときに更新できなかったり、エラーが出ることもあります。

そのようなときは、VBAで処理します。

VBAは敷居が高いかもしれませんが、数行記述するだけです。

【AD】

検索機能実装例

サンプルアプリ「パン屋の原価計算」に検索機能を実装してあります。

一例として、パンに使う材料の一覧表を表示するフォームでは、材料の登録の有無を調べたり、材料を検索して該当の材料のデータを修正するなどに使用します。

検索の方法は、テキストボックスに文字を入力し、[検索]ボタンをクリックするとその文字に該当するデータを抽出します。

[クリア]ボタンのクリックで、テキストボックス内の文字を初期化(削除)し、一覧表がリセットされて全ての材料が表示されます。

 

検索機能の実装例
検索機能の実装例

フォームの設定

フォームは、シンプルに「フォームヘッダー」にテキストやボタンなどを配置してここからデータ入力や検索ができるにします。

ここに検索語を入力するテキスト(検索テキスト)と検索を実行する[検索]ボタン(cmd_検索)と検索を解除する[クリア]ボタン(cmd_クリア)を設置します。

[詳細]に登録した材料のデータの表示と検索結果のデータを表示させるようにします。

フォームプロパティのレコードソースに材料のデータが格納されているテーブルを設定します。

 

コードの記述

[検索]ボタン

VBAでコードを記述します。

[検索]ボタンをクリックしたときに処理するので、[検索]ボタンのプロパティの中にある「クリック時」で「イベントプロシージャ―」を選択し、エディターを起動させて次のようにコードを記述します。

Private Sub cmd_検索_Click()
Me.Filter = "材料 like'*" & 検索テキスト & "*'"
Me.FilterOn = True
If Me.Recordset.RecordCount = 0 Then
Me.Filter = "ブランド名 like'*" & 検索テキスト & "*'"
End If
If Me.Recordset.RecordCount = 0 Then
MsgBox "登録がありません。", vbExclamation, "処理結果"
Call cmd_検索クリア_Click
Exit Sub
End If
End Sub

このコードは、次のように処理します。

(検索テキスト)に入力された単語でデータテーブルの「材料」フィールド内を検索・データ抽出し、フォームに表示します。

もし該当するデータがなければ、次に「ブランド名」フィールド内を検索・データ抽出します。

それでも該当がなければ、「登録がありません。」とメッセージボックスを表示させます。

メッセージボックスの[OK]をクリックすると、[クリア]ボタンを自動的にクリックして検索を終了します。

単語の検索方法は、いわゆる「あいまい検索」というもので、Like演算子に抽出条件を記述します。抽出条件には、*(アスタリスク)を単語の入るテキストの前後に付けてあります。

[クリア]ボタン

Private Sub cmd_検索クリア_Click()
検索テキスト = Null
Me.FilterOn = False
Me.Requery
End Sub

[クリア]ボタンは、[検索テキスト]内に入力した文字を削除(nll)して、抽出したデータ表示リセット(解除)し、すべてのデータを表示します。

テキストのプロパティ

前後しますが、[検索テキスト]プロパティ設定について。

 

テキストの設定
テキストの設定

プロパティの中に[Enterキー入力時動作]という項目があり、選択できるようになっています。

[フィールドに行を追加]を選択すると、「改行」されます。

[既定]を選択すると、[Enter]キーを押すと[タブ移動順]に設定されているコントロールに移動します。

この機能では、次の[検索]ボタンに移動させたほうがいので、[既定]を選択します。

ちょっとした設定で使い勝手が向上します。

【AD】