2016-08-19 12 views
1

excelの中に私はアーティスト、曲、エディションのリストがあります。 このリストには15000を超えるレコードが含まれています。 問題は、リストに「重複」レコードが含まれていることです。彼らは完全なマッチではないので、私は "複製"と言う。いくつかのタイプミスがあり、これを修正してそのレコードを削除したいと考えています。項目のリストはほとんど重複を見つける

したがって、たとえばいくつかのレコード:

ABBA - Mamma Mia - Party 
ABBA - Mama Mia! - Official 

各ダッシュは、私はExcelで重複としてマークしますどのように別の列(その3列A、B、Cが記入されている)

を示していますか?

ツールファジールックアップについて知りました。しかし、私はマックに取り組んでいます。マックでは利用できないので、私は立ち往生しています。

正規表現の魔法またはvbaスクリプトで何ができますか? 行がどれほど似ているかを知ることもできます(たとえば、80%の類似度)。

+1

これは私が有用であると判明した唯一のファジーマッチングコードです:http://www.mrexcel。com/forum/excel-questions/195635-fuzzy-matching-new-version-plus-explanation.html –

答えて

1

ファジーテキストマッチングの一般的な方法の1つはLevenshtein(距離)アルゴリズムです。このいくつかの素敵な実装がここにあります。そこから

https://stackoverflow.com/a/4243652/1278553

、あなたはインスタンス間の類似点を見つけるために、スプレッドシート内で直接機能を使用することができます。

enter image description here

あなたが要求していません、ここではデータベースが本当にいいですね。なぜなら、デカルト結合(このための有効な用途は非常に少ない)の1つで、すべてのレコードを他のすべてのレコードと比較することができるからです。たとえば:

select 
    s1.group, s2.group, s1.song, s2.song, 
    levenshtein (s1.group, s2.group) as group_match, 
    levenshtein (s1.song, s2.song) as song_match 
from 
    songs s1 
    cross join songs s2 
order by 
    group_match, song_match 

はい、これはレコード数(あなたの例では2.25億行)に応じて、非常に高価なクエリになりますが、それはトップにバブル最も可能性の高い重複/一致しただろう。それだけでなく、グループが一致したり、ほぼ一致したり、同じ文字で始まり、Levenschteinがより大きいグループをあらかじめフィルタリングしている場合には、明示的な不一致を排除するために「合理的な」結合を組み込むことができますxよりも。

-1

あなたのループ内でこのワークシートfucntionsを試してみてください。

=COUNTIF(Range,"*yourtexttofind*") 
+0

申し訳ありませんが、これはトリックを行いません。この関数は、特定のテキストで見つかった項目の数を返します。だから、もし私が "ABBA - Mama Mia!"それはちょうど1を返します。それは他の行を検出せず、まったく異なるものとして扱います。私が必要とするのは、おおよその一致を見つけることです。おおよそのマッチマークであれば重複します。 – Baklap4

+0

*を使用するとワイルドカードが追加されます –

+0

実際には動作しますが、私の仕事中のタスクのおおよその値を見つけるために使用します。私は通常、15000カウントのスプレッドシートで「失敗」を見つける必要があります。問題は、多くの時間が "Fail-Something Else"か "

some text Fail some more text
"なので、それは私のためにうまくいきます:P –

0

あなたは重複を示すために、配列数式を使用することができ、あなたは行番号を表示するには、以下を変更でき、これはエントリの下の行をチェックします80%が左から右に取られ、全体の比較ではなく、80%の可能性がある任意の二倍である。私のデータはA1です:a15000

=IF(NOT(ISERROR(FIND(MID($A1,1,INT(LEN($A1)*0.8)),$A2:$A$15000))),1,0)

も、最初のエントリすなわち行1の最初の部分であるものが

=SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A1)*0.8)),$A3:$A$15000,1)),0,1))+SUM(IF(ISERROR(FIND(MID($A2,1,INT(LEN($A2)*0.8)),$A$1:$A1,1)),0,1))

見つけ示すために、戻ってリストアップになります。この方法数式と最後の行には最後の部分が必要です+

+0

データを並べ替えられていないものから完全なリストで使用するにはどうすればよいでしょうか? ? – Baklap4

+0

それは上記のように検出されるので、ABC999の前のABC123はABCとなり、123の隣にはDupeと表示されます。それ以外の方法で表示される場合は、1つのDupeが常に表示されます上記。 –

関連する問題