こんにちは、Access大好きブロガーのなかぜんです。
「複数の条件でデータを絞り込めるようにしたいけど、どう作ればいいの?」「VBAって必要なの?」と悩んでいませんか?
実は、Accessではフォームを使って複数の条件でデータを絞り込む仕組みを作ることができます。業務でよく使う「検索画面」や「一覧フィルター」なども、ちょっとした工夫で簡単に作れるんですよ。
この記事では、初心者でもステップを追えば作れる「複数条件での絞り込みフォーム」の作り方を、やさしく丁寧に解説していきます!
複数条件で絞り込むフォームの構成イメージ
以下のようなイメージのフォームを作っていきます。
- 「顧客名」「商品名」「受注日」など、複数の検索条件を入力
- 「検索」ボタンでデータを絞り込み
- 「すべて表示」ボタンでフィルター解除
ステップ1:テーブルとクエリの準備
① サンプルテーブル「T_受注データ」
以下のようなテーブルを例にします:
- ID(主キー)
- 顧客名(テキスト型)
- 商品名(テキスト型)
- 受注日(日付/時刻型)
② 絞り込み用クエリ「Q_受注検索」
抽出条件には、フォームからの値を使えるようにします。
SELECT *
FROM T_受注データ
WHERE
([Forms]![F_受注検索]![txt顧客名] Is Null OR 顧客名 Like "*" & [Forms]![F_受注検索]![txt顧客名] & "*")
AND ([Forms]![F_受注検索]![txt商品名] Is Null OR 商品名 Like "*" & [Forms]![F_受注検索]![txt商品名] & "*")
AND ([Forms]![F_受注検索]![txt受注日] Is Null OR 受注日 = [Forms]![F_受注検索]![txt受注日]);
ポイント:各条件に「Is Null OR …」を入れることで、空欄でも検索できるようになります。
ステップ2:検索フォームを作成しよう
① 新しいフォーム「F_受注検索」を作成
以下のコントロールを配置します:
- テキストボックス:txt顧客名
- テキストボックス:txt商品名
- テキストボックス:txt受注日
- コマンドボタン:cmd検索
- コマンドボタン:cmdすべて表示
② ボタンにVBAコードを設定
検索ボタンのVBAコード:
Private Sub cmd検索_Click()
Me.Requery
End Sub
解説:フォームのレコードソースが「Q_受注検索」になっていれば、このコードでフォームが再表示され、条件に応じて絞り込まれます。
すべて表示ボタンのVBAコード:
Private Sub cmdすべて表示_Click()
Me.txt顧客名 = Null
Me.txt商品名 = Null
Me.txt受注日 = Null
Me.Requery
End Sub
解説:入力欄をクリアして再表示することで、全件表示が可能になります。
注意点とよくあるミス
- フォーム名やテキストボックス名のスペルミスに注意
- クエリ実行時に「入力パラメータの値を入力してください」と出たら、名前の参照ミスの可能性大
- 日付の比較には「=」ではなく「Between」などを使うと柔軟性アップ
応用ポイント(中級者向け)
① コンボボックスで選択式にする
よく使う項目はコンボボックスにすることで、ミスを減らし操作性アップ!
② SQL文をVBAで動的に組み立てる
Dim strSQL As String
strSQL = "SELECT * FROM T_受注データ WHERE 1=1"
If Not IsNull(Me.txt顧客名) Then
strSQL = strSQL & " AND 顧客名 Like '*" & Me.txt顧客名 & "*'"
End If
If Not IsNull(Me.txt商品名) Then
strSQL = strSQL & " AND 商品名 Like '*" & Me.txt商品名 & "*'"
End If
Me.RecordSource = strSQL
Me.Requery
メリット:条件が増えても柔軟に対応できます。
まとめ:フォームで業務効率アップ!
今回は、Accessで「複数条件による絞り込みフォーム」を作る方法をご紹介しました。
- フォームに入力欄を作ってクエリに連携
- 検索ボタンで簡単にフィルター
- VBAで柔軟な対応も可能!
業務で検索が必要な場面では、今回のテクニックがとても役立ちます。
ではまた、Accessライフを楽しんでくださいね♪ なかぜんでした!
bookfan 1号店 楽天市場店
¥2,992 (2025/05/05 08:01時点 | 楽天市場調べ)
