Excel 的 LAMBDA 具有“某种”复合函数

vso*_*ler 8 excel lambda excel-formula office365 excel-lambda

自从我得知 Excel 现在是图灵完备的,我就明白我现在可以仅使用公式对 Excel 进行“编程”,因此排除任何 VBA 的使用。

我不知道我的结论是对还是错。事实上,我并不介意。

然而,令我满意的是,我已经能够在公式中“编程”程序流的两个最基本的结构:1-分支控制流(使用 IF 函数在 Excel 中没有秘密)和 2-循环(FOR、WHILE , UNTIL 循环)。

让我更详细地解释一下我的发现。(备注:因为我使用的是西班牙语版本的 Excel 365,所以公式中的字段分隔符是分号(“;”)而不是逗号(“,”)。

A- FOR 循环中的累加器

FOR 循环中的累加器

B- 阶乘(使用产品)

阶乘

C-WHILE循环

WHILE循环

D-UNTIL 循环

直到循环

E- 内部/外部范围的概念

范围

现在,我提问的时间到了:

我想使用一个实际上是公式数组的公式

公式数组

我想对“元组”中的第一个数字使用累加器,而我想对元组中的第二个数字使用阶乘。所有这一切都使用一个 Excel 公式。我想我离成功已经不远了。

REDUCE 函数接受包含 2 个 LAMBDAS 而不是单个 LAMBDA 函数的 LET 函数。到这里为止,一切都很完美。然而,LET 函数似乎只返回一个“单个”函数而不是函数元组

函数元组(仍有待完成)

我可以返回(在图中)函数“x”或函数“y”,但不能返回元组(x,y)。

我尝试过使用 HSTACK(x,y),但它似乎不起作用。

我知道这是一个复杂的问题,但我已尽力让自己被理解。

有人可以给我任何关于如何解决我的问题的线索吗?

Jvd*_*vdV 6

非常好的问题。

我注意到,在您的尝试中,您在第一个参数中给出了REDUCE()单个常量值。有趣的是,文档中没有任何地方指出您不能以array-format给出值。因此,您可以使用第一个参数以(您的情况;水平)数组格式给出所有常量,当您循环第二个参数的数组时,您可以使用以下方法应用不同类型的逻辑:CHOOSE()

在此输入图像描述

=REDUCE({0,1},SEQUENCE(5),LAMBDA(a,b,CHOOSE({1,2},a+b,a*b))) 
Run Code Online (Sandbox Code Playgroud)

这样,您就有了一个REDUCE()函数,该函数的内部进程将从数组形式的第一个参数更新给定的常量。您现在可以开始水平堆叠多个函数并输入常量数组,例如:

=REDUCE({0,1,100},SEQUENCE(5),LAMBDA(a,b,CHOOSE({1,2,3},a+b,a*b,a/b)))
Run Code Online (Sandbox Code Playgroud)

我想您必须像我在荷兰语版本的 Excel 中一样使用{0\1}和。{1\2}


给定你的累加器:

在此输入图像描述

公式为A1

=REDUCE(F1:G1,SEQUENCE(F3),LAMBDA(a,b,CHOOSE({1,2},a+b,a*b)))
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,JvdV,绝对是我一直在寻找的答案:谢谢 (2认同)
  • 现在我可以在循环中使用所需数量的函数 (2认同)