web-dev-qa-db-ja.com

2つの基準でINDEXとMATCHを使用したルックアップ

INDEXとMATCHを使用して基本的なルックアップを実現しようとしています。私のレイアウトは次のとおりです。

シート1 
 NAME |サイト|日付
 
シート2 
 NAME |サイト|日付

シート1の「SITE」列に、NAMEとDATEが一致するシート2のSITEを自動的に入力する必要があります。

私が試したもの

=INDEX('Sheet2'!B:B,MATCH(A1,'Sheet2'!A:A,0))

これは正常にNAMEに一致しますが、bothNAMEおよび日付?

7
user1017882

この種の問題に対する従来の解決策は、検索語のペア(つまり、ヘルパー列)を連結し、連結されたペアをルックアップ配列に追加することです。

SO18767439 example

上記の例では、(検索する場所ではなく)検索対象の連結が「オンザフライ」で行われます。

4
pnuts

このような「配列数式」を使用できます

=INDEX('Sheet2'!B:B,MATCH(1,(A1='Sheet2'!A:A)*(C1='Sheet2'!C:C),0))

CTRL+SHIFT+ENTER

....または、別のINDEX関数を追加して、「配列を入力」する必要がないようにすることもできます。

=INDEX('Sheet2'!B:B,MATCH(1,INDEX((A1='Sheet2'!A:A)*(C1='Sheet2'!C:C),0),0))

または別の方法は、このようなLOOKUPを使用することです

=LOOKUP(2,1/(A1='Sheet2'!A:A)/(C1='Sheet2'!C:C),'Sheet2'!B:B)

後者の方法では、複数ある場合はlast一致します......

13
barry houdini

配列を使用せず、ヘルパー列を使用しないソリューションは次のとおりです。

<i>=INDEX(Table[returnColumnName], 
MATCH(1, INDEX((Table[lookupColumn1] = "arraysAreSlow") * 
(Table[lookupColumn2] = "avoidWherePossible"), 0, 1), 0))</i>

グリッドルックアップを実行するより高度なソリューションを次に示します。

<i>=INDEX(Table,
MATCH(1, INDEX((Table[lookupColumn1] = "arraysAreSlow") * 
(Table[lookupColumn2] = "avoidWherePossible"), 0, 1), 0),
MATCH("returnColumnName", Table[#Headers],0))</i>
1
Simon Nuss