名前の一致は 1 つの列で、必要な結果は次の列に表示されます

名前の一致は 1 つの列で、必要な結果は次の列に表示されます

約 40 万から 500 万行のデータがある非常に長いデータベースがあり、次の列に同様の名前の結果を表示したいと考えています。

Fuzzy を使用しようとしていますが、一致する一意のリストがありません。

ここに画像の説明を入力してください

答え1

この問題を解決するには、VBA (マクロ) が必要です。

ここに画像の説明を入力してください

使い方:

  • どちらかを押すAlt+F11または右クリックシートタブとポップアップメニューからクリックコードを表示
  • コピーペーストこのコードは標準モジュール。
  • 走るマクロ。

     Private Sub Worksheet_SelectionChange(ByVal rngSel As Range)
      Set rngTable = [I2:K17]
       If rngSel.Count > 1 Or Intersect(rngSel, rngTable) Is Nothing Then End
       For Each rngCell In rngTable
    rngCell.Interior.ColorIndex = IIf(rngCell.Value = rngSel.Value, 27, -4142)
       Next
     End Sub
    

注意

  • このコードではrngTable = [I2:K17]、セル参照とカラーコード27, -4142を編集できます。

答え2

私が取るアプローチは次の 2 つのうちのいずれかです。

1) ルックアップ テーブルを使用して、愚かなユーザーが同じものに対して思いつく可能性のあるすべてのバリエーションを徹底的に作成するか、ソース データを使用して重複を削除し、愚かなオプションの既知のリストを取得します。これは、「役職」を含む連絡先データを移行するときに行う必要がある種類のことです。これまでの記録では、「Managing Director」のスタイルやスペルは 67 種類あります (MD、MD、M Dir、Manging Driector など)。このアプローチは、履歴データに 1 回限りの対応を行うのに最適です。私の場合、データを移行した後、ドロップダウン ピック リストを使用して、ユーザーが新しいシステムで同じ古い問題を引き起こさないようにしました。

2) 一連のルールを使用して、一致するものを区別するのに必要ではないと思われる無関係な情報を「捨てる」。短い文字列を "" に置き換える一連のネストされた SUBSTITUTE 関数が役立ちます。最初に . - / : などの句読点を置き換え、次に (PVT) や Ltd や Limited などのものを置き換えます。これらの短い文字列のいずれかがあいまいで、別の単語の中に出現する可能性がある場合には、前、後、またはその両方にスペースを入れます。良い例としては、"Co " を置き換えて "Co" を置き換えないことで、"mpany" や "bblers" になってしまうのを回避します。最も外側の SUBSTITUTE を " " に置き換えます (つまり、最後にスペースを削除します)。これは "ABC Foods" を扱っていますが、スペースを最後まで残すため、単語の一部を失うことなく文字列を解析できます。

「ABC Foods」は「ABC Foods (PVT) Ltd.」と同じものだとお考えだと思います。

次に、すべての「正しい」回答のリストを作成します。数式を使用して左側に 2 番目の列を作成し、コピー > 特殊貼り付け > 値を使用してこれを「平坦化」します。次に、メイン データで、置換を使用して名前を最小限の形式に縮小し、それを参照値として使用して「正しい」バージョンを返します。SUBSTITUTE にヘルパー列を使用することも、すべてを一度に実行することもできます。

このアプローチでは、正しく実行して安全に破棄できるすべてのビットを見つけるまでに数回の試行が必要ですが、ソース データに将来予期しない新しいエラーが含まれる可能性がある場合は、より堅牢になります。

覚えておいてください: それを馬鹿でも使えるようにしようとすると、誰かがもっと馬鹿な奴を連れてくるだけになります。

関連情報