「商品テーブルから品名だけを取り出したら同じ商品名が何十行も出てきた」「顧客IDの一覧が欲しいのにリレーション先のテーブルを結合したら重複が大量発生した」——Accessでクエリを作っていると、意図しない重複行に悩むことがあります。SQLを書けばDISTINCTキーワードで解決できますが、Accessのデザインビューだけで完結できる設定があります。それがクエリのプロパティシートにある「固有の値」(Unique Values)と「固有レコード」(Unique Records)です。
この2つのプロパティはどちらも重複を排除するために使いますが、動作の仕組みと適した場面が異なります。正しく使い分けることで、デザインビューのまま重複のないクリーンなクエリ出力を得られます。MOS Access 365試験(MO-500)でもクエリプロパティの設定は出題範囲に含まれており、「固有の値」と「固有レコード」の違いを理解しておくことは試験対策としても重要です。
本記事では、「固有の値」と「固有レコード」のプロパティの違い・デザインビューでの設定手順・SQLビューとの対応関係・実務パターン別の使い分けガイド・よくあるつまずきと対処法・MOS試験攻略ポイントまでステップごとに解説します。
「固有の値」と「固有レコード」の違いを整理する
まず、2つのプロパティの意味と動作の違いを表で確認しましょう。
| プロパティ名 | SQLキーワード | 動作の単位 | 適した場面 | 更新クエリへの影響 |
|---|---|---|---|---|
| 固有の値(Unique Values) | SELECT DISTINCT | 出力フィールドの値の組み合わせで一意化 | 単一テーブルで特定フィールドの値一覧を取り出す | 更新不可クエリになる |
| 固有レコード(Unique Records) | SELECT DISTINCTROW | 元テーブルのレコード全体で一意化 | 複数テーブル結合時に主テーブルのレコードが重複表示されるケース | 条件次第で更新可能クエリを維持できる |
端的に言うと、「固有の値」は選択したフィールドの値の組み合わせが重複しないレコードだけを返すのに対し、「固有レコード」は元テーブルのレコードとして物理的に同一かどうかで重複を判定します。単テーブルの値一覧を作りたいなら「固有の値」を使い、結合クエリで主テーブルが不要に繰り返し表示されるのを防ぎたいなら「固有レコード」を使います。
デザインビューでクエリのプロパティシートを開く手順
「固有の値」と「固有レコード」はクエリのプロパティシートから設定します。コントロールのプロパティシートではなく、クエリ全体のプロパティシートである点に注意してください。
手順1:クエリをデザインビューで開く
ナビゲーションウィンドウで対象のクエリを右クリックし、[デザインビュー]をクリックします。新規クエリを作成する場合は[作成]タブの[クエリデザイン]をクリックします。
手順2:クエリのプロパティシートを開く
プロパティシートを開くには次の2つの方法があります。
- 方法A:デザインビュー上部のグレーの余白部分(フィールドリストが表示されていない空白領域)をダブルクリックする
- 方法B:[デザイン]タブの[表示/非表示]グループにある[プロパティシート]ボタンをクリックする。またはF4キーを押す
プロパティシートが画面右側に表示されます。タイトルバーに「選択の種類: クエリプロパティ」と表示されていることを確認してください。コントロールを選択している状態でプロパティシートを開くとコントロールプロパティが表示されてしまいます。必ずデザインビューの余白部分をクリックしてから開き、「クエリプロパティ」と表示されていることを確かめます。
手順3:「固有の値」または「固有レコード」を設定する
クエリプロパティシートの「標準」タブに「固有の値」と「固有レコード」の項目が並んでいます。両方とも既定値は「いいえ」です。変更するには各行のドロップダウンをクリックして「はい」に切り替えます。
なお、「固有の値」と「固有レコード」を同時に「はい」に設定しようとすると、一方を「はい」にした瞬間にもう一方が自動的に「いいえ」に切り替わります。これはAccessの仕様で、2つのプロパティは排他設定(同時にYesにできない)になっています。
「固有の値」をYesに設定して重複行を除外する
「固有の値」プロパティは、SQLのSELECT DISTINCTに相当します。クエリで選択したフィールドの値の組み合わせが完全に同一のレコードを1件に圧縮して出力します。
設定後の出力イメージ(想定例)
以下は想定例です。「受注テーブル」に商品カテゴリのフィールドがあり、同じカテゴリが複数レコードに記録されているとします。「カテゴリ」フィールドだけをデザイングリッドに追加した選択クエリを実行すると、「固有の値」が「いいえ」の場合は受注件数分(たとえば50行)の結果が出ます。「固有の値」を「はい」にすると、同一カテゴリ名の重複が排除され、カテゴリ名の一覧(たとえば6行)だけが返ります。
| 固有の値の設定 | 出力行数(想定例) | 内容 |
|---|---|---|
| いいえ(既定) | 50行 | 受注レコードそれぞれにカテゴリ名が1行ずつ出る(重複あり) |
| はい | 6行 | カテゴリ名の種類だけが重複なしで出る |
SQLビューで確認するとDISTINCTが付く
「固有の値」を「はい」に設定した状態でSQLビューに切り替えると、SELECT文の直後にDISTINCTキーワードが追加されていることが確認できます。
SELECT DISTINCT 受注テーブル.カテゴリ
FROM 受注テーブル;
デザインビューでプロパティを切り替えるだけで、SQLを直接書くのと同じ効果が得られます。SQLに慣れていない方はデザインビューのプロパティシートから設定するほうが直感的で安全です。
「固有の値」使用時の注意点
「固有の値」を「はい」にしたクエリは更新不可クエリになります。クエリ結果のセルを直接編集してテーブルのデータを更新することができなくなります。データ参照・一覧表示・フォームやレポートの読み取り専用データソースとして使う場合は問題ありませんが、フォームから入力・編集もしたい場合はこのプロパティを使わず、集計クエリまたはソース側でのデータ整理を検討してください。
「固有レコード」をYesに設定して結合クエリの重複を抑制する
「固有レコード」プロパティは、SQLのSELECT DISTINCTROWに相当します。動作の考え方は「固有の値」と異なり、元テーブルのレコードとして物理的に同一かどうかを基準に重複を判定します。
「固有レコード」が有効な典型シナリオ
「固有レコード」が役立つのは、主に複数テーブルを結合したクエリで、主テーブルのレコードが結合先の複数レコードと一致して重複表示されるケースです。
以下は想定例です。「顧客テーブル(顧客ID・氏名)」と「購入履歴テーブル(顧客ID・商品名・購入日)」を顧客IDで内部結合し、顧客テーブルの「顧客ID」「氏名」だけを出力するクエリを作ったとします。1人の顧客が複数回購入していると、その顧客の行が購入件数分繰り返されます。「固有の値」を「はい」にしても解決できますが、更新可能クエリを維持したい場合や出力フィールドが多くなって値の組み合わせとしての一意化が複雑になる場面では「固有レコード」が有効です。
「固有レコード」をYesにした場合のSQLビュー
「固有レコード」を「はい」にすると、SQLビューには次のようにDISTINCTROWが付きます。
SELECT DISTINCTROW 顧客テーブル.顧客ID, 顧客テーブル.氏名
FROM 顧客テーブル INNER JOIN 購入履歴テーブル
ON 顧客テーブル.顧客ID = 購入履歴テーブル.顧客ID;
DISTINCTROWはAccess固有の拡張構文であり、汎用SQLには存在しません。SQL ServerやMySQLに接続するパススルークエリでは動作しない点に注意してください。
「固有レコード」と更新可能クエリ
「固有レコード」を「はい」にしたクエリは、条件を満たせば更新可能クエリを維持できます。主テーブルのフィールドを出力に含み、そのフィールドが一意に識別できる場合、フォームからデータを更新することができます。ただし、結合の種類・フィールドの構成によっては更新不可になる場合もあります。更新可能かどうかは実際に設定して確認してください。
実務パターン別の使い分けガイド
どちらのプロパティを使えばよいか判断するための目安を表にまとめます。
| よくある場面 | 推奨プロパティ | 理由 |
|---|---|---|
| 単一テーブルから特定フィールドの値一覧(コードリスト・カテゴリ一覧)を作りたい | 固有の値:はい | 出力フィールドの値の組み合わせで重複排除するため値一覧に最適 |
| 複数テーブルの結合クエリで主テーブルのレコードが重複しているが更新可能クエリを維持したい | 固有レコード:はい | 元テーブルのレコードIDベースで一意化するため更新可能クエリを維持しやすい |
| コンボボックスのRowSourceに重複のない選択肢リストを設定したい | 固有の値:はい | フォームのコンボボックスは参照専用のため更新不可クエリでも問題なし |
| GROUP BY集計で件数・合計も一緒に計算しながら重複を排除したい | 集計クエリを使う | 集計クエリのほうが集計値を柔軟に追加できる |
| 単テーブルのクエリで「固有レコード:はい」に設定したが重複が消えない | 固有の値:はい に変更 | 固有レコードは単テーブルでは効果が出ない。単テーブルには固有の値が適切 |
集計クエリ(GROUP BY)との使い分け
「固有の値」はDISTINCTによる重複排除であり、集計はせず値の種類だけを返します。一方、集計クエリ(GROUP BY)は重複を排除しつつ各グループの合計・件数・平均などを同時に取り出せます。
| 目的 | 最適な手段 |
|---|---|
| 値の種類(ユニーク値)だけを抽出したい | 固有の値:はい(DISTINCT) |
| グループごとの合計・件数・平均も欲しい | 集計クエリ(GROUP BY+集計関数) |
| 最大値・最小値・先頭レコードだけ欲しい | DMax・DMin・DFirst関数またはTOP句クエリ |
| 重複行を確認・調査したい(排除が目的でない) | 重複クエリウィザード |
単純に「このフィールドにどんな値があるか」を確認するだけなら「固有の値:はい」が最もシンプルです。集計値と組み合わせる必要がある場合は集計クエリを選んでください。重複レコードを探すことが目的であれば、重複クエリウィザードを使うほうが調査しやすくなります。
よくあるつまずきと対処法
「固有の値」をYesにしても重複が消えない
デザイングリッドに追加しているフィールドの組み合わせが実は一意になっていない場合、期待通りに重複が排除されません。よくあるつまずきとして、「品名だけ選んだつもりが主キーフィールドもグリッドに残っていた」というケースがあります。主キーは各行で異なる値を持つため、品名が同じでも主キーが異なれば別の行として出力されます。デザイングリッドに余分なフィールドが混入していないか確認してください。
「固有の値:はい」のクエリでフォームからデータを更新しようとするとエラーになる
「固有の値」を「はい」にしたクエリをフォームのレコードソースに設定してデータ更新しようとすると、「このレコードセットは更新できません」というエラーが表示されます。これは仕様通りの動作です。「固有の値:はい」のクエリを更新可能フォームのデータソースには使えません。読み取り専用の一覧表示フォームや、コンボボックス・リストボックスのRowSourceとしてのみ使用してください。
「固有レコード」をYesにしたのに重複が消えない
「固有レコード」は元テーブルのレコードIDを基準に重複を判定するため、クエリが単一テーブルのみの場合はほぼ効果がありません。単テーブルの場合、各行はすでに物理的に異なるレコードのため重複とみなされません。単テーブルで値の重複を排除したい場合は「固有の値:はい」を使ってください。「固有レコード」が有効なのは、複数テーブルを結合して主テーブルのレコードが繰り返し表示されるケースです。
「クエリプロパティ」でなく「テキストボックス:」と表示されてしまう
プロパティシートを開いたとき「テキストボックス: フィールド名」のように表示されている場合、コントロールを選択した状態でプロパティシートを開いています。一度デザインビューの余白(フィールドリストが表示されていないグレーの空白部分)をクリックしてからF4を押すか、余白をダブルクリックすると「クエリプロパティ」が表示されます。
両方のプロパティを同時にYesにできない
「固有の値」と「固有レコード」は排他プロパティです。一方を「はい」に設定すると、もう一方が自動的に「いいえ」に切り替わります。Accessの仕様なので、どちらかを選んで使います。両方の効果を同時に得ることはできません。
MOS Access試験での出題ポイント
MOS Access 365試験(MO-500)は試験時間50分・採点1000点満点で実施されます。合格点は非公開で550点~850点が目安とされています。合格率は公表されていません。クエリのプロパティシート設定は出題範囲に含まれます。分野別の出題数・配点は公表されていません。
試験対策として押さえておくべきポイントをまとめます。
- プロパティシートの開き方:余白ダブルクリックまたはF4・[プロパティシート]ボタン。「クエリプロパティ」が表示されていることを必ず確認する
- 「固有の値」の効果:選択フィールドの値が重複するレコードを圧縮して一意化する(SELECT DISTINCT相当)
- 「固有レコード」の効果:元テーブルのレコードIDベースで一意化する(SELECT DISTINCTROW相当)
- 排他設定:2つのプロパティは同時にYesにできない
- 更新可能性:「固有の値:はい」は更新不可クエリになる。「固有レコード:はい」は条件次第で更新可能を維持できる
- 単テーブルへの適用:単テーブルには「固有の値」が有効。「固有レコード」は複数テーブル結合時に活用する
試験本番では、プロパティシートのタイトルが「クエリプロパティ」になっているかを確認することが最初の重要ステップです。コントロールを選択したままプロパティシートを開くと「テキストボックス: …」のようなコントロールプロパティが表示されてしまい、「固有の値」の項目が見当たらない状況になります。余白をクリックしてからプロパティシートを開くことを意識してください。
MOS Access試験の受験料は一般価格と学割価格の2種があり、いずれも税込です。具体的な金額は改定されることがあるため、公式サイトの「受験料・価格」(https://mos.odyssey-com.co.jp/exam/examfee.html)でご確認ください。全国一斉試験の申込締切は試験日のおよそ1か月前(回により異なるため公式サイトの試験日程で確認してください)。
まとめ:固有の値・固有レコードを使い分けてクリーンなクエリ出力を実現する
本記事のポイントをまとめます。
- 「固有の値:はい」= SELECT DISTINCT。出力フィールドの値の組み合わせで重複排除。単テーブルの値一覧取得に最適。設定後は更新不可クエリになる
- 「固有レコード:はい」= SELECT DISTINCTROW。元テーブルのレコード単位で重複排除。結合クエリで主テーブルの重複を抑制するのに有効。条件次第で更新可能クエリを維持できる
- 排他設定:2つのプロパティは同時にYesにできない。どちらかを選ぶ
- プロパティシートの開き方:余白ダブルクリックまたはF4。「クエリプロパティ」と表示されていることを確認する
- 集計クエリとの使い分け:値の種類だけが欲しいなら「固有の値」、集計値も一緒に欲しいなら集計クエリ(GROUP BY)
「固有の値」か「固有レコード」か迷ったときは、「単テーブルの値一覧→固有の値」「複数テーブル結合で主テーブル重複→固有レコード」という判断基準を使ってください。集計値も同時に取り出す必要があるなら、素直に集計クエリ(GROUP BY)を使うのがAccessの定石です。デザインビューのプロパティシートを活用して、SQLを直接書かなくてもクリーンなクエリ設計ができるようにしていきましょう。
PR
MOS試験シリーズの定番対策テキスト。試験の形式・操作の確認方法・出題パターンの把握に最適です。MOS Access試験の学習にも共通する試験運営の仕組みを理解するための参考として活用できます。
PR
Microsoft Copilot for Microsoft 365活用大全
Microsoft 365全アプリのAI活用ノウハウを一冊に凝縮。Accessを含むOffice各ツールのデータ集計・分析・自動化の考え方を広げたい方におすすめです。クエリで整理したデータをさらに活用するヒントが得られます。
