使用索引和匹配来纵向和横向进行查找

我在一张纸上有一列数据,每个单元格包含一个可以在另一张纸上的数组中find的值。 我试图find一个函数,如果它从工作表1的列中find工作表2中的数组中的值,则返回最左边一列中的值。

这是一个数据的例子:

表1

| AH2377507 | | 2188622 | | EA404278 | | AH885430 | 

表2

 aaa | 1874379 | AH2377507 | EA2377507 | PS2377507 | 67004276 | 949529 | AH2065634 bbb | 1938614 | 2186486 | 2188622 | 2188708 ccc | 919973 | AH404278 | EA404278 | PS404278 | 2188746 ddd | 960929 | AH885430 | EA885430 | PS885430 

所以当在表2中find'2188622'时,它返回'bbb'。

同样,第2页中的数据列数也因行而异,因此数组中有空单元格。

我已经尝试在hlookup中嵌套vlookp,反之亦然,并且在索引/匹配中嵌套hlookup,但是这些想法都没有奏效。

你需要的不仅仅是一个INDEX/MATCH

 =INDEX(Sheet2!$A$1:$A$4,SUMPRODUCT((Sheet2!$B$1:$F$4=Sheet1!$A1)*ROW(Sheet2!$A$1:$A$4))) 

假设Sheet1的数据在A1:A4Sheet2的数据在A1:F4

注意 ROW(Sheet2!$A$1:$A$4)最后与您的数据无关。 范围必须始终从A1开始,如果在Sheet2中10logging,则它必须以A10结束。


更多信息

由于您的查找值来自二维数组,而不是单个行/列,因此不能使用MATCH 。 我们需要模拟一个匹配,所以这是SUMPRODUCT进来的地方。如果你在A1:B2有以下数组

 aa ab 

我们可以执行逻辑操作A1:B2="b" 。 这会创build一个这样的数组

 FALSE FALSE FALSE TRUE 

记住TRUE=1FALSE=0如果我们乘以ROW(A1:A2)那么这个数组就变成了

 0*1 0*1 = 0 0 0*2 1*2 = 0 2 

所以你可以看到这个数组的SUM2 ,这正是我们正在寻找的位置(这是MATCH会返回的)

所以我们把这一切都包装在这样的SUMPRODUCT

 =SUMPRODUCT((A1:B2="b")*ROW(A1:A2)) 

你已经得到了你的答案