如何平均值大于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。不知道为什么。
答案 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,第二个公式将忽略它。