如果大于0,则平均一个数字列表

时间:2015-08-13 11:06:24

标签: excel

如何平均值大于0的数字列表?我知道我可以在Excel中使用AVERAGEIF功能

我的数据位于A2,A5,A6,A10,A17。

如果数据大于0,我只想平均。

由于我的数据不是范围,我无法使用AVERAGEIF函数范围。

需要一些帮助。

修改

例如,

我尝试了三个数字:

1) 98.068 and 98.954 and 0 so my forumla looked like this:

=AVERAGE(IF(N(OFFSET(A2,{0,5,10},))>0,N(OFFSET(A2,{0,5,10},))))

答案是99.106。不知道为什么。

2 个答案:

答案 0 :(得分:2)

一些选择:

1)=SUM(SUMIF(INDIRECT({"A2","A5","A6","A10","A17"}),">0"))/SUM(COUNTIF(INDIRECT({"A2","A5","A6","A10","A17"}),">0"))

2)=AVERAGE(IF(N(INDIRECT({"A2","A5","A6","A10","A17"}))>0,N(INDIRECT({"A2","A5","A6","A10","A17"}))))

3) =AVERAGE(IF(N(OFFSET(A2,{0,3,4,8,15},))>0,N(OFFSET(A2,{0,3,4,8,15},))))

2)和3)必须以数组公式**

提交

此致

答案 1 :(得分:2)

(0)一个简单的方法

=SUM(A2*(A2>0),A5*(A5>0),A6*(A6>0),A10*(A10>0),A17*(A17>0))/SUM(A2>0,A5>0,A6>0,A10>0,A17>0)

(4)更通用的方法

=SUM((A1:A20>0)*A1:A20*(ADDRESS(ROW(A1:A20),1,4)={"A2","A5","A6","A10","A17"}))/
SUM((A1:A20>0)*(ADDRESS(ROW(A1:A20),1,4)={"A2","A5","A6","A10","A17"}))

第二个是数组公式,必须输入 Ctrl Shift Enter

如果单元格中有文本而不是数字,那么这应该替换第一个公式: -

=SUM(N(A2)*(A2>0),N(A5)*(A5>0),N(A6)*(A6>0),N(A10)*(A10>0),N(A17)*(A17>0))/SUM(N(A2)>0,N(A5)>0,N(A6)>0,N(A10)>0,N(A17)>0)

(我还没有在分子的>括号中使用N,因为我认为如果A2等是文本,产品将始终为零)

我无法说服N在第二个公式中使用数组,所以目前我有相当冗长的

=SUM((IF(ISNUMBER(A1:A20),A1:A20,0)>0)*IF(ISNUMBER(A1:A20),A1:A20,0)*(ADDRESS(ROW(A1:A20),1,4)={"A2","A5","A6","A10","A17"}))/
SUM((IF(ISNUMBER(A1:A20),A1:A20,0)>0)*(ADDRESS(ROW(A1:A20),1,4)={"A2","A5","A6","A10","A17"}))

但是我已经在文本值和负数上测试了它,看起来确实很好。

唯一的例外是其中一个单元格包含TRUE。在这种情况下,第一个公式将其计为1,第二个公式将忽略它。