如何在单元格中使用带有二进制值的SUMPRODUCT作为字符串?

时间:2017-08-23 19:56:36

标签: excel excel-vba excel-formula vba

我想使用SUMPRODUCT,以便它可以在包含二进制数字串的单元格内工作,例如:

Cell A1 =" 011001" 单元格B1 =" 123456"

现在我想使用SUMPRODUCT来执行加权平均,单元格A1包含数字而单元格B1包含权重,正确的公式应该像这样工作:

1st element (0) = weight (1)

2nd element (1) = weight (2)

3rd element (1) = weight (3)

4th element (0) = weight (4)

5th element (0) = weight (5)

6th element (1) = weight (6)

这个假想的公式SUMPRODUCT(A1; B1)/ SUM(B1)应该相等= ~52% 如果有人知道该问题的任何解决方案,请提前感谢您。

3 个答案:

答案 0 :(得分:3)

这将做你想要的:

 =SUMPRODUCT(MID(A1,ROW(1:6),1)*MID(B1,ROW(1:6),1))/SUMPRODUCT(--MID(B1,ROW(1:6),1))

enter image description here

如果你想让它更具动感,如果你的数字不总是6位数:

=SUMPRODUCT(MID(A1,ROW(INDIRECT("1:" & MIN(LEN(A1),LEN(B1)))),1)*MID(B1,ROW(INDIRECT("1:" & MIN(LEN(A1),LEN(B1)))),1))/SUMPRODUCT(--MID(B1,ROW(INDIRECT("1:" & MIN(LEN(A1),LEN(B1)))),1))

现在这将是两个数字中最短的一个,并将其用作数字长度。因此,如果A1只有5位数而B1有6位,那么它只会使用前5位数。

如果B1为5且A1为6,则仅使用前两个。

随着数字长度的增加或缩小,公式将适应。

enter image description here

答案 1 :(得分:0)

对数组使用大括号语法,示例在强制后如下所示: = SUMPRODUCT({0,1,1,0,0,1},{1,2,3,4,5.6})

答案 2 :(得分:0)

如果权重总是按顺序为1,2,3,4,5,6,则使用

=SUMPRODUCT(VALUE(MID(A1,{1,2,3,4,5,6},1)),{1,2,3,4,5,6})/21

如果6个权重可能与此不同,则使用

=SUMPRODUCT(VALUE(MID(A1,{1,2,3,4,5,6},1)),VALUE(MID(B1,{1,2,3,4,5,6},1)))/SUM(VALUE(MID(B1,{1,2,3,4,5,6},1)))

如果有多于或少于6个权重,则相应地调整数组{1,2,3,4,5,6}

如果A1中的二进制字符串长度短于数组大小,则在两种情况下都会出现#VALUE!错误。如果B1中的权重字符串比数组大小短,则在第二种情况下会得到相同的错误(在第一种情况下不使用B1)。如果任一字符串的字符数多于数组的大小,则只使用最左边的字符,直到数组的大小。