不能在Excel中使用N()和数组

我想使用列B(右)中的权重来计算列A(左边的那个)的加权平均值(WM)。 问题是A列可以有字符值。

AB 1 9.1 625 2 8.3 74 3 9.1 655 4 -- 20 5 8.8 48 6 10.0 691 7 8.2 107 8 6.4 34 9 7.1 25 10 8.4 126 

我试图用以下方式计算WM:

 =SUMPRODUCT(A1:A10;B1:B10)/SUM(B1:B10) 

但它认为“ – ”为零,保持不变。 相反,它应该忽略这一行的价值和重量。

所以我想到了使用数组公式。 第一个(F1)强制将数值编号,使得“ – ”变为0.第二个(F2)如果相应的值不是一个数字,

 F1. {=SUM(N(A1:A10)*B1:B10)} # = 21885.5 F2. {=SUM(IF(N(A1:A10)=0;0;1)*B1:B10)} # = 2405 F3. =F1/F2 # = 9.1, the weighted average 
  • F1是错的; 它应该是21925.5,但看起来只是A1(9.1)在计算中被考虑,而不是整个数组。 如果我把A1设置为“ – ”,那么F1就会变成0.所以看起来范围不适合用N()来代替数组,只返回第一个转换后的值。
  • F2也是错的; 应该是2385,即B4(20)不应该被认为是总和。 问题是一样的。 事实上,如果我将公式更改为=SUM(IF(A1:A10;1;0)*B1:B10)并将A4更改为空白,则结果是正确的。

为了解决这个问题,所以我需要将“ – ”replace为空白,并将这个公式用于WM:

 {=SUM(A1:A10*IF(A1:A10;1;0)*B1:B10)/SUM(IF(A1:A10;1;0)*B1:B10)} 

我的问题是:是否有一种方法来使用N()与数组或只有有限的数量的函数与数组一起工作,有没有什么我可以做的?

谢谢

不要与你的数据争吵。

C1中input:

  =IF(ISNUMBER(A1),A1,0) 

并抄下来。 然后在D1input:

 =IF(ISNUMBER(A1),B1,0) 

并抄下来。 这有效地从权重过程中删除垃圾。 在另一个小区:

 =SUMPRODUCT(C1:C10*D1:D10)/SUM(D1:D10) 

在这里输入图像说明

编辑#1:

如果你想让N()产生一个数组,你必须添加零:

C1中的这个例子中input:

 =SUMPRODUCT((N(A1:A3))*(B1:B3)) 

C2中input:

 =SUMPRODUCT((N(A1:A3+0))*(B1:B3)) 

在这里输入图像说明

如你所见,只有C2是正确的。

 =SUMPRODUCT(A1:A10;B1:B10)/SUMPRODUCT(B1:B10*(isnumber(A1:A10)) 

这为WM返回了9.193082的值。 当A中的对应值不是一个数时,isnumber部分基本上使列B中的任何值等于0

显然我误解了这个问题,你的问题是关于N()与数组的用法…我不知道,但我可以说的是上面的公式不需要N()函数。