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

Dat*_*ber 3 excel excel-formula dynamic-arrays

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

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

  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:

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

示例截图

Sco*_*ner 5

修改第二个链接中OP的问题起始公式并使用LN和EXP。我们可以使用 MMULT 来到达我们想要的地方:

=LET( a, LN(A1#),
       v, SEQUENCE( ROWS(a) ), 
       h, TRANSPOSE( v ),
       stagr, (v - h + 1) * (v >= h),
       m, IFERROR(INDEX( a, IF(stagr>0,stagr,-1), ), 0),
        EXP(MMULT(m,SEQUENCE(ROWS(m),,1,0))))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您应该能够A1#用您的 SEQUENCE 公式替换:

=LET( a, LN(SEQUENCE(D11,1,1-D23,D24)),
       v, SEQUENCE( ROWS(a) ), 
       h, TRANSPOSE( v ),
       stagr, (v - h + 1) * (v >= h),
       m, IFERROR(INDEX( a, IF(stagr>0,stagr,-1), ), 0),
        EXP(MMULT(m,SEQUENCE(ROWS(m),,1,0))))
Run Code Online (Sandbox Code Playgroud)