相关疑难解决方法(0)

无法使用 Let 和 Makearray 函数将范围传递给 lambda

回顾这个问题,我希望在数组中创建一个运行总计,但在数组的每一行中重新开始

1 2 3 4
5 6 7 8

导致

1 3 6 10
5 11 18 26

一种解决方案是使用 Makearray,效果很好:

=MAKEARRAY(
    2,
    4,
    LAMBDA(r, c,
        SUM(
            INDEX(sheet1!A1:D2, r, 1) : INDEX(sheet1!A1:D2, r, c)
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

不过,我现在希望使用 Let 语句更普遍地编写此内容:

=LET(
    range, Sheet1!A1:D2,
    MAKEARRAY(
        rows(range),
        Columns(range),
        LAMBDA(r, c,
            SUM(INDEX(range, r, 1) : INDEX(range, r, c))
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

但这会导致

在此输入图像描述

这个非常相似的公式可以正常工作(它不应该解决原始问题,而只是测试是否可以将范围传递到 Let 语句内的 lambda):

=LET(
    range, Sheet1!A1:D2,
    SCAN(0, range, LAMBDA(a, c, a + c + INDEX(range, 1, 1)))
)
Run Code Online (Sandbox Code Playgroud)

相同的代码还可以将范围作为参数传递到 …

excel range pass-by-reference let excel-formula

5
推荐指数
1
解决办法
1164
查看次数

没有 SCAN 或 OFFSET 的数组的累积乘积/运行乘积的 Excel 动态解决方案

我想计算数组的累积/运行乘积。

然而,这两个问题下提供的解决方案并不完全是我想要的:

  1. Excel 中数组的累积乘积(乘法)
  2. Excel动态数组公式创建列的运行乘积

在这些问题下提供的两个解决方案中,该解决方案要么使用SCAN()我当前不可用的函数,要么使用OFFSET()仅允许range类型输入作为数组,而不是使用诸如 之类的函数生成的数组SEQUENCE()

更明确地说:我想要计算其运行乘积的数组是=SEQUENCE(D11,1,1-D23,D24)其中 D11 是整数,D23 和 D24 是小数。

有没有人对此有公式内解决方案,或者我是否必须执行中间步骤以首先将序列“写入”范围,然后使用该OFFSET()函数?

编辑1

上述函数的一个例子SEQUENCE(){0.97, 0.96, 0.95, ..., 0.75}

编辑2

OFFSET()如果有一种方法可以在不使用range类型数组作为输入的情况下使用它,我当然会对解决方案感到满意。

编辑3

这是我试图在没有中间步骤的情况下实现的目标的数值示例。

示例截图

excel excel-formula dynamic-arrays

3
推荐指数
1
解决办法
480
查看次数