INDEX(、MATCH())の組み合わせは、TABLE形式のデータで#VALUEエラーを返します


0

2つのデータセット(同じブック内の2つのシート)があり、一方から他方のエントリを見つける必要があります。両方のセットはテーブルとしてフォーマットされており、INDEX(MATCH())エントリを一致させるために組み合わせを使用しています。一致が見つかった場合、内のフィールドのいずれかの値Dataset1データはの追加列に表示されDATASET2。一致することを知っているので、返される値はあまり気にしません。

残念ながら、uniqueID一致するものがないので、各テーブルで2つのフィールドの組み合わせを使用して一致を試行する必要があります。フィールドは[@Name]andで[@Surname]、これはクロアチア語では理想的ではありません。名前Adis Terzicは明らかにAdisTerzićと一致しないからです

問題

  • 追加された列(フィールド)DATASET2は、任意の値から返さ示さないDataset1データむしろそれが示すすべてがある#VALUEエラー。

私が間違っていることは何ですか?

私の構文は次の行に沿っています:

=INDEX(Table1[@Field4],MATCH(Table1[@Name trim]&Table1[Surname trim], Table2[Name]&Table2[Last name], 0)) 

これがワークブック(Googleドライブ)の例です。

  • Dataset1(Table1)には、約28000行と16列があります。
  • Dataset2(Table2)には、約24000行と7列があります。

事前に感謝します!

回答:


2

数式でフィールドを結合するのではなく、ヘルパー列を追加することを検討できます。数式は管理が簡単で、上記のような名前の違いをより簡単に比較できます。

ヘルパー列を追加して、名前を結合します。テーブルを使用しているため、 "NameLookup"というタイトルの列になります=([Fname]& ""&[Lname])

インデックスの一致は次のようになります

=IFERROR(INDEX(Table1[@Field4],MATCH(Table1[NameLookup],Table2[NameLookup],0),"Not Found")

実際には、2つの名前のリストを比較する必要がある同様のシートがあります。ミドルネームのイニシャルとサフィックス(jr、sr、IIIなど)を扱うという課題に直面しています。余分なスペースは言うまでもありません...ヘルパー列でどのように分解したかのスナップショットは次のとおりです。 ここに画像の説明を入力してください すべての仕組みは次のとおりです。一致するものが見つかった場合、私は元気です。「ファーストネーム、ミドルネーム、ラストネーム、サフィックスなし」-これらはすべて、名前を分割するためのTRIM式のバリエーションです。

ファーストネーム: =LEFT([@NAME],SEARCH(" ",[@NAME]))

中間: =IFERROR(MID([@NAME],SEARCH(" ",[@NAME],1)+1,SEARCH(" ",[@NAME],SEARCH(" ",[@NAME],1)+1)-SEARCH(" ",[@NAME],1)),"")

苗字: =IFERROR(RIGHT([NAME],LEN([NAME])-SEARCH(" ",[NAME],SEARCH(" ",[NAME],SEARCH(" ",[NAME])+1))),RIGHT([@NAME],LEN([@NAME])-FIND(" ",[@NAME],1)))

接尾辞なし: =IFERROR(LEFT([@[Last Name]],FIND(" ",[@[Last Name]])-1),"")

最も推測しやすいのは、名前に近いものを見つけるのに役立つ列です。

=IFERROR(IF([@[Check Full Name]]=0,INDEX(Marketing[NAME],MATCH([@DrillFirstNoSfx],Marketing[MarketFirstNoSfx],0)),""), "Not Found")

NAMEセルで条件付き書式を使用して、一致するかどうかを簡単に判断します。黒のテキスト(完全な名前を確認> 0)、赤のテキストは一致がまったくないことを意味し、黄色のテキストはほぼ一致することを意味します(Best Guess列の値)。

これのいくつかが解決の方向にあなたを指すのを助けることを望みます!


0

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

New1表2 の列の最初のセルにこの数式を入力し、右下に入力します。

=IFERROR(LOOKUP(2,1/(($A$28:$A$30=$J28)*($B$28:$B$30=$K28)),C$28:C$30),"No Match")

必要に応じてデータ範囲を調整します。


ねえ、ありがとう!これをさらに「動的」な方法で記述して、両方のテーブルにデータを追加できるようにする方法はありますか?私はちょうどクラッカーとフィールドで働く方法を学んだので、これに固執することを好みます。このVLOOKUPメソッドを使用する場合は、常に範囲を追跡する必要があります:)
アレックススターバック

VBAコードを処理できる場合は、お勧めできます!
ラジェッシュS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.