在 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 是否是工作簿中重用的最佳方式,或者是否有更简单的实现可用于实现行/列小计。
目前还不可能(2024 年 3 月),但很快就会实现!
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 中函数柯里化的唯一在线参考。嗯,是 - 这可能是第二个。 :-)