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行(如果他们在不同的行,更改R2CR#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被低估了。 更多在这里:

http://fiveminutelessons.com/learn-microsoft-excel/multiply-two-columns-and-add-results-using-sumproduct