重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下の様なレコード形式のCSVがあります。
A列,・・・AA列,
NO,日付,時間,姓1,名1,住所1,住所2,住所3,住所4,姓2,名2,姓3,名3,・・・,姓10,名10

これが1万行以上あるのですが、
「姓名」での重複チェックをするにはどうしたら良いでしょうか?
横でも縦でも斜めでも、つまり1レコード中の重複も、レコード間の重複も検知したいです。

No00001,姓名1



No00001,姓名10
No00002,姓名1



No00002,姓名10



No10000,姓名10
と全て縦1列に並べてチェックするようなイメージですが、
具体的にその方法がベターなのか悩んでます。
また、住所での重複もしなければいけません。
CSVは日々最新データが届く可能性があり、本当はCSVを上書きするだけで結果が更新されると運用が楽なのですが、毎回手動作業も仕方ないと思っています。
良い方法のアドバイス頂けると幸いです。

質問者からの補足コメント

  • うれしい

    皆さま
    ゴールが曖昧な中、たくさんのアイデア、アドバイス、ありがとうございます。
    これから始まりそうな作業なので不明確ですみません。

    同一人物は3回まで出現OKですが、それ以上の出現はNGとして抽出したいという事になりました。
    どんな表示の仕方にするかまだイメージが出来てませんが、
    途中から4回までOKとルールが変わっても対応できるように、重複回数が分かるようにして、
    見たい人が自由にオートフィルタ等で表示できるようにすれば良いかな、と思ってます。

      補足日時:2022/02/10 16:14

A 回答 (5件)

こんにちは



>「姓名」での重複チェックをするにはどうしたら良いでしょうか?
データ数が10×1万=10万件くらいあるので、チェックした結果をどうするのかの方が問題のような気がしますけれど、とりあえずチェックさえできれば良いものとして・・・

以下、ひとつのアイデアですが・・
事前に雛型のシートを作成しておいて、そこにCSVを流し込めば良いのではないでしょうか?
比較するのには、「姓 名」の一覧を作成しておいて、その中で重複チェックをするのが簡単そうに思われます。

1)雛型シートのAB列(=他の列でも良い)に「姓 名」(= 姓 & " " & 名 )を抜き出すように関数を設定しておきます。
2)AB列内の重複チェックをAC列あるいは、AB列の「条件付き書式」などに設定しておきます。
以上で、雛型シートは完成で、このシートのA:AA列にデータを流し込めば、自動的にチェックができるという考え方です。
データが大量にありそうなので、エクセルの計算に多少時間がかかるかもしれませんけれど・・


具体例としては、
1)に関しては、AB1セルに
=TEXTJOIN(" ",1,OFFSET($A$1,INT((ROW()-1)/10),MOD(ROW()-1,10)*2+7-(MOD(ROW()-1,10)=0)*4,,2))
の式を入力し、あらかじめ10万行までフィルコピーしておきます。

2)に関しては、AB列に対して、COUNTIFなどで>1であれば重複と判断すればよいでしょう。
ただし、元データが空白セルの場合、AB列も空白セルとなりますので、空白セルは重複チェックの対象にしないようにしておいた方が宜しいでしょう。

(これにより、データがない状態でも重複の認識が発生することを防げます)
    • good
    • 0

こんにちは


重複データのチェックとありますが、どのような結果をお望みなのでしょうか?
重複データを
行(グループ)を削除して上に詰める
セルに色を付ける(#3様指摘の通り意味無いかな)
別シートに抜き出す(元データから削除)
別シートに書き出す(元をいじらず)
(グループは関連データ)

CSVファイルをQueryTables.Addで必要カラムを抽出して
Scripting.Dictionary や RemoveDuplicatesなどで
チェックや削除する方法や
ADODB.Stream などで抽出段階で重複を排除する方法も有か?
    • good
    • 0

「重複チェック」した結果は、どのような状態になるのを希望されているのでしょう。


(姓名&住所)を1データとして、1行に4データ、10000行あるとして、4万データ中には、82種189データが重複状態で存在するとして、

色分けで重複表示は無意味そうですし、、、
表中に1つの重複もない状態になるように、82種189データから107データを削除して、39,893データになるようにするのだとして、重複データの中のどのデータを残すのでしょうか。 また、「1レコード中の重複も、レコード間の重複も」というのは、1行の中の4データ中で、第二、第三データが重複していた場合、第三データを削除するだけなのでしょうか、第四データを、削除した第三データの位置に置き直す必要はあるのでしょうか。
仮に、3456行目の4データは、どれもが、2000~2500行の間にあるデータの重複である場合には、3456行目の「NO,日付,時間」のデータはそのまま残すのでしょうか。

やりたい、希望のイメージがハッキリしないと、マクロの使用法が決まらないと思います。

また、「CSVは日々最新データが届く可能性があり」
というのは、以前のデータの全てを含む書き換え版・訂正&追補版ということでしょうか。 そうであるなら、日々に最新のCSVを対象にしてやる他はないでしょう。

(姓1,名1,住所1,住所2,住所3,住所4)の1セットは、「=CONCAT(」で1つのデータにして、AC、AD、AE、AFの行に4つ並べ、それを対象にして、重複をあたれば良いと思います。
    • good
    • 1

姓名でソートをかけて、


=countifで絶対位置検索をかける
    • good
    • 0

名寄せ


というキーワードで検索してください。
あなたにあった方法が出ると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!