Excel 公式,计算动态数组各列值的乘积
Excel formula, calculate product of values in each column of dynamic array
我正在为一个 table 中的“结果”列编写一个公式,该公式根据主列中的某些条件在另一个 table 中查找数据,然后显示它。在我被难住的地方,它是 returning 一个动态二维数组(行 return 是可变的,取决于 FILTER
/MATCH
查找)。示例(4 列 x 3 行)return 值:{1,2,3,4;1,2,3,4;1,2,3,4}
我想得到每一列中值的乘积,这样使用上面示例 return 值的公式的输出将是这样的:{1,8,27,64}
(相当于这样做:{1,2,3,4} * {1,2,3,4} * {1,2,3,4}
)
如何仅使用公式函数来完成此操作?
我的所有 google 搜索都返回了假设静态 table 大小的方法,将列相互相乘,and/or table“现有" 在 sheet 某处(但仍然没有给出我正在寻找的结果)。
我已经通过 VBA 解决了这个问题,但由于我使用 sheet 的方式的性质,等待通过 [= 更新到 运行 75=] 太慢了。这并不是说它需要永远——大约 60 行只需要 3-4 秒——而是我对查找 table 进行了更改,等待主 [=66= 中结果列的更新],检查结果,进行另一次更改,冲洗并重复 50 次奇数次,同时我微调事物以使其看起来像我想要的那样,并且延迟对我造成了影响。
我也不确定我是否可以使用助手 rows/columns,因为结果需要打包得太近,只会显示 #SPILL
,这导致引用它的公式只显示同一件事情。所以看起来这需要自包含。
插件绝对没有。
(其他小编辑:糟糕,我把 INDEX
/MATCH
放在上面,而我的意思是 FILTER
/MATCH
。)
编辑: 希望这有助于澄清?
这是我的主要 table 的结构,其中包含此公式:
My Formula
从 ColA 和 ColB 中获取单词并使用 FILTER
/MATCH
进行查找 1) returns 多个结果,2) return 结果是整行,3) 是完全匹配(对于 ColA 和 ColB 中不存在于查找 table 中的单词,它 return 没有意义)。
这意味着,就公式的当前状态而言,我正在为主 table 中的大部分行取回二维数组。 AFAICT,我无法将它们粘贴到某个帮助列中,因为它们会重叠并导致 #SPILL
然后不会在任何公式中评估然后引用它们。
我需要将它们转换为 1 行 x 与源相同的列的一维数组,其中每列中的结果仅是该列内容的乘积。然后,我将继续使用更多公式从这个公式构建,以实现我的最终结果,该结果将很好地适合单个单元格。 (我已经解决了那个问题。它只是从 2D -> 1D 产品数组开始,我需要帮助。)
所以:
根据评论进行编辑:
如果 sumproduct 的顺序错误,那么备选方案很简单:
=SUMPRODUCT(D10:F10,D11:F11,D12:F12,D13:F13)
=sumproduct(A1:A4,B1:B4,C1:C4)
然后 A1:A4(和其他数组)可以是检索数据的匹配索引。
或者在其他单元格中有索引和匹配项,并在和积中使用这些结果。
有戏了,补了点资料:
在单元格 D88 中:
=INDEX($B:$H,MATCH($C10,$A:$A,0),MATCH(D,$B:$H,0))
在单元格 D15 中:
=SUMPRODUCT(D10:D13,E10:E13,F10:F13)
在单元格 D9:F9 中进行数据验证以选择列标题 A:G。
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),CHOOSE({1,2,3,4},PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d)))
其中 MyArray
是 returns 您的二维数组的构造,例如
{1,2,3,4;1,2,3,4;1,2,3,4}
上面假设MyArray
returns一个包含4列的数组。对于超出该数字的每一列,LET
函数中将需要一个额外的 name 和 calculation 参数。此外,应调整传递给 CHOOSE
的数组,使其包含从 1 到 MyArray
.
返回的列数的整数数组
例如,如果 MyArray
返回:
{1,2,3,4,5;1,2,3,4,5;1,2,3,4,5}
所需的结构是:
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),e,INDEX(z,,5),CHOOSE({1,2,3,4,5},PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d),PRODUCT(e)))
Edit:更好的方法是用 SEQUENCE
构造替换传递给 CHOOSE
的静态数组:
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),e,INDEX(z,,5),CHOOSE(SEQUENCE(,COLUMNS(z)),PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d),PRODUCT(e)))
我正在为一个 table 中的“结果”列编写一个公式,该公式根据主列中的某些条件在另一个 table 中查找数据,然后显示它。在我被难住的地方,它是 returning 一个动态二维数组(行 return 是可变的,取决于 FILTER
/MATCH
查找)。示例(4 列 x 3 行)return 值:{1,2,3,4;1,2,3,4;1,2,3,4}
我想得到每一列中值的乘积,这样使用上面示例 return 值的公式的输出将是这样的:{1,8,27,64}
(相当于这样做:{1,2,3,4} * {1,2,3,4} * {1,2,3,4}
)
如何仅使用公式函数来完成此操作?
我的所有 google 搜索都返回了假设静态 table 大小的方法,将列相互相乘,and/or table“现有" 在 sheet 某处(但仍然没有给出我正在寻找的结果)。
我已经通过 VBA 解决了这个问题,但由于我使用 sheet 的方式的性质,等待通过 [= 更新到 运行 75=] 太慢了。这并不是说它需要永远——大约 60 行只需要 3-4 秒——而是我对查找 table 进行了更改,等待主 [=66= 中结果列的更新],检查结果,进行另一次更改,冲洗并重复 50 次奇数次,同时我微调事物以使其看起来像我想要的那样,并且延迟对我造成了影响。
我也不确定我是否可以使用助手 rows/columns,因为结果需要打包得太近,只会显示 #SPILL
,这导致引用它的公式只显示同一件事情。所以看起来这需要自包含。
插件绝对没有。
(其他小编辑:糟糕,我把 INDEX
/MATCH
放在上面,而我的意思是 FILTER
/MATCH
。)
编辑: 希望这有助于澄清?
这是我的主要 table 的结构,其中包含此公式:
My Formula
从 ColA 和 ColB 中获取单词并使用 FILTER
/MATCH
进行查找 1) returns 多个结果,2) return 结果是整行,3) 是完全匹配(对于 ColA 和 ColB 中不存在于查找 table 中的单词,它 return 没有意义)。
这意味着,就公式的当前状态而言,我正在为主 table 中的大部分行取回二维数组。 AFAICT,我无法将它们粘贴到某个帮助列中,因为它们会重叠并导致 #SPILL
然后不会在任何公式中评估然后引用它们。
我需要将它们转换为 1 行 x 与源相同的列的一维数组,其中每列中的结果仅是该列内容的乘积。然后,我将继续使用更多公式从这个公式构建,以实现我的最终结果,该结果将很好地适合单个单元格。 (我已经解决了那个问题。它只是从 2D -> 1D 产品数组开始,我需要帮助。)
所以:
根据评论进行编辑: 如果 sumproduct 的顺序错误,那么备选方案很简单:
=SUMPRODUCT(D10:F10,D11:F11,D12:F12,D13:F13)
=sumproduct(A1:A4,B1:B4,C1:C4)
然后 A1:A4(和其他数组)可以是检索数据的匹配索引。
或者在其他单元格中有索引和匹配项,并在和积中使用这些结果。
有戏了,补了点资料:
在单元格 D88 中:
=INDEX($B:$H,MATCH($C10,$A:$A,0),MATCH(D,$B:$H,0))
在单元格 D15 中:
=SUMPRODUCT(D10:D13,E10:E13,F10:F13)
在单元格 D9:F9 中进行数据验证以选择列标题 A:G。
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),CHOOSE({1,2,3,4},PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d)))
其中 MyArray
是 returns 您的二维数组的构造,例如
{1,2,3,4;1,2,3,4;1,2,3,4}
上面假设MyArray
returns一个包含4列的数组。对于超出该数字的每一列,LET
函数中将需要一个额外的 name 和 calculation 参数。此外,应调整传递给 CHOOSE
的数组,使其包含从 1 到 MyArray
.
例如,如果 MyArray
返回:
{1,2,3,4,5;1,2,3,4,5;1,2,3,4,5}
所需的结构是:
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),e,INDEX(z,,5),CHOOSE({1,2,3,4,5},PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d),PRODUCT(e)))
Edit:更好的方法是用 SEQUENCE
构造替换传递给 CHOOSE
的静态数组:
=LET(z,MyArray,a,INDEX(z,,1),b,INDEX(z,,2),c,INDEX(z,,3),d,INDEX(z,,4),e,INDEX(z,,5),CHOOSE(SEQUENCE(,COLUMNS(z)),PRODUCT(a),PRODUCT(b),PRODUCT(c),PRODUCT(d),PRODUCT(e)))