Accessパラメータクエリの作り方と日付や複数条件の指定

概要

この記事の結論
Accessのパラメータクエリは、実行時に渡した値を抽出条件に使うクエリです。デザインビューの抽出条件に[支店を入力]などを角括弧付きで指定し、パラメーターのデータ型を設定します。日付の範囲は終了日の時刻まで含める条件にし、複数条件ではANDとORを区別します。想定外の入力画面が出る場合は、名前の誤記や参照切れも調べてください。
パラメータクエリとは、実行時に受け取った値を条件や式に使い、同じ定義を再利用するクエリです。

この記事でわかること

  • 角括弧で実行時の条件を指定
  • パラメータの型を明示
  • 日付は終了時刻の漏れに注意
  • 不要な入力要求は参照を確認

この記事の主な内容

  1. パラメータクエリの役割と練習データ
  2. 抽出条件を実行時に入力するクエリを作る
  3. 文字列と数値の型を明示する
  4. 日付の範囲で終了日の時刻を含める
  5. 複数条件とあいまい検索を組み合わせる
  6. 検索フォームやVBAから値を渡す
  7. 想定外の入力要求と抽出漏れを調べる
  8. よくある質問

想定読了時間:約12分~15分


パラメータクエリの役割と練習データ

パラメータクエリは、毎回異なる値を受け取り、同じクエリの条件として使う仕組みです。例えば「東京の売上」「大阪の売上」を別々に作らず、実行時に支店名を指定できます。値は入力ダイアログだけでなく、検索フォームやVBAから渡すこともできます。[S1][S2]

本記事では選択クエリで練習します。クエリを実行して結果を見るだけなら元の値を変更しませんが、更新可能な結果画面で値を編集すると元テーブルへ反映されます。業務ファイルのコピーか、新しいACCDBを使ってください。

パラメータクエリの仕組みについて、条件を入力、保存済みクエリ、該当レコードを表示を示した図

期待する結果が分かるデータを用意する

練習用テーブルをT_売上とします。売上IDは数値型の長整数で主キー、売上日時は日付/時刻型、支店は短いテキスト、数量は数値型の長整数、商品名は短いテキストとします。以下は説明用の架空データです。

売上ID売上日時支店数量商品名
12026/09/01 09:00東京2ノートA
22026/09/15 12:00大阪5ペンB
32026/09/30 15:30東京4ノートB
42026/10/01 00:00東京1ペンA
52026/09/30 00:00大阪3ノートC

支店が東京ならID1・3・4の3件、9月全体ならID1・2・3・5の4件です。先に正解を控えておくと、実行できたことと、正しく抽出できたことを分けて確認できます。


抽出条件を実行時に入力するクエリを作る

デザインビューの抽出条件へ、角括弧で囲んだ質問文を入力します。例えば支店列に[支店を入力]と書くと、クエリを実行したとき、その文言を使う入力画面が表示されます。[S1]

1. [作成]から[クエリデザイン]を開き、T_売上を追加します。

2. 売上ID、売上日時、支店、数量、商品名を下段へ追加します。

3. 支店列の[抽出条件]に[支店を入力]と記入します。

4. [パラメーター]を開き、同じ名前の型を短いテキストとして指定します。

5. Q_支店別売上という名前で保存し、データシートビューで実行します。

6. 入力画面へ東京と入力し、ID1・3・4が表示されるか確認します。

質問文はパラメーターの設定と抽出条件で一致させます。前後の空白、全角・半角、似た文字の違いにも注意してください。質問文を引用符で囲むと、入力を求める名前ではなく文字列として解釈される場合があります。

作成する4ステップについて、選択クエリ、角括弧の条件、データ型、実行と確認を示した図

SQLビューで対応関係を確認する

同じ内容をSQLで表すと、次のようになります。PARAMETERSは受け取る値の名前と型、WHEREは受け取った値を使う条件です。定義を書く場合、PARAMETERSはSELECTより前へ置きます。[S2]

PARAMETERS [支店を入力] Text (50);
SELECT [売上ID], [売上日時], [支店], [数量], [商品名]
FROM [T_売上]
WHERE [支店] = [支店を入力]
ORDER BY [売上ID];

入力画面に角括弧や引用符を付けて東京と入力する必要はありません。支店名そのものを入れます。実行後に大阪でやり直す場合は、クエリを閉じて再度開くなどして、新しい条件で再実行してください。


文字列と数値の型を明示する

パラメータの型は、比較するフィールドに合わせます。数値、通貨、日付などの型を明示すると、意図しない値を入力した際に原因を判断しやすくなります。商品コードのように見た目が数字でも、先頭の0が意味を持つ場合はテキスト型が適していることがあります。[S1]

条件の例型の考え方入力例
支店名の一致短いテキスト東京
最小数量以上数値型の長整数3
最小金額以上通貨型10000
売上期間日付/時刻型2026/09/01
顧客コード元フィールドと同じテキスト型0012
入力値の型をそろえるについて、支店:テキスト、数量:長整数、売上日:日付と時刻を示した図

数量が指定値以上の行を抽出する例は次のとおりです。最小数量に3を指定すると、練習データではID2・3・5の3件が対象になります。

PARAMETERS [最小数量] Long;
SELECT [売上ID], [数量], [支店]
FROM [T_売上]
WHERE [数量] >= [最小数量]
ORDER BY [売上ID];

整数の数量を受け取るなら、小数や文字列をそのまま通す運用にはしません。業務条件として0以上、開始日以下などの制限が必要なら、型指定に加えて検索フォーム側などで入力内容を確認します。型が正しいことと、業務上妥当であることは別です。


日付の範囲で終了日の時刻を含める

売上日時に時刻が含まれる場合、終了日だけを上限として比較すると、その日の午後を取りこぼすことがあります。日付だけを入力する運用では、「開始日以上、終了日の翌日未満」という範囲にすると終了日全体を含められます。

例えば9月1日から9月30日までを指定する場合、9月30日15:30のID3も対象にします。次のSQLは開始日・終了日に時刻を含めず入力する前提です。パラメータは日付/時刻型にします。[S1][S2]

PARAMETERS [開始日] DateTime, [終了日] DateTime;
SELECT [売上ID], [売上日時], [支店]
FROM [T_売上]
WHERE [売上日時] >= [開始日]
  AND [売上日時] < DateAdd(“d”, 1, [終了日]) ORDER BY [売上日時], [売上ID];

終了日は翌日未満で抽出について、開始日以上、終了日の午後も含む、翌日午前0時は除外を示した図
保存日時9月1日から9月30日の結果
2026/09/01 09:00含む
2026/09/30 00:00含む
2026/09/30 15:30含む
2026/10/01 00:00含めない

Betweenを使う場合の注意

Betweenは上下の境界を含む比較です。日付だけで入力した9月30日は通常その日の午前0時を表すため、時刻付きデータの9月30日全体を意味するとは限りません。日付のみの値が保存される列か、時刻もある列かを見分けて条件を選びます。[S3]

なお、終了日に時刻まで入力して「その瞬間まで」を抽出したいなら、翌日未満の式とは要件が違います。フォームでは日付のみの入力にするか、日時の入力にするかを明示し、開始が終了を超える場合は実行前に案内を出す設計にします。


複数条件とあいまい検索を組み合わせる

クエリデザインでは、同じ抽出条件行に置いた条件がAND、別の「または」行に分けた組み合わせがORになります。「東京で数量3以上」なのか、「東京または数量3以上」なのかを先に文章で決めると、条件を置く位置を選びやすくなります。

条件練習データで該当するID
東京 AND 数量3以上3
東京 OR 数量3以上1、2、3、4、5
大阪 AND 9月の売上2、5
ANDとORを使い分けるについて、同じ条件行:AND、別の条件行:OR、部分一致:Likeを示した図

部分一致はLikeと組み合わせる

通常のANSI-89設定のACCDBでは、商品名に検索語を含む条件をLike “*” & [商品名の一部] & “*”と書けます。「ノート」を入力すると、練習データのID1・3・5が該当します。ANSI-92設定ではワイルドカードが%になるため、設定に合わせてください。

PARAMETERS [商品名の一部] Text (50);
SELECT [売上ID], [商品名]
FROM [T_売上]
WHERE [商品名] Like “*” & [商品名の一部] & “*”
ORDER BY [売上ID];

入力値に*や?などを含めると、それ自体が検索パターンとして働くことがあります。一般利用者向けには「任意の文字列を含む検索」なのか「ワイルドカードを使える検索」なのかを決め、必要に応じて入力記号を制限します。

空欄を全件表示として扱う場合

何も入力しないと自動で全件になるわけではありません。任意の条件にしたい場合は、例えばWHERE ([支店] = [支店を入力] OR [支店を入力] Is Null)のように、Null時に条件を外す設計が必要です。空文字列とNullは別なので、検索フォームでは空文字をNullへそろえるなどの扱いも決めます。

パラメータクエリの影響範囲が分からない場合

設定だけで解決できない場合や、既存のフォーム・クエリ・外部連携への影響を判断できない場合は、Accessの教科書へご相談ください。対象の画面、起きている症状、変更したい内容を整理すると、調査や改修の範囲を検討しやすくなります。


検索フォームやVBAから値を渡す

条件が増えたり毎日検索したりする場合は、専用フォームに支店や期間の欄を配置すると入力内容を一覧で確認できます。入力欄は非連結にし、実行前に未入力や期間の前後関係をチェックする構成が分かりやすくなります。

フォームF_売上検索のtxt支店を条件に使う例では、クエリ側で[Forms]![F_売上検索]![txt支店]を参照します。フォームを開いていることが前提です。フォーム名やコントロール名を間違えると、意図しない入力要求が出ることがあります。[S1]

条件の渡し方を選ぶについて、少数条件:入力画面、繰り返し検索:フォーム、自動処理:VBAを示した図

DAOで保存済みクエリへ値を渡す

VBAからQueryDefを実行する場合、画面で使う入力ダイアログが自動で表示されると期待せず、Parametersコレクションへ値を設定します。以下は先ほどのQ_支店別売上へ東京を渡し、結果を読み取る例です。[S4]

Public Sub 東京の売上を確認する()
    On Error GoTo ErrHandler
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set qd = db.QueryDefs(“Q_支店別売上”)
    qd.Parameters(“支店を入力”) = “東京”
    Set rs = qd.OpenRecordset(dbOpenSnapshot)

    Do Until rs.EOF
        Debug.Print rs!売上ID
        rs.MoveNext
    Loop

ExitHere:
    On Error Resume Next
    If Not rs Is Nothing Then rs.Close
    Set rs = Nothing
    Set qd = Nothing
    Set db = Nothing
    Exit Sub
ErrHandler:
    MsgBox “抽出に失敗しました。エラー番号: ” & Err.Number
    Resume ExitHere
End Sub

標準モジュールに置く説明用の例です。DAO型が認識されない場合は、VBEの参照設定でAccess Database Engineのオブジェクトライブラリ等を確認します。複数のパラメータがあるクエリでは、実行前にすべてへ必要な値を設定してください。


想定外の入力要求と抽出漏れを調べる

入力画面が表示されたからといって、必ず意図したパラメータクエリとは限りません。フィールド名の誤記や削除したコントロールへの参照も、値の入力を求める原因になります。画面に出た名前を手掛かりに、SQLと元データを確認します。

症状主な確認先対応
予定外の名前を尋ねられるフィールド名やフォーム名誤記・参照切れを修正
同じような質問が2回出るパラメータ名の表記差空白や全半角を含め統一
型が一致しないパラメータと列のデータ型比較対象と型を合わせる
月末の午後だけ抜ける終了日の条件翌日未満の範囲を検討
空欄で全件にならないNull・空文字の扱い任意条件を明示的に設計
VBAから実行できないParametersへの値設定必要な値をすべて渡す
抽出結果の確認リストについて、境界日時、空欄と取消、型の不一致、名前の誤記を示した図

実行前後の確認を固定する

最低限、既存値、存在しない値、空欄、キャンセル、境界日時、型が合わない入力を試します。入力画面でキャンセルすることは検索中止であり、空欄を確定して実行することとは別です。0件の場合も、該当データがないのか、条件が誤っているのかを練習データのIDと照合してください。

パラメータクエリを安定して使うには、質問文、データ型、期待結果の3つをセットで管理します。多数の条件や取消処理が必要になったら検索フォームへ発展させ、利用者が入力内容を確認してから実行できるようにすると使いやすくなります。


よくある質問

混同を避けるため、フィールド名とは区別できる名前を付ける方が分かりやすくなります。例えば支店フィールドの条件は「支店を入力」、数量の条件は「最小数量」とします。角括弧で囲めば何でも必ず入力用パラメータになるわけではなく、Accessが実在するフィールドとして解釈する場合もあります。パラメーターの設定画面と抽出条件で名前を一致させ、型も明示してください。実行時に表示される質問文と期待する結果を確認すると、設定間違いを見つけやすくなります。

型を省略して動く場合もありますが、特に数値、通貨、日付を扱うときは明示する方が適切です。比較するフィールドと入力値の型をそろえることで、文字を数値と比較するなどの誤りを減らせます。クエリをデザインビューで開き、パラメーターの設定から質問文と型を登録してください。数字に見える顧客コードでも、先頭の0が意味を持つならテキストとして扱う場合があります。型指定は業務上の入力チェックとは別なので、期間の前後関係なども確認します。

対象の日付に時刻が保存されている可能性があります。例えば終了日に9月30日と入力すると、通常は9月30日午前0時として比較されるため、同日15時30分の行が外れることがあります。日付だけを指定する運用なら、開始日以上かつ終了日の翌日未満という条件を検討してください。終了日時を時刻まで厳密に指定したい場合は別の条件になります。表示形式が日付だけでも保存値に時刻が含まれる場合があるので、元データと境界付近の行を確認しましょう。

自動で全件になるわけではありません。完全一致の条件にNullを渡しても、すべての値に一致することにはならないためです。任意の条件にするなら、パラメータがNullのときはその条件を外す式を明示します。また、検索フォームの空文字列とNullは別なので、入力値の整え方を決めてください。複数条件の場合は括弧を付けてANDとORの範囲を明確にします。なお、キャンセルは検索を中止する操作であり、空欄を確定して実行する場合とは区別して扱います。

クエリが参照するフィールドやフォームの名前を認識できていない可能性があります。最近フィールド名を変えた、フォームの入力欄を削除した、検索フォームを閉じた、といった変更がないか確認してください。入力画面に表示される名前を控え、SQLのフィールド名、計算式、並べ替え、フォーム参照と照合します。適当な値を入れて進めると、意図しない抽出結果になるおそれがあります。計画したパラメータなのか参照切れなのかを分けてから、原因の箇所を修正しましょう。

DAOのQueryDefから実行するときは、Parametersコレクションへ必要な値を設定します。Accessの画面でクエリを開いたときの入力ダイアログが、同じように自動表示されるとは考えないでください。保存済みクエリのパラメータ名とコード内の指定が一致しているか、複数ある場合は全部へ値を渡しているかを確認します。フォーム参照を使うクエリは、参照先が開いているかも確認が必要です。入力確認とエラー処理を用意し、未設定のまま業務処理を続けない構成にします。

関連記事

クエリの作成方法

日付の抽出条件

ワイルドカードとLike

フォームフィルターの使い方

パラメータクエリの影響範囲が分からない場合

設定だけで解決できない場合や、既存のフォーム・クエリ・外部連携への影響を判断できない場合は、Accessの教科書へご相談ください。対象の画面、起きている症状、変更したい内容を整理すると、調査や改修の範囲を検討しやすくなります。


参考情報

[S1] Microsoft クエリとフォームのパラメータ
https://support.microsoft.com/en-us/access/use-parameters-in-queries-forms-and-reports

[S2] Microsoft PARAMETERS宣言
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/parameters-declaration-microsoft-access-sql

[S3] Microsoft 日付の抽出条件
https://support.microsoft.com/en-us/access/date-criteria-doesn-t-work-in-my-query

[S4] Microsoft DAO QueryDef.Parameters
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/querydef-parameters-property-dao

[S5] Microsoft ワイルドカードの種類
https://support.microsoft.com/en-us/access/access-wildcard-character-reference

TOP