- ベストアンサー
ACCESSでの重複レコードの削除
ACCESSで、重複レコードを引っ張ってくるのは、重複クエリでやれましたが、逆に、重複レコード(1つのフィールド、或いは複数のフィールドに着目しての)の削除は、やれないのでしょうか? イメージしているのは、エクセルのオートフィルタでの「重複データの削除」です。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
方法を2つばかり示します: A)選択クエリを使用する 「重複分のデータを表示させないだけ」(=削除はしない)場合は、そのテーブルをもとにしたクエリで、「固有の値」プロパティを「はい」に設定すればOKです。 但し、テーブルのデータが (ID,テキスト)=(1,aaa),(2,bbb),(3,bbb),(4,ccc)・・・ の場合、クエリに表示させるフィールドを「テキスト」のみにすれば、 (テキスト)=(aaa),(bbb),(ccc)・・ となってくれますが、IDも含めてしまうと、重複分がそのまま表示されます(=テーブルのデータと変わらない)。 B)削除クエリで削除後に、追加クエリで再追加する ※こちらは、テーブルのデータを変更するやり方です※ 1)重複クエリを、メニューの「クエリ(Q)」→「テーブル作成(K)」をクリックして、テーブル作成クエリにする (作成テーブル名を、仮に「重複分」とします) 2)テーブル作成クエリを実行して、「重複分」テーブルを作成 3)元のテーブルの重複データを全て削除 (=No.1の方の回答で行ったこと) 4)「重複分」テーブルのレコードを、元のテーブルに追加する追加クエリを作成 5)追加クエリを実行 この操作を実行すると、元のテーブルのデータは下のように変わっていきます: (ID,テキスト)=(1,aaa),(2,bbb),(3,bbb),(4,ccc) ↓ (ID,テキスト)=(1,aaa),(4,ccc) ↓ (ID,テキスト)=(1,aaa),(4,ccc),(5,bbb) なお、「ID」にオートナンバー型が設定されている場合を想定しています。 もし元のテーブルに「ID」がないなら、データの変遷は (テキスト)=(aaa),(bbb),(bbb),(ccc) ↓ (テキスト)=(aaa),(ccc) ↓ (テキスト)=(aaa),(bbb),(ccc) となります。
その他の回答 (3)
- sanbit
- ベストアンサー率32% (16/50)
私がやってました方法です。 (1)重複レコードが数件の場合は重複クエリの画面でレコードを選択し直接削除します。 (2)件数が多い時は、ホストからのデータ取り込み時など、頻繁に起きる時 コマンドボタンのプロシージャで処理します。 テーブルを読込み新しいテーブルを作成する。 削除するKeyが前のデータと同じなら書き込みしない。 参考までに、(2)は複雑です。 他に良い回答があるといいですね。
お礼
ありがとうございます。参考になりました。
- O_cyan
- ベストアンサー率59% (745/1260)
簡単にやるにはそのテーブルをテーブル構造のみコピーして新しいテーブル名を付け作ります。 そうすると空の新しいテーブルが出来ますので重複させたくないフィールドに主キーかインデックス(重複なし)を設定します。複数のフィールドの重複を除くにはその各フィールドにインデックス(重複なし)を設定すれば出来ます。 元のテーブルを再度コピーし貼り付けで既存のテーブルにデータを追加を選択しコピーすると重複レコードはエラーとなり重複レコードのみテーブルに追加されない状態でレコードを追加できます。 新しく作ったテーブルの名前を元のテーブルの名前に変更すれば終わりです。(元のテーブルは削除するか名前を変更するか新しいテーブルと置き換えるかですね)
お礼
ありがとうございました。ACCESSを活用する上で参考になりました。
- nonpq
- ベストアンサー率30% (64/210)
>重複レコードを引っ張ってくるのは、重複クエリでやれました・・・ 重複クエリで引っ張れた結果が全て削除対称だとして、そのクエリのデザインビューでクエリのタイプを「削除」に変更し、実行すれば削除できます。 質問の内容に誤解があったらごめんなさい。
お礼
大変遅くなりましたが、参考になりました。ありがとうございました。
補足
問題があります。すべてデータがなくなってしまいました。 小生のやりたいこと。今テーブルに次のデータがあるとします。 data aaaaa aaaaa aaaaa bbbbb bbbbb bbbbb これを、重複データを削除して、 data aaaaa bbbbb だけとしたいのです。 エクセルのオートフィルタでは、1アクションでできます。それだけ、機能としては重要だと考えます。ACCESSで出来ないわけはないと思うのですが。 よろしくお願い致します。
お礼
大変遅くなりました。ありがとうございます。 理解できました。助かりました。