如何在LibreOffice中按Subject分组统计Foo列非空单元格数量?
在LibreOffice Calc中按Subject分组统计Foo列非空单元格数量
你提到COUNTIF没法满足带非空条件的分组统计,确实,COUNTIF只能处理单条件,而我们需要同时满足「Subject匹配」和「Foo非空」两个条件,下面给你两种简单可行的实现方法:
一、公式法:使用SUMPRODUCT函数
SUMPRODUCT可以组合多条件实现分组统计,正好适配你的需求。假设你的数据位于A列(Subject)和B列(Foo),表头在第1行,数据行是第2到第6行:
- 先在空白列(比如D列)手动列出所有需要统计的Subject值:
subject_1、subject_2、subject_3 - 在D2对应的E2单元格输入公式:
=SUMPRODUCT((A$2:A$6=D2)*(B$2:B$6<>""))
- 下拉填充公式到E4,就能得到你想要的统计结果:
subject_1对应结果2subject_2对应结果1subject_3对应结果0
公式逻辑解释:
(A$2:A$6=D2):生成布尔数组,A列中与当前D列Subject匹配的位置为TRUE(等价于1),不匹配为FALSE(等价于0)(B$2:B$6<>""):生成布尔数组,B列非空单元格为TRUE(等价于1),空单元格为FALSE(等价于0)SUMPRODUCT会将两个数组对应位置的值相乘,再求和,最终得到同时满足两个条件的单元格总数
二、数据透视表法(适合大量数据,操作更直观)
如果你的数据量较大,用数据透视表会更高效,步骤如下:
- 选中整个数据区域(包含表头A1:B6)
- 点击顶部菜单栏的数据 → 数据透视表 → 创建...
- 在弹出的对话框中确认数据区域正确,选择数据透视表的放置位置(比如新工作表或当前工作表空白处),点击确定
- 在右侧「数据透视表字段」面板中:
- 将
Subject字段拖到行区域 - 将
Foo字段拖到值区域
- 将
- 修改值字段的统计规则:
- 点击值区域的
求和项:Foo,选择修改... - 在对话框中,将「函数」改为计数,勾选「忽略空值」,点击确定
- 点击值区域的
- (可选)如果空分组显示为空白而非0:右键点击数值区域 → 格式单元格 → 选择「数字」分类,在「空值显示」处输入
0,点击确定
完成后数据透视表会自动输出你期望的结果:
subject_1 2 subject_2 1 subject_3 0
内容的提问来源于stack exchange,提问作者user2261062




