Accessでお仕事 テーブルから重複レコードを削除する

テーブルから重複レコードを削除する

 表の中で、重複したデータの行を削除したいことは、しばしば有りますね。
 行の重複の削除といっても、行のどの項目に着目するかによって、
  1. 列の特定の項目(フィールド)を基準にして、重複行を削除したい
  2. 列全体の項目の組合せで、重複行を削除したい
の、二つのケースがあるでしょう。

 列全体の項目の組合せで、重複行を削除する方法については、重複行の削除(DISTINCT) の部分で紹介しました。
 ここでは、特定の項目(フィールド)を基準にして、重複行を削除する方法を紹介します。

 Access では、重複を排除したい特定の項目(フィールド)を、主キーとすることで、重複を削除します。


 Access の操作としては、
  1. 重複レコードを含むテーブルの構造のコピーを作成し、重複レコードを含むすべてのフィールドの主キーを作成して、
  2. 元のテーブルから新しいテーブルへの追加クエリを実行します。
 主キーのフィールドは重複レコードを含むことができないので、この操作を行うと、重複レコードのないテーブルが作成されます。
注:  元のテーブルにもキーが設定されていると、「入力規則違反」に関するエラー メッセージが表示されるので、元のテーブル側にはキーを付けないようにします。
 「入力規則違反」が発生すると、本来追加されるべきレコードがもれます。画面に表示される、エラーと件数に注目しましょう。もし一部のレコードでエラーになった場合は、後で「不一致クエリ」を使って対象レコードを特定して、エラーの原因を確認します。Null値が原因になる場合が、多々あります。


 このホームページで使っている、データ(Orderテーブル)の事例 は、一つの「受注コード」に対して、複数の「商品明細」が有ります。
 これを、「受注コード」でユニークな一行にしてみましょう。

主キーを変えたテーブルを
新規作成する方法

  1. データベース ウィンドウで [オブジェクト] の (テーブル) をクリックします。

  2. 重複レコードを削除する元テーブル (この例では、テーブル名 Order) の名前をクリックします。

  3. ツールバーの (コピー) をクリックします。

  4. ツールバーの (貼り付け) をクリックします。

  5. [テーブルの貼り付け] ダイアログ ボックスにコピー先の新しいテーブルの名前 (この例では、code) を入力し、[テーブル構造のみ] をクリックし、[OK] をクリックします。

  6. デザイン ビューで新しいテーブルを開き、コピーするテーブルの、削除したい重複レコードを含むフィールドを選択します。

  7. ツールバーの (主キー) をクリックして、ユニークにすべく選択したフィールドに基づいて主キーを作成します。
  8. テーブルを保存して閉じます。

固有のレコードだけを
新しいテーブルに追加する方法

  1. 重複レコードを含むテーブルに基づいて、クエリを新規作成します。

  2. クエリのオブジェクトに切り替えます。そして、「新規作成」で、デザインビューを選択します。

    「テーブルの表示」で、コピー元のテーブル (この例では、Order) を選択して、「追加」します。

    クエリのデザイン ビューで、ツールバーの (クエリの種類) をクリックし、[追加クエリ] をクリックします。

  3. [追加] ダイアログ ボックスで、[テーブル名] の一覧から新しいテーブル名をクリックし、[OK] をクリックします。

  4. アスタリスク (*) をクエリのデザイン グリッドにドラッグして、元のテーブルのすべてのフィールドを含めます。
    SQLビュウでは、以下のようになっています。
    INSERT INTO code
    SELECT Order.*
    FROM [Order];

  5. ツールバーの (実行) をクリックします。

  6. [はい] をクリックすると、行を追加するメッセージが表示されます。

  7. "追加クエリに含まれるすべてのレコードを追加できません。" というエラー メッセージが表示されたら、[はい] をクリックします。これで、固有のレコードだけが新しいテーブルに転送され、重複レコードは削除されます。

  8. 結果を見るには、データベース ウィンドウで [オブジェクト] の (テーブル) をクリックし、データベース ウィンドウのツールバーの [新規作成] をクリックしてテーブルを開きます。

  9. 新しいテーブルに正しい固有なレコードが入っていることを確認します。元のテーブルを削除すると、元のテーブルの名前を新しいテーブル名に使用することもできます。

 参考:アクション クエリとその使用方法

別解:集計(GROUP BY)クエリーを使って
ユニークレコードを抽出

 下の Excel の方法と同じ発想で、集計(GROUP BY)クエリーを使うこともできます。
 キーのフィールドにグループを設定して、その他のフィールドには、例えば「先頭」を設定します。
SELECT First(Order.ID) AS IDの先頭, Order.受注コード, First(Order.得意先) AS 得意先の先頭, First(Order.社員) AS 社員の先頭, First(Order.出荷先名) AS 出荷先名の先頭, First(Order.出荷先郵便番号) AS 出荷先郵便番号の先頭, First(Order.出荷先都道府県) AS 出荷先都道府県の先頭, First(Order.出荷先住所1) AS 出荷先住所1の先頭, First(Order.運送区分) AS 運送区分の先頭, First(Order.受注日) AS 受注日の先頭, First(Order.締切日) AS 締切日の先頭, First(Order.出荷日) AS 出荷日の先頭, First(Order.運送料) AS 運送料の先頭, First(Order.商品) AS 商品の先頭, First(Order.単価) AS 単価の先頭, First(Order.数量) AS 数量の先頭
FROM [Order]
GROUP BY Order.受注コード;

Excelで、集計を使って重複行を削除する方法

 Excel で、列の特定の項目(フィールド)を基準にして、重複行を削除する場合は、「集計」を使います。

 この事例では、受注コードを基準に重複行を削除するため、
メニューの「データ」→「集計」で、「グループの基準」に、受注コードを指定します。「集計の方法」と「集計するフィールド」は、何でもかまいません。
 「OK」を押すと、集計行が挿入されます。
 集計のタイトルを、上から下まで選択してコピーします。
 それを、元のデータのトップの行に重なるようにずらして、貼り付けます。
 「データ」→「フィルタ」→「オートフィルタ」を設定します。
 集計のタイトルの列で、オートフィルタから「空白セル」を選択します。
 そして、オートフィルタで抽出された、集計のタイトル列の空白行を全て「行削除」すれば、できあがりです。
 アウトライン表示を削除するには、「データ」→「グループとアウトラインの設定」→「アウトラインのクリア」を押します。


このページのトップに戻る↑ 次の項目を見る↓ Accessでお仕事 目次に戻る

ホームページのトップに戻る