为什么这个 LOOKUP 函数会这样工作?

为什么这个 LOOKUP 函数会这样工作?

您能帮我理解为什么此 LOOKUP 函数如此工作吗?黄色突出显示的单元格 A6 中的公式似乎返回最右侧非零数据值(来自第 3 行)上方的标签(来自第 2 行)。

Microsoft Excel 电子表格摘录的图片

公式是=LOOKUP(1000,1/(A3:G3<>0),A2:G2)

我感到困惑的是:

  • 数据单元未排序(Microsoft 文档说他们应该如此)
  • 查找向量是“1/(A3:G3<>0)”。我猜我们通过将数据值除以 1 来生成一个向量,但是“<>0”的效果是什么?
  • 查找值为1000,但其他值结果相同。

有没有更直接,更可靠或更少混淆的方法来实现同样的目标?即返回最右边非零数据值上方的标签?

谢谢!

答案1

也许您应该重新阅读您提供的链接中的文档,其中指出:

中的值查找向量必须按升序排列

这里的数组不仅仅是中的值A3:G3,因为它们被操纵到表达式中

1/(A3:G3<>0)

哪个将要按升序形成一个数组,原因是 - 使用提供的数据集 - 它将解析为:

1/({TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE})

即:

{1,#DIV/0!,1,1,1,1,#DIV/0!}

即一个数组只能包含 1 或 #DIV/0! 错误。并且由于LOOKUP忽略了错误值,因此可以说该数组确实按升序排列。

使用 1000 作为查找值虽然有点过度,但还是可以的:任何大于 1 的数字都足够了。

答案2

作为 O365 Excel 客户,您应该可以使用较新的 XLOOKUP 函数(而不是 LOOKUP)来访问其他可以准确执行所需操作的函数。

使用:=XLOOKUP(TRUE,A3:G3>0,A2:G2,,0,-1)

创建A3:G3>0一个动态数组,对于您的特定示例来说,它是:{TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE}

此外,-1XLOOKUP() 末尾的参数表示“从最后搜索”。此 XLOOKUP 表示“查找第一次 A3:G3>0 为 TRUE 时,从右边开始并返回第 2 行相应单元格的值。”

另外,感谢您在问题中加入了 Excel 版本的“关于”字符串。这是非常有用的信息。

相关内容