Excel – 在数组中查找值并返回相应列的内容
我试图在数组中find一个值,然后返回相应列中特定行的值。
在下面的例子中,我需要知道雪佛兰在哪个海湾:
Column A Column C Column D Column E Chevrolet Bay 1 Bay 2 Bay 3 Toyota Ford Saturn Honda Chevrolet Jaguar Ferrari Subaru Lexus Mitsubishi Hundai BMW
我正在寻找arraysC2:E5中的雪佛兰。 一旦确定雪佛兰在D列,我需要它返回D1中的值。 如果是在E列,我需要它返回E1中的值。
任何帮助将不胜感激。 非常感谢你提前。
试试这个数组公式 :
=INDEX($C$1:$E$5,1,SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1))
或者如果您确定每列都包含正在search的内容,则可以这样写:
=INDEX($C$1:$E$5,1,SMALL(IF($C$1:$E$5=A1,COLUMN($A:$C),99^99),1))
通过按Ctrl + Shitf + Enter在任何单元格中input公式。
它是如何工作的?
我们的最终目标是find包含匹配的列 :
- 首先我们用这个公式
SEARCH(A1,$C$1:$E$5)
匹配:SEARCH(A1,$C$1:$E$5)
。 它只是检查是否有任何条目匹配A1 。 实际上,它可以简化为$C$1:$E$5=A1
但我不确定每列中的所有条目是否完全匹配A1中的内容 。 - 作为数组公式input时,该公式将产生一个数组值 。 例如:
{SEARCH(A1,C1), SEARCH(A1,D1), SEARCH(A1,E1);... SEARCH(A1,E5)}
。 结果将是数组和错误(如果未find)。 但是我们不想要那个,否则我们每次都会返回错误。 - 然后,我们使用
IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99)
。 这个公式返回列号,如果有匹配的话,返回一个相对大的数字,否则返回99^99
。 结果将是:{99^99, 99^99, 99^99, 2, ..., 99^99}
。 - 而且我们已经接近我们所需要的,因为我们已经有了一个列数组和巨大的数字 。 我们只是使用
SMALL
来返回最小的数字,在我看来这是最低的列号匹配的地方。 所以SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1)
会返回2.哪一列是雪佛兰被引用在$ C $ 1:$ E $ 1 。 - 由于我们已经有了列号,我们只需使用INDEX函数即
INDEX($C$1:$E$5,1,2)
。
注意: 99^99
可以是任何比较大的数字。 不一定99^99
。 可以使用实际的16385 (Excel 2007中的最大列数+ 1以上)。
结果:
另一个快速而肮脏的答案是在整个数据集之上放置一个“虚拟”行,然后确定哪个占位符列返回了正确的结果。
在B1中,你可以把方程
=MATCH($A$2,B3:B6,0)
然后在C1,你可以放
=MATCH($A$2,C3:C6,0)
等到你已经覆盖了所有的行和列。 更改B3:B6和C3:C6以反映给定列中的实际数据行。
现在,实际上将返回海湾的有趣的数组公式。 我在单元格A1中有这个数组公式,并且您可以从B1:D1中查找,但是您可以将单元格A1移动到您想要的任何位置,B1:D1范围应该是您在上面创build的所有虚拟列。 此外,这是假设你想要的海湾在第2行(如果他们在不同的行,更改R2C到R#C其中#是行号)。 为了正确input,input公式, 然后按CTRL + SHIFT + ENTER 。
=INDIRECT("R2C"&SUM(IF(ISERROR(B1:D1),FALSE,B1:D1))+1,FALSE)
如果公式input正确,单击单元格时,将在公式周围显示大括号{}。
这个公式可以做到这一点,假设查找值在A1:
="Bay "&SUMPRODUCT((B2:D5=A1)*(COLUMN(B2:D5)))-1
你可以很容易地调整它来添加更多的行和列。
该公式将返回包含查找值的列号,并将其与单词Bay连接以返回所需的确切结果。
最后的-1调整Bay 2列实际上是工作表中的第三列,所以您可能还需要调整该偏移量。
SUMPRODUCTfunction被低估了。 更多在这里: