Excel索引以查找多个值

时间:2018-04-05 10:51:13

标签: excel-formula

我有一个包含2列和多行(A列和B列)的小数据集

example data

我想在我的工作表中的其他地方的公式中返回codeblk 3的每个实例(所以vlookup是因为它只显示第一个实例)如果它没有出现那么一条消息说它不应该在那里来了。

我的公式部分工作但我无法看到它没有显示值的原因。

我的公式如下: 这是一个数组

{=IF(ISERROR(INDEX($A$55:$B$70,SMALL(IF($B$55:$B$70=3,ROW($B$55:$B$70)),ROW(1:1))-1,1)),"No value's produced",INDEX($A$2:$C$7,SMALL(IF($B$55:$B$70=3,ROW($B$55:$B$70)),ROW(1:1))-1,1))}

显示的结果只是“没有产生值”但它应该反映3个单独单元格中的语句B,C和D(当改变ROW(1:1),ROW(2:2)等时)

{=SMALL(IF($B$56:$B$69=4,ROW($B$56:$B$69)),ROW(1:1))} - 这会产生结果68,这是正确的行。

有什么想法吗? 谢谢,

1 个答案:

答案 0 :(得分:1)

这是一个数组公式 - 使用 Ctrl + Shift + 输入验证公式,同时仍在公式栏中

=IFERROR(INDEX($A$55:$B$70,SMALL(IF($B$55:$B$70=3,ROW($B$55:$B$70)-54),ROW(1:1)),1),"No value's produced")

你面临的问题是你的索引在$ B $ 55开始它的第一行,你需要抵消数组中的行数来反映这一点。例如,INDEX包含16行,但如果第一行上有匹配,则要求INDEX()中的第55行,它就无法实现。

修改

由于原始公式包含-1之外的另一个IF(),因此偏移量不同步,我还在游戏中留下了一个额外的括号(上面的公式现在已经编辑过了)

ROW()函数基本上将$ B $ 55:$ B $ 70转换为ROW(55:70),这将生成数组{55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70},因此需要偏移量将这些行数转换为它们所代表的位置在INDEX()的索引数据中。

然后另一个IF()语句生成{FALSE;2;3;4;FALSE等的数组。

您可以通过突出显示公式栏中公式的部分并点击F9进行计算来查看这些结果。

enter image description here