Excel 公式函数之 COUNT & SUM

Excel是用来记录数据的,数据自然是用来统计分析的。

最简单的统计分析就是计数COUNT和求和SUM这种了。

计数数值元素 COUNT

COUNT用于对数值元素进行计数。

=COUNT(A2:A7)
=COUNT(A2:A7, TRUE, "123")
  • 单元格里内容,只有数值和日期都作为数值看待
  • 参数里的 TRUE/FALSE 和字符串形式的数字则也作为数值看待

计数空白元素的 COUNTA 和 COUNTBLANK

COUNT只对数值元素计数,如果关心的是非空元素,则可以使用COUNTA

对于非空元素的定义,如果一个单元格使用了公式,但返回值是空字符串"",这个单元格不是“空白”的,也会被计入计数。对此,我们可以理解为,单元格的内容是一个公式,是“非空”的。

有了计数非空元素的COUNTA,就不奇怪会有一个计数空白元素的COUNTBLANK。但会让人有点意外的是,COUNTBLANK只接受一个参数,只能对单元格计数,而不能对参数计数。而且,COUNTBLANK认为返回空字符串的""公式单元格是“空白”的。

比较一下这三个用于计数的公式

=COUNT("", "123")   # 返回1
=COUNTA("", "123")  # 返回2
=COUNTBLANK("")     # 错误! 只能对单元格计数
=COUNTBLANK(A2:A7)  # 对单元格计数 

一个有意思的问题是COUNTA里面的"A"是什么意思呢?也许

COUNTA = COUNT A Thing

加了如果的 COUNTIF

没有如果的世界,是没有意思的。

如果需要针对符合特定条件的单元格计数,就需要用到COUNTIF这样的函数。

=COUNTIF(A2:A7, ">50")    # 大于50才计数
=COUNTIF(A2:A7, "=50")    # 等于50才计数
=COUNTIF(A2:A7, "<>50")   # 不等于50才计数
=COUNTIF(A2:A7, "张三")   # 内容等于指定内容才计数
=COUNTIF(A2:A7, "张*")    # 匹配姓张的
=COUNTIF(A2:A7, "张??")   # 匹配姓张的,名字三个字

多个如果 COUNTIFS

逻辑判断的复杂之处在于很多时候我们需要的是多个判断你的组合。

类似于IFIFS的不同,COUNTIF也有与之对应的COUNTIFS

=COUNTIFS(A2:A7, "张*", B2:B7, "男")

# 从 A2:A7 这一列匹配“名字”姓张的
# 从 B2:B7 这一列匹配“性别”是男的
# 两者同时符合时才进行计数

用 Tcl 描述 COUNTIFS

proc COUNTIFS {range expr args} {
  set result 0

  set index -1
  foreach value $range {
    incr index 

    if { ![match $value $expr] } {
      continue
    }

    set match 1
    foreach {other_range other_expr} $args {
      set other_value [lindex $other_range $index]

      if { ![match $other_value $other_expr] } {
        set match 0
        break
      }
    }

    if {!$match} continue

    incr result
  }

  return $result
}

求和 SUM

小朋友学习数学,学会数数之后,就是求和。求和和数数实质上都是对一组数据进行计数。

只是求和一般不考虑“空白”元素。所以去掉上面针对“空白”元素的计数公式,与之对应的有用于求和的公式。

=SUM(A2:A7)
=SUMIF(F2:F7, A2:A7, "张*")
=SUMIFS(F2:F7, A2:A7, "张*", B2:B7, "男")

可以看到带有“如果”的公式(SUMIF 和 SUMIFS)比对应的 COUNTIF 和 COUNTIFS 多了一个参数。这实际上恰恰体现了“数数是计数的基础”。对于数到的数值,我们才进行求和。