2020.03.11
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】