Excel - 在数组中查找值并返回相应列的内容

时间:2014-07-25 04:40:13

标签: excel excel-formula

我试图在数组中找到一个值,然后返回相应列中特定行的值。

在下面的示例中,我需要知道雪佛兰所在的海湾:

    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

我在阵列C2:E5中寻找雪佛兰。一旦确定雪佛兰在D列中,我需要它返回D1中的值。如果它在E列中,我需要它来返回E1中的值。

非常感谢任何帮助。非常感谢你。

4 个答案:

答案 0 :(得分:5)

试试这个数组公式

=INDEX($C$1:$E$5,1,SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1))

或者如果您确定每列都包含正在搜索的内容,则可以这样写:

=INDEX($C$1:$E$5,1,SMALL(IF($C$1:$E$5=A1,COLUMN($A:$C),99^99),1))

Ctrl + Shitf + Enter 在任何单元格中输入公式。

它是如何运作的?
我们的最终目标是找到包含匹配项的

  • 首先,我们使用以下公式搜索匹配项:SEARCH(A1,$C$1:$E$5)。它只是检查是否有任何匹配 A1 的条目。实际上,它可以简化为$C$1:$E$5=A1,但我不确定每列中的所有条目是否与 A1 中的内容完全匹配。
  • 当输入数组公式时,该公式将生成值数组。类似于:{SEARCH(A1,C1), SEARCH(A1,D1), SEARCH(A1,E1);... SEARCH(A1,E5)}。结果将是数字和错误的数组(如果找不到)。但我们并不想要,否则我们每次都会返回错误。
  • 然后我们使用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)可以使用。

<强>结果: enter image description here

答案 1 :(得分:0)

另一个快速而肮脏的答案是放一个&#34;假的&#34;在整个数据集上方行,然后确定哪个占位符列返回了正确的结果。

在B1中,你可以把等式

=MATCH($A$2,B3:B6,0)

然后在C1中,你可以把

=MATCH($A$2,C3:C6,0)

依此类推,直到你覆盖了所有的行和列。改变B3:B6&amp; C3:C6反映给定列中的实际数据行。

现在,有趣的数组公式将实际返回海湾。我在单元格A1中有这个数组公式,它从B1:D1看,但你可以在任何你想要的地方移动单元格A1,B1:D1范围应该是你在上面创建的所有虚拟列。此外,假设您想要的托架位于第2行(如果它们位于不同的行中,请将 R2C 更改为 R#C ,其中#是行号) 。要正确输入,请输入公式并然后按CTRL + SHIFT + ENTER

=INDIRECT("R2C"&SUM(IF(ISERROR(B1:D1),FALSE,B1:D1))+1,FALSE)

如果正确输入公式,当您单击单元格时,它将围绕等式显示大括号{}。

答案 2 :(得分:0)

假设查找值在A1:

中,此公式将执行此操作
="Bay "&SUMPRODUCT((B2:D5=A1)*(COLUMN(B2:D5)))-1

您可以轻松调整它以添加更多行和列。

公式返回包含查找值的列号,并将其与单词Bay连接,以返回所需的确切结果。

最后的-1调整了Bay 2列实际上是工作表中第三列的事实,因此您可能还需要调整该偏移量。

SUMPRODUCT功能被低估了。更多相关信息:

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

答案 3 :(得分:0)

上面的SUMPRODUCT公式非常适合我想要的。

例如在二维范围COLUMN的{​​{1}}处找到给定值的位置ROWA1

A2:J44

(不在范围内)

然后可以在例如use: =SUMPRODUCT((A2:J44=A!)*(COLUMN(A2:J44))) gives the Absolute* COL# and : =SUMPRODUCT((A2:J44=A1)*(ROW(A2:J44))) gives the Absolute* ROW# INDEX()等功能。