使用 VLOOKUP 简化求和

使用 VLOOKUP 简化求和

假设有一行 [100, 0.9, 50, 0.8, ...],我想要得到一个像 100×0.9+50×0.8+... 这样的总和。简单地写出每个求和项对于长行来说似乎很麻烦,有没有更简单的方法来写它?这是我到目前为止所做的。(注意每个项的变量是 (D3, E3), (F3, G3),...)

=SUM(FLOOR(VLOOKUP(D3,Sheet!B2:C99,2,FALSE)*E3,1),FLOOR(VLOOKUP(F3,Sheet!B2:C99,2,FALSE)*G3,1),...)

答案1

这是我的:

=LET(Array, WRAPROWS(A!:H!,2,0),SUMPRODUCT(CHOOSECOLS(Array,1),CHOOSECOLS(Array,2)))

正如评论中指出的那样,我的答案略有不同,因为我在单元格 G1 中有一个不同的值。

在此处输入图片描述

解释:

LET- 在公式中创建变量以提高可靠性

Array, WRAPROWS()- 将变量数组设置为 1x8 矩阵到 4x2 矩阵的转换(wraprows)

SUMPRODUCT- 对数组进行乘法和求和

CHOOSECOLS()- 取数组子集的公式;也可以使用INDEX()

答案2

您可以使用以下公式:

=LET(r,$A3:$H3, f,LAMBDA(开始,CHOOSECOLS(r,SEQUENCE(1,COLUMNS(r)/2,开始,2))), SUMPRODUCT(f(1),f(2)) )

在此处输入图片描述

答案3

另一种方法是使用@FlexYourData 提供的数据。

=SUM(BYCOL($A$1:$H$1,LAMBDA(arr,arr*OFFSET(arr,,1)*ISODD(COLUMN(arr)))))
这个问题是它OFFSET使用的列比原始范围多一列,所以你不能将公式放在下一列。

在此处输入图片描述

答案4

对于没有 Office 365 的用户,请使用较旧的公式:

=SUMPRODUCT(A1:G1,B1:H1*ISODD(COLUMN($A$1:INDEX($1:$1,COLUMNS(A1:G1)))))

这里的关键是要有两个相差 1 的范围。只需更改公式中的A1:G1和引用以包含其数据。和应保持原样。这些是计数器,必须从第 1 列开始才能正常工作。B1:H1$A$1$1:$1

在此处输入图片描述

相关内容