ACCESS クエリだけで検索フォームを作る方法

クエリだけで検索フォームを作る方法

ACCESSでもっともよく作成するフォームは検索フォームではないでしょうか。

この検索フォーム、作成する方法は何種類もあります。
最も自由度が高いのはVBAを使って作成する方法ですが、VBAはちょっと難しそうで・・・という方も多いのではないでしょうか。

そんな方のために、VBAを使用せずにクエリだけで検索フォームを作成する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。

完成形

最初に、完成形を示します。

下記のように売上日と顧客名で売上を検索するフォームです。

例えば、売上日を指定して検索ボタンを押すと下記のように、該当期間中の売上のみが抽出できます。

また。顧客名を指定すると、指定した文字列を含む顧客名のレコードが部分一致で抽出できます。

以降、このフォームの作成方法を見ていきましょう。

テーブルの作成

初めに、フォームの抽出対象となるテーブルを作成します。

今回は下記のフィールドレイアウトでテーブルを作成しました。

データシートビューでは、下記のデータが入力してあります。

クエリの作成

次に、先ほどのテーブルを基にしたクエリを作成します。

このクエリを検索フォームのレコードソースにします。

売上検索フォームに表示するフィールドを選択してクエリの下部(デザイングリッド)に配置していきます。

顧客名で検索を行いたいのですが、TRN_売上には顧客IDのみしかないため、MST_顧客テーブルも表示させ、テーブル間のリンクを設定したうえで顧客名をデザイングリッドに配置します。

今回は売上日と顧客名でレコードの抽出を行いますので、この2つのレコードには抽出条件が設定されています。

この抽出条件設定は、フォームを作成した後に設定しますので、説明は後述します。

フォームの作成

次に検索結果を表示するフォームを作成します。

メニューから「作成」→「フォームウィザード」を使用して作成しましょう。

先ほど作成したクエリをレコードソースに選択し、選択可能なフィールドからすべてのフィールドを「>>」ボタンで選択したフィールドへ移します。

次にフォームのレイアウトを聞かれます。

今回は、複数のレコードを一覧表示する形にしたいので、「表形式」を選択しましょう。

ウィザードでフォームが作成されました。

これを基に見栄えを修正して、下記のようなフォームにしています。

検索条件はフォームヘッダーに、非連結のテキストボックスを作成しています。

売上日検索のコントロール名は、「売上日検索FROM」と「売上日検索TO」、顧客名検索のコントロール名は「顧客名検索」です。

フォームのコントロール名は、VBAやクエリでの呼び出し時に使用するので、わかりやすい名前を付けておきましょう。

クエリの抽出条件設定

それでは、クエリの抽出条件設定に戻ります。

売上日(期間指定)

先ほど作成したクエリをデザインビューで開いて、売上日の抽出条件欄を選択します。

抽出条件はここに直接書き込んでも良いですが、複雑な条件を記載する場合はビルダーを使用すると便利です。

ビルダーはACCESSのメニューの「クエリデザイン」から「ビルダー」ボタンで起動できます。

今回はビルダーで下記の条件を設定します。


>=[Forms]![test_売上検索]![売上日検索FROM] And <=[Forms]![test_売上検索]![売上日検索TO]

test_売上検索フォームの売上日検索FROMよりも売上日が大きく、かつ、test_売上検索フォームの売上日検索TOよりも売上日が小さい、という抽出条件になっています。

[Forms]![]test_売上検索]の部分が、フォームのコントロールを参照している箇所です。

この部分は手入力しないとも、式ビルダーの下段部分で選択することが可能です。

上記のように、「式の要素」で検索フォームを指定すると、「式のカテゴリ」にそのフォームにあるコントロールが一覧表示されます。

その中から値を参照するコントロール(今回は売上日検索FROM)を選択し、「式の値」で値を選択すると、上段の式に自動的に文字が入力されます。

顧客名(テキスト部分一致)

次に顧客名の抽出条件を設定します。

クエリのデザインビューで「顧客名」の抽出条件にカーソルを合わせて、ビルダーをクリックします。

なお、この際、先ほど作成した売上日の抽出条件と同じ行に条件を記載すると、売上日および顧客名をAnd条件(かつ)で抽出します。

売上日と行をずらして記載すると、Or条件(または)で抽出します。

ビルダーでは以下のように設定します。


Like ("*" & [Forms]![test_売上検索]![顧客名検索] & "*")

Likeを使ってあいまい検索の条件設定をします。

フォームの値を呼び出す部分は先ほどの売上日と同じですが、前後に「*」を付けてあいまい検索にしている部分に注意ください。

また、VBAでLikeを使う場合とは記載方法が異なるので、この点も注意です。

これでクエリの抽出条件設定も完了です。

検索ボタンの作成

これでクエリとフォームの設定は完了しました。

最後に、検索ボタンの作成をします。

クエリだけで検索フォームを作成する、というテーマなのですがここだけはどうしてもVBAを使用させてください。
ただし、とても簡単な記述ですので、初めての方でもできると思います。

まず、なぜ検索ボタンを設置するか、についてです。

単純に操作上わかりやすい、ということもありますが、実はフォームで検索をする場合はフォームで入力した抽出条件に合わせて、リアルタイムにはクエリの結果が反映されない、という課題があります。

例えば、下記のようにフォームの検索条件に日付を指定しました。
しかし、現時点ではフォームにレコードが表示されていません。

一方で、この状態で直接、フォームのレコードソースになっているクエリを開くと、レコードが1件表示されます。

フォームは、レコードソースのクエリの結果を表示しているので、フォームにも1件表示されないとおかしいですよね?

これは、フォーム側の表示が最新化されていないため、クエリの計算結果を反映できていないのです。

そこで、検索条件を入れた後にフォームの表示を最新化するボタンを設置します。それが今回の検索ボタンです。

それでは作成方法を見ていきましょう。

フォームをデザインビューで開き、検索ボタンを選択した状態で、右側のプロパティシートのイベントタブを開きます。

クリック時イベントを選択して、一番右の「…」ボタンを押してイベントプロシージャを設定します。

ビルダーの選択ウィンドウが表示されますので、コードビルダーを選択して、OKを押します。

コードビルダー

すると、Bisual Basicエディターが立ち上がります。

現在、Private Sub 検索_ボタン_Click()という部分にカーソルがあるはずですので、End Subとの間に下記のように記載します。


DoCmd.Requery

これは、クエリを最新化せよ、という命令文です。

これだけでOKですので、保存してVisual Basic Editorを閉じましょう。

改めて、フォームをフォームビューで開き、検索条件を入れて「検索」ボタンを押してみましょう。

今回は無事に結果が表示されるはずです。

このように、クエリだけでも検索フォームを作成することは可能です。

ただ、どうしても複数の検索条件を組み合わせて、さらにAnd条件やOr条件を複雑に設定することはクエリだけでは難しくなります。

はじめはクエリで検索フォームを作成し、物足りなくなったらVBAでの検索フォームに挑戦するのがよいでしょう。

VBAでの検索フォーム作成は以下の記事をご参照ください。

ACCESS 検索フォーム作成方法

以上、クエリだけで検索フォームを作成する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

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