如何用Excel公式按日历周对主组求和(排除子组重复统计)
需求说明
仅使用Excel公式(禁用VBA),按日历周统计A-H列中有数值的主组数量:每个主组(如Group 1、Group 2)在对应周内只要任意子组(如1a、1b)有数值,就计为1,最终求和该周符合条件的主组总数。示例中第1周结果为3,对应Group 1、Group 2、Group 4在该周有数值。
示例数据
| Group 1 | Group 1 | Group 2 | Group 2 | Group 3 | Group 3 | Group 4 | Group 4 | 日期 | 年份 | 周 | SUM |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1a | 1b | 2a | 2b | 3a | 3b | 4a | 4b | 2025/1/1 | 2025 | 1 | |
| 1 | 1 | 2025/1/1 | 2025 | 1 | |||||||
| 1 | 2025/1/2 | 2025 | 1 | ||||||||
| 1 | 2025/1/3 | 2025 | 1 | ||||||||
| 1 | 2025/1/3 | 2025 | 1 | ||||||||
| 1 | 2025/1/3 | 2025 | 1 | ||||||||
| 1 | 1 | 2025/2/8 | 2025 | 6 | |||||||
| 1 | 1 | 2025/2/9 | 2025 | 7 | |||||||
| 1 | 1 | 1 | 2025/2/10 | 2025 | 7 | ||||||
| 1 | 1 | 1 | 2025/2/11 | 2025 | 7 |
公式解决方案
1. 兼容旧版Excel(无动态数组)
在第一个SUM单元格(如L2)输入以下公式,按回车后下拉填充至所有行:
= --(COUNTIFS(K$2:K$11,K2,A$2:A$11,"<>")+COUNTIFS(K$2:K$11,K2,B$2:B$11,"<>")>0)+ --(COUNTIFS(K$2:K$11,K2,C$2:C$11,"<>")+COUNTIFS(K$2:K$11,K2,D$2:D$11,"<>")>0)+ --(COUNTIFS(K$2:K$11,K2,E$2:E$11,"<>")+COUNTIFS(K$2:K$11,K2,F$2:F$11,"<>")>0)+ --(COUNTIFS(K$2:K$11,K2,G$2:G$11,"<>")+COUNTIFS(K$2:K$11,K2,H$2:H$11,"<>")>0)
公式逻辑:
- 对每个主组的两列,分别统计当前周内有非空值的行数,相加后若大于0,说明该主组本周有数值,用
--转换为1,否则为0 - 四个主组的结果相加,即为该周符合条件的主组总数
2. Excel 365/2021 动态数组公式
在L2单元格输入以下公式,按回车后自动填充所有行:
=BYROW(K2:K11,LAMBDA(week,SUM(--(MMULT(--(COUNTIFS(K$2:K$11,week,OFFSET(A$2:A$11,,SEQUENCE(4)*2-2,ROWS(A$2:A$11),2),"<>")>0),{1;1})>0))))
公式逻辑:
- 用
SEQUENCE生成主组的起始列索引,OFFSET批量提取每个主组的两列数据 COUNTIFS统计对应周内的非空值行数,MMULT判断主组两列是否至少有一个非空值BYROW遍历所有行,自动计算每行对应周的主组数量
验证结果
- 第1周(周=1):SUM=3(Group1、Group2、Group4有数值)
- 第6周(周=6):SUM=2(Group2、Group3有数值)
- 第7周(周=7):SUM=4(四个主组均有数值)
内容的提问来源于stack exchange,提问作者Code_Z
相关产品推荐
相关产品推荐

