「Accessのクエリで毎回フィルタ条件を書き直すのが面倒だ」「担当者別・月別の売上集計表をExcelのピボットのようにAccessで作りたいが方法がわからない」「MOS Access試験でクロス集計クエリが出題されると聞いたが何をどう覚えればいいのか」——こうした疑問を持つ方は多いです。
Accessにはパラメータクエリとクロス集計クエリという2つの強力な機能があります。パラメータクエリを使えば実行のたびに入力ダイアログが表示され、条件を入力するだけで絞り込み結果が切り替わります。クロス集計クエリはExcelのピボットテーブルと同じ「行×列」の二次元集計表をSQL1本で作成できる機能です。この2つを組み合わせると「担当者ごと・月ごとの売上合計をダイアログ入力で期間指定して表示する」といった動的レポートが実現します。
本記事では、パラメータクエリ・クロス集計クエリの仕組みから作成手順・実務での活用パターン・よくあるエラー対処、MOS Access試験の頻出パターンと攻略法まで体系的に解説します。
パラメータクエリとは何か
通常の選択クエリはデザインビューの「条件行」に固定値(例:「東京」や「>=10000」)を記述します。一方、パラメータクエリでは条件行に角括弧で囲んだ任意の文字列を記述します。
例:[検索する担当者名を入力してください]
クエリを実行すると角括弧内のテキストがダイアログのメッセージとして表示され、ユーザーが入力した値が条件として使われます。毎回クエリのデザインを変更する必要がなく、同じクエリを使い回しながら柔軟に条件を変更できるのが最大のメリットです。
パラメータクエリが有効な場面
- 「担当者名」「期間」「地域」など毎回変わる条件で絞り込むとき
- フォームのボタンからクエリを実行し、入力値で動的に結果を変えたいとき
- レポートの抽出条件をユーザーに毎回指定させたいとき
- 複数の担当者が同じデータベースを使い、それぞれ自分のデータだけ確認したいとき
単一パラメータクエリの作成手順
ここでは「受注テーブル」から担当者名で絞り込むパラメータクエリを例に、作成手順を説明します。受注テーブルには「受注ID」「受注日」「担当者」「売上金額」「商品名」の各フィールドがあると仮定します。
- 「作成」タブ→「クエリデザイン」をクリックし、「受注テーブル」を追加する
- 表示したいフィールド(受注ID・受注日・担当者・売上金額など)をデザイングリッドにドラッグする
- 「担当者」フィールドの「条件」行に
[担当者名を入力してください]と記述する - 「デザイン」タブ→「実行」ボタン(赤い「!」アイコン)をクリックする
- 「担当者名を入力してください」というダイアログが表示されるので担当者名を入力してOKをクリックする
- 入力した担当者のレコードのみが表示される
角括弧内のテキストはそのままダイアログのメッセージになるため、ユーザーが迷わない分かりやすい文言を書くことが実務上のポイントです。「条件」と書くだけでは意味が伝わりません。「担当者名を入力(例:田中)」のように具体例を添えると親切です。
ワイルドカードと組み合わせた部分一致検索
パラメータクエリでは条件行に Like 演算子とワイルドカード(*)を組み合わせると部分一致検索ができます。
例:Like "*" & [商品名の一部を入力してください] & "*"
この記述で「レポート」と入力すれば「月次レポート用紙」「業務レポートファイル」など入力文字を含む全レコードが抽出されます。完全一致ではなくキーワード検索のような挙動が必要な場合に活用してください。
複数パラメータの設定と日付範囲指定
実務では「開始日~終了日の期間で絞り込む」など複数のパラメータを組み合わせるケースが多いです。
日付範囲のパラメータ設定
- 「受注日」フィールドの「条件」行に
>=[開始日を入力] And <=[終了日を入力]と記述する - 実行するとまず「開始日を入力」、次に「終了日を入力」の順にダイアログが表示される
- 各ダイアログに日付(例:2026/01/01)を入力するとその期間のレコードのみが表示される
複数のパラメータはデザイングリッドで左上に配置されているフィールドから順番にダイアログが表示されます。ユーザーに分かりやすい順序でフィールドを配置しておくのがポイントです。「担当者→開始日→終了日」の順に並べると操作感が自然になります。
パラメータのデータ型を明示的に設定する
日付や数値のパラメータはデータ型を明示しないと文字列として扱われてしまい、正しく比較できない場合があります。「デザイン」タブ→「パラメーター」をクリックすると「クエリパラメーター」ダイアログが開きます。
| パラメータ名 | データ型 | 用途 |
|---|---|---|
| [開始日を入力] | 日付/時刻型 | 日付範囲の下限 |
| [終了日を入力] | 日付/時刻型 | 日付範囲の上限 |
| [最低金額を入力] | 通貨型 | 売上金額の下限フィルタ |
| [担当者名を入力してください] | テキスト型 | 担当者絞り込み |
データ型を設定しておくと、ユーザーが誤った形式を入力したときにエラーメッセージが表示されます。日付型パラメータを設定することで「2026-01-01」「2026/1/1」など複数の書式を自動認識して変換してくれる利点もあります。
フォームの入力値をパラメータに使う高度な方法
実業務では、ダイアログではなくフォーム上のテキストボックスやコンボボックスから値を取得してクエリを実行するパターンが多く使われます。この場合、クエリの条件行にフォームコントロールを参照する式を記述します。
書式:Forms![フォーム名]![コントロール名]
例えば「F_検索」フォームの「txt担当者」テキストボックスの値を使うなら、条件行に Forms![F_検索]![txt担当者] と記述します。フォームが閉じている状態でこのクエリを実行するとエラーになるため、フォームからボタン経由でクエリを実行する設計にするのが基本です。
| 方式 | メリット | デメリット |
|---|---|---|
| 角括弧パラメータ(ダイアログ) | 設定が簡単・フォーム不要 | 入力UIを自由に設計できない |
| Forms!参照方式 | コンボボックス等UIを自由に設計できる・入力検証もフォーム側で完結する | フォームが開いている必要がある |
「F_月次レポート」フォームに「年」を選ぶコンボボックスと「集計実行」ボタンを設置し、ボタンのクリックイベントでパラメータクエリを呼び出すのが典型的な実装パターンです。この設計にするとAccessに慣れていない社員でも直感的に操作できます。
クロス集計クエリとは何か
クロス集計クエリ(TRANSFORM文)は、行見出し・列見出し・集計値の3要素で構成される二次元の集計表を作成するクエリです。Excelのピボットテーブルと同じ見た目の表をSQLで固定的に定義できます。
例えば「担当者(行)×月(列)の売上合計」の表を作成する場合、通常のSELECT+GROUP BYクエリでは行方向の集計しかできません。クロス集計クエリを使うと月ごとの列が自動で追加され、一覧性の高い集計表になります。
| 担当者 | 1月 | 2月 | 3月 | 合計 |
|---|---|---|---|---|
| 田中 | 320,000 | 410,000 | 380,000 | 1,110,000 |
| 鈴木 | 270,000 | 350,000 | 420,000 | 1,040,000 |
| 山本 | 180,000 | 200,000 | 310,000 | 690,000 |
クロス集計クエリが有効な場面
- 担当者別・月別の売上集計表をデータベース上で直接作成したいとき
- 地域別・商品カテゴリ別の数量集計を一覧できる形で出力したいとき
- 月次レポートの基礎データをAccessクエリで自動生成したいとき
- MOS Access試験のクエリ出題範囲を体系的に習得したいとき
クロス集計クエリウィザードによる作成手順
Accessにはクロス集計クエリを対話形式で作成できるウィザードが用意されています。初めて作成する場合はウィザードを使うと設定のイメージが掴みやすいです。
- 「作成」タブ→「クエリウィザード」をクリックする
- 「クロス集計クエリウィザード」を選択してOKをクリックする
- 集計元となるテーブルまたはクエリを選択する(例:「受注テーブル」)
- 行見出しにするフィールドを選択する(例:「担当者」。最大3フィールド選択可)
- 列見出しにするフィールドを選択する(例:「受注日」)
- 列見出しの日付フィールドを使う場合は集計単位を選択する(年・四半期・月・日など)
- 集計するフィールドと集計関数を選択する(例:「売上金額」・「合計」)
- 「各行の合計を計算しますか?」に「はい」を選択すると右端に行合計が追加される
- クエリ名を入力して「完了」をクリックする
ウィザードが完了すると自動的にクエリが保存されます。完成したクエリをSQLビューで確認すると次のようなTRANSFORM構文が生成されています。
TRANSFORM Sum(受注テーブル.売上金額) AS 売上金額の合計
SELECT 受注テーブル.担当者, Sum(受注テーブル.売上金額) AS [合計]
FROM 受注テーブル
GROUP BY 受注テーブル.担当者
PIVOT Format([受注日],"m月");
TRANSFORM句が集計式、PIVOT句が列見出しの定義、SELECT句が行見出しとオプションの行合計を定義する構造です。SQLビューで直接編集すれば、ウィザードでは設定しにくい複雑な条件も追加できます。
デザインビューでクロス集計クエリを設定する
ウィザードで作成後にデザインビューを開くと、通常のSELECTクエリにはない「集計」行と「クロス集計」行が表示されています。この2行の設定がクロス集計クエリの核心です。
| フィールド | 「集計」行の設定 | 「クロス集計」行の設定 | 役割 |
|---|---|---|---|
| 担当者 | グループ化 | 行見出し | 縦軸(行)のグループ |
| 受注日(月) | グループ化 | 列見出し | 横軸(列)のグループ |
| 売上金額(集計) | 合計 | 値 | 各セルに入る集計値 |
| 売上金額(行合計) | 合計 | 行見出し | 各行の合計(右端列) |
「クロス集計」行で設定できる値は「行見出し」「列見出し」「値」の3種類のみです。「値」に設定できるフィールドは1つだけ(集計関数が適用される)という制約を覚えておいてください。集計関数は Sum・Count・Avg・Max・Min・First・Last などから選べます。
列順序を固定する方法
クロス集計クエリは列見出しの値がデータに依存するため、実行するたびに列の数や順序が変わる可能性があります。月番号を列見出しに使う場合、「1月」「10月」「11月」「12月」「2月」…のようにアルファベット順(文字列順)で並んでしまうことがあります。
これを防ぐにはクロス集計クエリのプロパティ「列見出し」に列名を明示的に指定します。
- デザインビューで何もない場所を右クリックし「プロパティ」を開く
- 「列見出し」に
1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月のように半角セミコロン区切りで列名を入力する - これによりデータが存在しない月も空列として表示され、順序も固定される
列見出しを固定しておくと、レポートとのデータ連携やExcelへのエクスポート後の列配置が安定します。本番運用のシステムでは必ず設定しておくのが賢明です。
パラメータクエリとクロス集計クエリを組み合わせる
クロス集計クエリにパラメータを組み込むことで「対象年を指定して月別集計を動的に切り替える」機能が実現します。
組み合わせの設定手順
- クロス集計クエリをデザインビューで開く
- 「受注日」フィールドの条件行に
Between [開始年月を入力(例:2026/01/01)] And [終了年月を入力(例:2026/12/31)]を入力する - 「デザイン」タブ→「パラメーター」でパラメータのデータ型を「日付/時刻型」に設定する
- クエリを実行すると期間ダイアログが表示され、入力した期間の月別集計表が生成される
実務では「F_月次レポート」フォームのコンボボックスで年を選択→ボタンクリックでこのクエリを呼び出し→レポートに連携する、というパターンが典型的な使い方です。フォームとクエリとレポートを組み合わせることで、ユーザーが集計期間を選ぶだけで印刷可能な月次レポートが生成される仕組みが完成します。
よくあるエラーと対処法
エラー1:パラメータ入力ダイアログが意図しないタイミングで表示される
原因:フィールド名にスペルミスや余分な空白がある場合、Accessはそのフィールド名を「パラメータ」と誤認識します。例えば [売上金額] を参照したつもりが [ 売上金額] と先頭に空白が混入していると、未定義のパラメータとして扱われます。
対処:角括弧内の文字列を実際のフィールド名と一字一句一致させる。デザインビューでフィールドをダブルクリックして選択し直すのが確実です。
エラー2:日付パラメータに値を入力したのに0件になる
原因:パラメータのデータ型が未設定(テキスト型として扱われる)のため、日付フィールドとの比較が正しく行われていない。文字列の「2026/01/01」と日付型の2026/01/01は等号比較でも一致しない。
対処:「デザイン」タブ→「パラメーター」でデータ型を「日付/時刻型」に明示的に設定する。
エラー3:クロス集計クエリで列の順序が毎回変わる
原因:クロス集計クエリの「列見出し」プロパティが未設定のため、データ内の列値を文字列順で並べている。
対処:デザインビューのプロパティシートで「列見出し」に列名をセミコロン区切りで明示指定する。
エラー4:Forms!参照のパラメータが「パラメーター値の入力」ダイアログになる
原因:クエリを実行した時点でフォームが閉じている、またはコントロール名の記述が実際のコントロール名と一致していない。
対処:①フォームが開いた状態でのみこのクエリを実行するようにマクロやVBAで制御する。②コントロール名のスペルを正確に確認する(プロパティシートの「その他」タブで「名前」を確認)。③フォーム名・コントロール名ともに半角スペースが混入していないか確認する。
エラー5:クロス集計クエリでNullが表示される
原因:列見出しに指定した値に対応するデータが存在しない場合、そのセルはNull(空)になります。例えば1月のデータがない担当者の1月セルはNullです。
対処:SQLビューでTRANSFORM句を TRANSFORM Nz(Sum(売上金額),0) のようにNz関数でラップすると、Nullを0として表示できます。Nz(Null to Zero)はAccessのNull変換関数です。
MOS Access試験の頻出パターンと対策
MOS Access試験(一般・Expert)ではパラメータクエリ・クロス集計クエリの理解と操作が問われます。出題パターンと対策を整理します。
頻出パターン1:パラメータクエリの作成・実行
「既存のクエリに条件行を追加し、実行時に絞り込み条件を入力できるようにする」という問題が出題されます。角括弧を使ってパラメータを記述する手順を練習しておきましょう。特に角括弧の中の文字列がそのままダイアログのメッセージになるという挙動を体感しておくことが重要です。Between And を使った日付範囲指定も頻出です。
頻出パターン2:クロス集計クエリウィザードの操作
「〇〇テーブルをもとに、△△を行見出し、□□を列見出し、××の合計を値とするクロス集計クエリを作成する」という問題が典型です。ウィザードの手順(テーブル選択→行見出し→列見出し→集計値の4ステップ)を繰り返し練習してください。ウィザードの「月」「四半期」などの時系列集計単位の選択肢も確認しておきましょう。
頻出パターン3:クロス集計クエリのデザインビュー修正
「列見出しの順序を指定する」「集計関数を合計から件数に変更する」といった修正問題も出題されます。デザインビューの「集計」行と「クロス集計」行の設定値を変更する操作に慣れておきましょう。プロパティシートの「列見出し」の位置と記述形式(セミコロン区切り)を確認しておくことも大切です。
頻出パターン4:パラメータのデータ型設定
「日付型のパラメータクエリを正しく動作させる」ために「クエリパラメーター」ダイアログでデータ型を設定する問題が出ます。「デザイン」タブ→「パラメーター」のボタン位置と操作手順を確認しておいてください。
| 試験出題項目 | 操作場所 | 覚えるポイント |
|---|---|---|
| パラメータ条件の記述 | デザインビュー・条件行 | [メッセージ] という角括弧書式 |
| パラメータのデータ型設定 | デザインタブ→パラメーター | 日付型・数値型の指定 |
| ワイルドカード部分一致 | デザインビュー・条件行 | Like "*" & [入力] & "*" |
| クロス集計ウィザード | 作成→クエリウィザード | 行・列・値の3要素の選択順 |
| 列見出しの固定 | デザインビュー・プロパティ | 「列見出し」に;区切りで明示 |
| 集計関数の変更 | デザインビュー・集計行 | Sum/Avg/Count/Max/Minを選択 |
MOS試験対策の効果的な練習方法
パラメータクエリは「自分でサンプルテーブルを作り、実際にパラメータを設定して実行する」という体験型学習が最も効果的です。ダイアログが表示されてフィルタされる体験を繰り返すと、試験本番で操作手順を迷いなく再現できます。
クロス集計クエリは「ウィザードで作成→SQLビューで確認→デザインビューで修正」という3ステップを一セットとして練習してください。TRANSFORM構文の構造(TRANSFORM+SELECT+FROM+GROUP BY+PIVOT)を目で確認しておくと、デザインビューの各行の意味が体系的に理解できます。
まとめ
パラメータクエリとクロス集計クエリは、Accessを「データを蓄積するだけのツール」から「動的に分析できるツール」へと引き上げる核心的な機能です。
- パラメータクエリ:条件行に角括弧でメッセージを記述するだけで実行時ダイアログが実現する。日付型・数値型のパラメータはデータ型を明示設定することでエラーを防げる
- ワイルドカード組み合わせ:Like "*" & [パラメータ] & "*" で部分一致検索が実現する
- クロス集計クエリ:ウィザードで行見出し・列見出し・集計値を選ぶだけで二次元集計表が作成できる。列順序はプロパティの「列見出し」で固定する
- 組み合わせ:クロス集計クエリにパラメータを追加すれば期間指定の動的集計レポートが実現する
- MOS試験:パラメータ条件の記述・データ型設定・ウィザード操作の3点が頻出。デザインビューの「集計」行と「クロス集計」行の役割を正確に理解して繰り返し練習することが合格への近道
次のステップとして、実際のテーブルでパラメータクエリを作成し日付範囲指定の動作を確認してみてください。その後クロス集計クエリウィザードを動かして二次元集計の便利さを実感すると、Accessの集計能力が一気に広がります。MOS Access試験を目指す方は、この2種類のクエリを繰り返しデザインビューで作成・修正する練習を重ねてください。
