在 Excel 中是否可以使用标准函数代替 lambda?

问题描述 投票:0回答:1

在 Excel 中制作具有不确定表格大小的模板时,我喜欢使用数组函数

我喜欢实现的一个相当简单的任务是行/列总计,因此 SUM 似乎是一个合适的工具,但 SUM 是一个贪婪函数,会消耗任何形状的数组并将其折叠到一个单元格中。

Lambda 函数来救援,

BYROW
听起来它可以做我想要的事情,但是每次定义 LAMBDA 或使用名称管理器都感觉很尴尬,特别是当它是预定义函数的别名时

使用 BYROW / BYCOL:

CODE A:
=BYROW (myArray, LAMBDA (row, SUM (Row))

如果我使用名称管理器,我可以将语句简化为

CODE B:
mySum :=  LAMBDA (row, SUM (Row))
=BYROW (myArray, mySum)

但是,当我尝试(如下)时,我收到 #NAME 错误。

CODE C:
=BYROW (myArray, SUM) 

有没有办法告诉Excel检查默认函数,例如或者这是我最好的选择是使用名称管理器

顺便说一句: 代码 A 是否是一次性使用的最佳方式,而代码 B 是否是工作簿中重用的最佳方式,或者是否有更简单的实现可用于实现行/列小计。

excel lambda built-in
1个回答
0
投票

目前还不可能(2024 年 3 月),但很快就会实现!

查看这篇 Microsoft 博客文章,了解即将推出的

GROUPBY
PIVOTBY
功能
(目前处于测试版)。

作为实现这些函数的一部分,他们讨论了 函数作为参数 - 基本上使用

LAMBDA
函数。许多现有功能,如
SUM
AVERAGE
MAX
MIN
)可以简单地从列表中选择:

Plus 他们已将此功能添加到当前使用

LAMBDA
的所有现有功能中!

我很高兴看到此功能全面推出。但与此同时,为总和(以及计数、最大值、最小值...)定义一个简单的 lambda 的方法可能是最好的方法。 我选择了“L”。我自己的前缀(用于 lambda):

L.Sum    = LAMBDA(x, sum(x));
L.Max    = LAMBDA(x, max(x));
L.Min    = LAMBDA(x, min(x));
L.Count  = LAMBDA(x, count(x));
L.CountA = LAMBDA(x, counta(x));

函数柯里化

最后,有一种称为函数“柯里化”的方法,我已经读过(但没有体验过)。在这里你有一个返回 function 结果的函数。因此,可以只编写一个函数,根据您传递的参数,该函数相当于

sum(x)
count(x)
函数,甚至
textjoin(",", x)
textjoin("|", x)
。虽然我还没有完成实现,但你可以想象一个大的
IFS
块。然后你就可以像这样使用它:

=BYCOL(A2:F9, Summary("sum"))
=BYCOL(A2:F9, Summary("count"))
=BYCOL(A2:F9, Summary("max"))
=BYCOL(A2:F9, Summary("textjoin",","))
=BYCOL(A2:F9, Summary("textjoin","|"))

现在您所要做的就是编写函数...!

Summary = lambda(func,[optparam], 
  lambda(x,
    ifs(
      func="sum",sum(x),
      func="max",max(x),
      func="min",min(x),
      func="count",count(x),
      func="textjoin",textjoin(optparam,true,x),
      "else"="else",NA()
    )
  )
);

并且它有效!!!

这篇 FlexYourData 帖子 可能是 Excel 中函数柯里化的唯一在线参考。嗯,是 - 这可能是第二个。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.