在sumif或其他东西的公式 - 如果在办公室的功能

时间:2017-09-04 01:12:15

标签: function if-statement libreoffice libreoffice-calc

我正在尝试使用在avgif函数中返回true或false的函数作为条件, 例如,我在单元格H2:H15中有此列:

22,53
21,08
X
23,8
21,4
20,66
random string 1
21,51
Xaksjdjasd
23,45
19,9
27,76
22,4
oijf,mdknfsjp

我想计算上面最后x个单元格的平均值(x是单元格O26中的数字),我试着:

=IF(ISNUMBER(H2);AVERAGEIF($H$2:$H2;&ISNUMBER($H$2:$H100);$H$2:$H2);"X")
=IF(ISNUMBER(H3);AVERAGEIF($H$2:$H3;ISNUMBER($H$2:$H101);$H$2:$H3);"X")
=IF(ISNUMBER(H4);AVERAGEIF($H$2:$H4;ISNUMBER($H$2:$H102);$H$2:$H4);"X")
=IF(ISNUMBER(H6);AVERAGEIF($H$2:$H6;"ISNUMBER($H$2:$H104)";$H$2:$H6);"X")
=IF(ISNUMBER(H7);AVERAGEIF($H$2:$H7;IF(ISNUMBER($H$2:$H104));$H$2:$H7);"X")
=IF(ISNUMBER(H8);AVERAGEIF($H$2:$H8;ISNUMBER("");$H$2:$H8);"X")
=IF(ISNUMBER(H9);AVERAGEIF($H$2:$H9;ISNUMBER(CELL("address"));$H$2:$H9);"X")
=IF(ISNUMBER(H10);AVERAGEIF($H$2:$H10;"="&IF(ISNUMBER(CELL("address"));CELL("contents");"");$H$2:$H10);"X")
=AVERAGEIF($H$2:$H11;"="&IF(ISNUMBER(CELL("address"));CELL("contents");"");$H$2:$H11)
=AVERAGEIF($H$2:$H12;&IF(ISNUMBER(CELL("address"));TRUE();FALSE());$H$2:$H12)
=AVERAGEIF($H$2:$H13;IF(ISNUMBER(CELL("address"));TRUE();FALSE());$H$2:$H13)

输出:

Err:510
#DIV/0!
#DIV/0!
#DIV/0!
#DIV/0!
#DIV/0!
#DIV/0!
#DIV/0!
#DIV/0!
Err:510
#DIV/0!

(是的,我正在尝试使用cell()作为当前正在被函数评估的单元格,我想知道这是否可行或者这是否是解决问题的方法)

我知道avg()会自动跳过每个不是数字的单元格,但我需要avgif才能工作,因为我想实现一个函数,平均最后五个单元格不计算字符串,例如,如果其中一个前面的最后4个单元格是一个字符串,x设置为6(计算当前单元格),该函数将平均当前单元格和至少5个先前单元格(如果第五个最后一个单元格也是字符串,则更多)

感谢大家的帮助

1 个答案:

答案 0 :(得分:0)

SUMPRODUCT比AVERAGEIF等功能更强大。例如,从A列中的以下数据开始。

1              
2
random string
20

以下公式求平均值,因此23除以3等于7,66。

=SUMPRODUCT(A1:A4; ISNUMBER(A1:A4)) / SUMPRODUCT(ISNUMBER(A1:A4))

故障:

  • SUMPRODUCT(A1:A4; ISNUMBER(A1:A4))
      对于任何非数字值,
    • ISNUMBER(A1:A4)将返回零,并且乘以零会为该行添加零。
    • A1:A4中的其他行将相加,在此示例中为23。
  • SUMPRODUCT(ISNUMBER(A1:A4)
    • SUMPRODUCT(ISNUMBER(A1:A4))将为每个有数字的行添加1,从而产生带有数字的行总数,在示例中为3。

实际上在上面的例子中,公式可以更短,因为SUMPRODUCT排除了错误的结果。

=SUMPRODUCT(A1:A4) / SUMPRODUCT(ISNUMBER(A1:A4))

也许您正在尝试执行以下操作。如果它们是数字,它会将当前行的所有行向上平均。

=IF(ISNUMBER($H15); SUMPRODUCT($H$2:$H15) / SUMPRODUCT(ISNUMBER($H$2:$H15)); "X")