使用 lambda 在 excel 中定义 2D 查找的最佳方法是什么?

使用 lambda 在 excel 中定义 2D 查找的最佳方法是什么?

我很惊讶 Excel 竟然没有一个简单的功能2D_LOOKUP(array, row, col)。例如,我有一个正在管理的复杂 Excel 表,我经常想在给定日期提取给定参数的值。

作为一个具体的例子,我想说:

日期1 日期2 日期3 日期4
第 1 行 A C
第 2 行 F G H
第 3 行 J 大号

然后打电话2D_LOOKUP(Array, Row2, Date2)再回复F

不过,多亏了lambda我现在可以定义这样的函数了。有多种方法可以做到这一点 - 使用XLOOKUP、使用INDEXMATCH使用VLOOKUP等。

我很好奇什么是最佳的实现方式。代码本身可能很复杂,因为我的计划是通过 a 在名称管理器中定义它,LAMBDA然后从现在开始忘掉它。

我看见https://medium.com/@gareth.stretton/excel-matrix-lookup-with-lambda-30a345472152这似乎有一个很好的解决方案,但是MAKEARRAY我不确定它的效率如何。

要明确的是,我正在寻找一个完整的解决方案——我想要我(以及后续读者)可以直接放入名称管理器的代码。

谢谢!/YGA

答案1

这是一种不使用任何LAMBDA()辅助函数的方法:

在此处输入图片描述


• 单元格中使用的公式C8

=_2D_LOOKUP(A1:E4,A7,A8)

其中,_2D_LOOKUP()是名称管理器中定义的名称,参考以下公式:

=LAMBDA(Array,Row,Col,
 LET(
     _Data, Array,
     _Array, DROP(_Data,1,1),
     _Row, DROP(TAKE(_Data,,1),1),
     _Col, DROP(TAKE(_Data,1),,1),
     XLOOKUP(Row,_Row,XLOOKUP(Col,_Col,_Array,""),"")))

自定义LAMBDA()函数及其参数为

在此处输入图片描述


=_2D_LOOKUP(Array, Row, Col)

在此处输入图片描述


Excel 命名规则

在名称管理器中定义名称时,应遵循以下基本规则:

• 名称应位于255 characters long

• 名称不能包含spaces和大多数punctuation characters

• 名称必须以letterunderscore (_), 或者backslash (\)。如果名称以其他内容开头,Excel 将抛出错误。

• Excel 名称是case-insensitive

• 不能cell references喜欢MAT1或者SSS1到某个范围。

• 可以使用单个字母来命名范围,如、、、a等,但字母、、、和除外(因为这些字符在 中键入时用作选择当前选定单元格的行或列的快捷方式)。bDrRcCNameBox


命名准则摘自这里


答案2

我不知道这个版本是更快还是更慢,但它在处理错误数据方面确实做得更好。

=LAMBDA(Array,Row,Col,
LET(ACol, MATCH(Col, TAKE(Array, 1), 0),
    ARow, MATCH(Row, TAKE(Array, ,1), 0),
    IFERROR(INDEX(Array, ARow, ACol), "")))

另一个具有VLOOKUP功能的版本(稍微短一些):

=LAMBDA(Array,Row,Col,
 LET(ACol, MATCH(Col, TAKE(Array, 1), 0),
    IFERROR(VLOOKUP(Row, Array, ACol, FALSE), "")))

相关内容