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

Bec*_*kie 4 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
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激.非常感谢你提前.

L42*_*L42 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).

结果: 在此输入图像描述