=COUNTIF(B2:B8,"<>") 统计 B2:B8 中不为空的单元格。<> 表示“不等于”,后面什么都不写时,就是与空单元格比较。=COUNTA(B2:B8) 给出同样的数字。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Phone | Count | Result | ||
| 2 | Ana | ana@mail.com | 555-0101 | Emails, COUNTIF | 5 | |
| 3 | Ben | 555-0102 | Emails, COUNTA | 5 | ||
| 4 | Cara | cara@mail.com | Missing emails | 2 | ||
| 5 | Dan | dan@mail.com | 555-0104 | Phones | 4 | |
| 6 | Eva | Rows | 7 | |||
| 7 | Finn | finn@mail.com | 555-0106 | |||
| 8 | Gus | gus@mail.com |
七个联系人中有五个填了邮箱,所以 F2 和 F3 都显示 5,COUNTBLANK 统计缺少邮箱的两个。已填写和空白的数量相加,始终等于 F6 中的行数。在 B3 中输入一个邮箱,F2 会加一,F4 会减一。
COUNTIF 非空与 COUNTA
对于单个区域,=COUNTIF(B2:B8,"<>") 和 =COUNTA(B2:B8) 统计的单元格相同:任何非空单元格,包括数字、日期、TRUE/FALSE 和错误值。COUNTA 更短。"<>" 这种写法是为需要第二个条件的时候准备的,因为 COUNTA 不能带条件,而 COUNTIFS 可以。
COUNT 是另一个函数:它只统计数字和日期,所以对一列姓名会返回 0。三者的对比见 COUNT 和 COUNTA。
非空的反面是 "":=COUNTIF(B2:B8,"") 统计空单元格,作用与 COUNTBLANK 相同。
COUNTIFS 非空并加上另一个条件
把 "<>" 作为 COUNTIFS 的条件之一。下面的例子中,有发货日期就表示订单已经发出。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Region | Order | Shipped | Condition | Count | |
| 2 | North | A-101 | 2026-01-08 | North, shipped | 2 | |
| 3 | South | A-102 | North, not shipped | 1 | ||
| 4 | North | A-103 | 2026-02-06 | Any region, shipped | 3 | |
| 5 | East | A-104 | 2026-02-20 | Order and date filled | 3 | |
| 6 | South | A-105 | ||||
| 7 | North | A-106 |
F2 统计有日期的两笔 North 订单,F3 统计没有日期的那一笔。F5 在两列上都使用 "<>",所以统计的是两列都已填写的行。同样的条件也适用于 SUMIFS 和 AVERAGEIFS:=SUMIFS(D2:D7,C2:C7,"<>") 只会对已发货的行累加金额列 D。
只是看起来为空的单元格
含有一个空格的单元格看起来是空的,但其实包含文本,"<>" 和 COUNTA 都会统计它。从其他系统粘贴来的数据,或者用输入空格来“清空”的单元格,经常会这样。去掉空格后检查长度,就能统计有可见内容的单元格。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Note | Count | Result | |
| 2 | Ana | call back | COUNTA | 4 | |
| 3 | Ben | Visible content | 2 | ||
| 4 | Cara | Space in B3? | 1 | ||
| 5 | Dan | paid | |||
| 6 | Eva |
B3 中有一个空格,B6 中有两个。COUNTA 把它们和两条真正的备注一起统计,显示 4。SUMPRODUCT 版本先对每个单元格去除空格,只统计还剩下内容的:2。要清理这些单元格本身,选中它们并按 Delete,或在辅助列中使用 TRIM。如果在“查找和替换”中把所有空格都替换为空,“call back”也会变成“callback”。
返回空字符串的公式
像 =IF(C2>0,C2,"") 这样的公式在条件不成立时什么也不显示,但单元格并不为空:它包含一个结果为空字符串的公式。不同的计数函数对它的处理不同。假设 A2:A6 中依次是 Apple、一个返回 "" 的公式、一个空单元格、5 和 Pear,Excel 给出:
=COUNTA(A2:A6) 4 counts the "" formula
=COUNTIF(A2:A6,"<>") 4 counts the "" formula
=COUNTBLANK(A2:A6) 2 counts the "" formula as blank
=COUNTIF(A2:A6,"") 2 counts the "" formula as blank
=SUMPRODUCT(--(LEN(A2:A6)>0)) 3 counts only visible content
=COUNTIF(A2:A6,"?*") 2 counts text of at least one character
所以这个公式所在的单元格既被算作空白,又被算作非空,COUNTA 加 COUNTBLANK 会大于单元格总数。当一列中填满了这样的公式时,用 =SUMPRODUCT(--(LEN(A2:A6)>0)) 统计,它只统计显示了内容的单元格。再加一个条件:=SUMPRODUCT((B2:B6="North")*(LEN(A2:A6)>0))。
练习:非空加一个条件
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | City | Phone | Count | Result | |
| 2 | Ana | Paris | 555-0101 | Paris with phone | ||
| 3 | Ben | Lyon | 555-0102 | |||
| 4 | Cara | Paris | ||||
| 5 | Dan | Paris | 555-0104 | |||
| 6 | Eva | Lyon | ||||
| 7 | Finn | Nice | 555-0106 | |||
| 8 | Gus | Paris |
轮到你了: 统计 Paris 中在 C 列填有电话号码的联系人。在 F2 中写公式。
该用哪个公式
| 你想统计 | 公式 |
|---|---|
| 一个区域中已填写的单元格 | =COUNTA(B2:B8) |
| 已填写的单元格,再加一个条件 | =COUNTIFS(A2:A8,"North",B2:B8,"<>") |
| 两列都已填写的行 | =COUNTIFS(B2:B8,"<>",C2:C8,"<>") |
有可见内容的单元格,跳过空格和 "" 公式 | =SUMPRODUCT(--(LEN(TRIM(B2:B8))>0)) |
| 仅已填写的文本单元格 | =COUNTIF(B2:B8,"?*") |
| 空单元格 | =COUNTBLANK(B2:B8) |
如果要检查单个单元格而不是计数,=B2<>"" 在 B2 显示了内容时返回 TRUE,=ISBLANK(B2) 只有在 B2 真正为空、不含任何公式时才返回 TRUE。
常见问题
COUNTIF "<>" 和 COUNTA 一样吗?
对于单个区域,是的:=COUNTIF(B2:B8,"<>") 和 =COUNTA(B2:B8) 统计的单元格相同(文本、数字、日期、TRUE/FALSE 和错误值)。"<>" 这种写法是为 COUNTIFS 准备的,在那里它可以和其他条件放在一起。
COUNTIF 中的 "<>" 是什么意思?
<> 表示“不等于”,后面什么都不写时,就是与空单元格比较。所以 "<>" 表示“非空”,"<>North" 表示“不等于 North”。
如何统计既不为空也不为零的单元格?
使用 =COUNTIFS(B2:B8,"<>",B2:B8,"<>0")。单独使用条件 "<>0" 也会统计空单元格,因为空单元格不等于 0;加上 "<>" 就能把它们排除。
为什么 COUNTA 会统计看起来为空的单元格?
它们其实不是空的:里面有一个空格,或者有一个返回空字符串 "" 的公式。如果只想统计有可见内容的单元格,使用 =SUMPRODUCT(--(LEN(TRIM(B2:B8))>0))。