Excel 365是否有现成公式实现多一维区域相乘返回一维数组?
Excel 365 多一维区域逐元素相乘的现成实现方案
Excel 365支持直接对一维区域执行逐元素乘法,返回溢出数组结果。例如:
| # | A | B | C |
|---|---|---|---|
| 1 | 1 | 0 | 1 |
| 2 | 0 | 1 | 1 |
在A3单元格输入公式:=A1:C1 * A2:C2,会计算数组{1,0,1} * {0,1,1},返回结果数组{0,0,1}并自动溢出填充到A3:C3区域:
| # | A | B | C |
|---|---|---|---|
| 3 | 0 | 0 | 1 |
这类逐元素乘法常配合FILTER()、SUMPRODUCT()等函数使用。针对你提出的是否有现成公式接收任意数量一维区域,逐元素相乘后返回一维数组的问题:
目前Excel 365没有专门的单一名词内置函数直接实现该需求,但可以通过组合现有内置函数完成,无需编写自定义LAMBDA函数,具体方案如下:
实现公式
使用REDUCE结合VSTACK(或HSTACK,根据区域方向选择):
=REDUCE(1, VSTACK(区域1, 区域2, 区域3, ...), LAMBDA(acc, curr, acc * curr))
参数说明
REDUCE:负责迭代处理每个输入的一维区域,初始值设为1(乘法单位元,不影响最终结果)VSTACK:将多个横向一维区域堆叠为二维数组,每个原区域作为一行;如果是纵向区域,改用HSTACK将其组合为二维数组- 迭代逻辑
acc * curr:每次将累积结果与当前一维区域执行逐元素乘法,最终返回所有区域逐元素相乘后的一维数组,自动溢出到对应单元格区域
示例
假设需要计算A1:C1、A2:C2、A4:C4三个区域的逐元素乘积,公式为:
=REDUCE(1, VSTACK(A1:C1, A2:C2, A4:C4), LAMBDA(acc, curr, acc * curr))
执行后会返回三个区域对应位置元素相乘的一维数组,自动溢出填充到目标区域。
补充说明
SUMPRODUCT()和MMULT()确实仅返回单个聚合值,无法直接返回一维数组结果- 上述方案使用的均为Excel 365内置函数,不属于自定义
LAMBDA范畴,满足"现成公式"的需求
内容的提问来源于stack exchange,提问作者Yuri Ammosov
相关产品推荐
相关产品推荐

