1

スプレッドシートの列Aに、同じ個人に関する次の情報があります。

ALAN K HURTZ
ALAN K HURTZ, ATTY
ALAN K. HURTZ
ALAN K. HURTZ, ATTY
ALAN K. HURTZ, ATTY.
ALAN HURTZ
ALAN HURTZ NDER
ALAN HURTZ ORPD
ALAN HURTZ, ATTY
ALAN HURTZ, ATTY.
ALAN HURTZ, ESQ
ALAN HURTZ, ESQ.
ALAN P. HURTZ, ATTY.

別のスプレッドシートには、次の行があります。

A           B         C         D       E        F

Hurtz       Alan      K.        ALIAS   91065    1451894

各レコードのsheet1列Bにこの値1451894(sheet2の列F)を追加できるようにする必要があります。VLOOKUPやMATCHはうまくいきませんでした。

これらの値を比較する方法について何か提案はありますか?

4

1 に答える 1

1

この課題はExcelには適していません。これは、左から右SEARCHFINDのみ機能し、最初のインスタンスのみを特定するためです。ただし、自動化されたソリューションから完璧な結果が得られることを期待することはできず、比較的単純なもので不十分な近似を受け入れる準備ができている可能性があります。つまり、人間によるレビューとは対照的に、コーディングにどれだけの労力を費やすかはあなたの選択です。 。

まず、2番目のシートから、first_name、initial、last_name、first_name、last_nameの両方がColumnFにある値を指すルックアップテーブルを作成することをお勧めします。最初のケースでは、「inc Initial」のようなものをColumnF値に連結して、イニシャルと一致しない場合よりも厳密に一致することを示すことができます。

次に、最初のシートのColumnAをColumnBにコピーし、ColumnBからESQを削除することをお勧めします(少なくともESQを開始していない名前の場合)。米国には、名前が「Esq」で始まる約40,000人がいますが、Esquireを「無視」できるという利便性を放棄するよりも、これらを別の問題として扱う方が簡単な場合があります。

ColumnsC:Nにそれぞれ次のように入力することをお勧めします(Row1がデータラベルであると仮定します)。=FIND(" ",B2) =IF(ISERROR(FIND(",",B2)),0,FIND(",",B2)) =LEN(B2) =LEFT(B2,C2) =IF(C2>0,MID(B2,C2+1,E2-C2+1),0) =LEFT(G2,1) =IF(ISERROR(FIND(" ",G2)),0,FIND(" ",G2)) =MID(G2,I2+1,E2-C2) =IF(ISERROR(FIND(",",J2)),IF(ISERROR(FIND(".",J2)),0,FIND(".",J2)),FIND(",",J2)) =IF(K2=0,J2,LEFT(J2,K2-1)) =IF(I2>0,F2&H2&" "&L2,F2&L2) =VLOOKUP(M2,array,2,FALSE)ここで、'array'はSheet2のルックアップテーブルです。

13のサンプルのうち、8の「一致」が得られるはずです。そのうちの5つは、ミドルネームのイニシャルの一致を含みます。十分でない場合は、トレードオフポイントに到達するまで、右側の列に数式を追加し続けます(たとえば、13番目の例は上記の5つのうちのいずれかであり、一致しませんが、別の列にある場合は追加します'P'を連結しませんでした-そのような他の列で一致したという事実は、他の8つほど一致していなかったことを示しています)。また、ATTYはESQと同じように扱うことができますが、米国にはその名前の人が10万人以上います。

あるいは、賞金を提供するか、freelancer.comを試してみてください。ここでは、より選択的であるだけでなく、方法を示す「スコア」を提供するコードを提供するために、少額で満足している多くの人々を見つけることができると思います。おそらく「一致」はあります。

于 2012-07-10T05:16:13.053 に答える