Google Sheets公式:统计指定出现次数的唯一值数量
Google Sheets 多筛选条件下按会议次数统计客户账户数方案
字段与筛选条件预设
先统一公式引用的位置,你可以根据自己表格的实际列位置调整对应参数:
- 原始数据列:A列为会议日期、B列为客户账户名称、C列为客户层级
- 筛选条件单元格:
E1:统计周期开始日期F1:统计周期结束日期G1:待筛选的客户层级,留空则统计所有层级
推荐公式(支持自动溢出结果,无需辅助列)
使用LET函数把中间计算逻辑封装,不需要额外加辅助列,输入后直接返回你要的格式化结果:
=LET( valid_rows,FILTER(A:C,A:A>=E1,A:A<=F1,IF(G1<>"",C:C=G1,TRUE)), all_accounts,INDEX(valid_rows,,2), unique_accounts,UNIQUE(all_accounts), meet_counts,COUNTIF(all_accounts,unique_accounts), { "召开1次会议的账户共"&COUNTIF(meet_counts,1)&"个"; "召开2次会议的账户共"&COUNTIF(meet_counts,2)&"个"; "召开3次会议的账户共"&COUNTIF(meet_counts,3)&"个"; "召开3次及以上会议的账户共"&COUNTIF(meet_counts,">=3")&"个" } )
公式逻辑说明
- 第一步通过
FILTER先把符合时间范围、客户层级要求的所有会议记录筛出来,从根源减少后续计算量 - 提取筛出记录里的全部账户名称,再去重得到符合条件的唯一账户列表
- 逐个统计每个唯一账户在筛选结果里的出现次数,也就是对应账户的开会次数
- 最后按开会次数分组,统计每个次数段对应的账户总数,拼接成你要的文本格式输出
旧版本兼容方案(无LET函数场景)
如果你的表格环境不支持LET函数,可以用辅助列拆分计算:
- 找空白列(比如Z列)作为第一辅助列,Z1输入以下公式提取符合筛选条件的唯一账户列表,公式会自动向下溢出所有结果:
=UNIQUE(FILTER(B:B,A:A>=E1,A:A<=F1,IF(G1<>"",C:C=G1,TRUE))) - AA列作为第二辅助列,AA1输入以下公式,下拉填充到Z列无值的行,统计每个账户的开会次数:
=COUNTIFS(B:B,Z1,A:A,">="&E1,A:A,"<="&F1,C:C,IF(G1="","<>",G1)) - 在结果展示单元格分别输入对应统计公式即可:
- 1次会议统计:
="召开1次会议的账户共"&COUNTIF(AA:AA,1)&"个" - 2次会议统计:
="召开2次会议的账户共"&COUNTIF(AA:AA,2)&"个" - 3次及以上会议统计:
="召开3次及以上会议的账户共"&COUNTIF(AA:AA,">=3")&"个"
- 1次会议统计:
注意事项
- 如果你的原始数据字段列位置和预设不一致,只需要修改公式里对应的列引用即可:比如账户名称存在D列,就把所有引用B列的位置改成D列,
INDEX取列的序号对应调整为账户在筛选结果里的列位置 - 不需要单独统计恰好3次会议的数值时,直接删掉LET公式结果数组里对应3次的那一行即可
- 单独用COUNTIFS无法实现这个需求的核心原因是:COUNTIFS只能统计符合条件的记录总行数,无法完成「先按账户去重聚合计算次数,再按次数分组统计」的两层逻辑。
内容的提问来源于stack exchange,提问作者A.Be
相关产品推荐
相关产品推荐

