MS Excel传递范围在searchfunction

有谁可以解释为什么这个工程,

= LOOKUP(1E + 100,SEARCH($ $Ò2:$ O 5 $,J6),$ $ø2:$ $Ò4)

这从单元格的单元格中查找一个值,按预期工作。

但search(O2:O5,J6)不能自行工作? 所以,SEARCH($ O $ 2:$ O $ 5,J6)退缩#value err。 我会认为这将返回的位置,如果find。 如果我传入{“”},例如search({“xyz”,“zyx”,“xsy”},J6),这是有效的,但是为什么范围不起作用。

一个解释将不胜感激。

你的问题的答案是双重的。

首先,大多数函数不会接受单个参数的多个值。 让他们这样做要求他们计算为数组公式。 你可以用CTRL SHIFT ENTER (而不是仅仅是ENTER )来强制一个函数手动完成这个操作。 您将知道它是以数组公式的formsinput的,因为大括号{}将围绕公式栏中的公式。 完成之后,进入“公式”选项卡 – >“评估公式”以查看步骤。 只用searchfunction,你可能会得到像{#N/A!;#N/A!;11;#N/A!;#N/A!;} 。 请注意,它是公式结果的一个数组(列表),其中大部分是错误的(因为找不到文本),一个结果正确。

这带来了答案的第二部分,即error handling。 再次,大多数函数不能很好地处理错误。 如果某个函数的任何部分出现错误,则整个函数将导致该错误。 你可以用ISNUMBERIFERROR这样的error handling函数来解决这个问题。

所以现在我们知道了,为什么LOOKUP工作? 因为它处理这两种情况作为其内置function的一部分。 查找作为其内置function的一部分,因为它是如何工作的具体细节,将其参数作为数组来计算。这意味着如果您将另一个函数作为参数(例如SEARCH进行馈送,则会强制该函数为作为一个数组进行评估..其他一些函数也可以这样做,比如SUMPRODUCTINDEX

其次, LOOKUP已经有内置的error handling。 如果参数中有错误,它将返回最接近第一个参数的答案(但仍在其下面)。 这就是为什么你提供的LOOKUP函数中的第一个参数是1E+100 ,这意味着10^100或者基本上是1,接着是100个零。 任何发现的search结果将会是一个小于这个数字的数字,所以如果它发现任何东西,它会返回这个数字,因为其他的都会导致#N / A! 而LOOKUP会忽略这些错误。