求助:如何用COUNTIF函数优先统计最新血红蛋白检测结果
解决方案
核心思路是优先使用K列的检测值(当K列非空时),否则使用E列的首次检测值,基于这个统一的"有效检测值"来统计各区间的数量。以下是适配不同Excel版本的公式:
通用版本(兼容所有Excel版本)
适用于Excel 2019及更早版本:
- 统计血红蛋白值>12的数量:
=SUMPRODUCT(--(IF(K2:K121<>"",K2:K121,E2:E121)>12)) - 统计血红蛋白值在10~12之间(含边界)的数量:
=SUMPRODUCT(--(IF(K2:K121<>"",K2:K121,E2:E121)>=10),--(IF(K2:K121<>"",K2:K121,E2:E121)<=12)) - 统计血红蛋白值<10的数量:
=SUMPRODUCT(--(IF(K2:K121<>"",K2:K121,E2:E121)<10))
公式逻辑说明
IF(K2:K121<>"",K2:K121,E2:E121):对每一行判断K列是否有值,有则取K列数据,无则取E列数据,生成一组"有效检测值"。--(...):将布尔判断结果(TRUE/FALSE)转换为数值1/0,方便SUMPRODUCT汇总。SUMPRODUCT:遍历所有行,汇总符合条件的行数。
简化版本(仅适用于Excel 365/2021)
利用动态数组函数可以让公式更简洁:
- 统计血红蛋白值>12的数量:
=COUNT(FILTER(IF(K2:K121<>"",K2:K121,E2:E121),IF(K2:K121<>"",K2:K121,E2:E121)>12)) - 统计血红蛋白值在10~12之间(含边界)的数量:
=COUNT(FILTER(IF(K2:K121<>"",K2:K121,E2:E121),(IF(K2:K121<>"",K2:K121,E2:E121)>=10)*(IF(K2:K121<>"",K2:K121,E2:E121)<=12))) - 统计血红蛋白值<10的数量:
=COUNT(FILTER(IF(K2:K121<>"",K2:K121,E2:E121),IF(K2:K121<>"",K2:K121,E2:E121)<10))
逻辑说明
FILTER函数先筛选出符合区间条件的"有效检测值",再用COUNT统计筛选结果的行数,逻辑更直观。
内容的提问来源于stack exchange,提问作者Sophie Thorson
相关产品推荐
相关产品推荐

