如何用原生Excel公式动态按项目汇总指定时段天数?
纯Excel公式实现动态项目天数统计(无需VBA)
针对你需要自动识别新增项目、基于动态时间窗口统计天数的需求,以下是纯Excel公式的实现方案,分两种常见数据场景说明:
场景1:每行对应项目的单个日期记录
假设输入数据结构:
- A列:项目名称(从A2开始,会动态新增行)
- B列:对应项目的记录日期
- D1:统计起始日期(
from) - E1:统计结束日期(
to)
步骤1:生成动态不重复项目列表
在任意空白单元格(比如G2)输入公式:
=UNIQUE(FILTER(A:A, A:A <> ""))
该公式会自动提取A列所有非空的不重复项目,新增项目后列表会自动更新(Excel 365/2021及以上版本支持动态数组自动溢出)。
步骤2:统计每个项目的符合条件天数
在H2单元格输入公式(会自动匹配G列的所有项目并溢出结果):
=BYROW(G2#, LAMBDA(project, COUNTIFS(A:A, project, B:B, ">="&$D$1, B:B, "<="&$E$1)))
BYROW遍历动态生成的项目列表COUNTIFS同时匹配项目名称和日期窗口,统计符合条件的记录数(即天数)
旧版本Excel(无动态数组)替代方案:
- 选中A列数据,点击「数据」→「高级」筛选,勾选「将筛选结果复制到其他位置」,指定复制到G2,再勾选「选择不重复的记录」,生成固定的不重复项目列表
- 在H2输入公式
=COUNTIFS(A:A, G2, B:B, ">="&$D$1, B:B, "<="&$E$1),下拉填充所有项目行
场景2:每行对应项目的日期时段(开始/结束日期)
假设输入数据结构:
- A列:项目名称
- B列:时段开始日期
- C列:时段结束日期
- D1:统计起始日期(
from) - E1:统计结束日期(
to)
步骤1:生成动态不重复项目列表
同场景1,使用=UNIQUE(FILTER(A:A, A:A <> ""))生成项目列表。
步骤2:统计每个项目的有效天数总和
在H2单元格输入公式:
=BYROW(G2#, LAMBDA(project, SUMPRODUCT( (A:A=project)* (MAX(B:B, $D$1) <= MIN(C:C, $E$1))* (MIN(C:C, $E$1) - MAX(B:B, $D$1) + 1) )))
MAX(B:B, $D$1)和MIN(C:C, $E$1)计算单个时段与统计窗口的交集区间- 仅当交集区间有效(开始≤结束)时,才计算天数(结束-开始+1)
SUMPRODUCT累加该项目所有有效时段的天数总和
旧版本Excel替代方案:
在H2输入公式=SUMPRODUCT((A:A=G2)*(MAX(B:B,$D$1)<=MIN(C:C,$E$1))*(MIN(C:C,$E$1)-MAX(B:B,$D$1)+1)),下拉填充所有项目行。
注意事项
- 确保
from(D1)和to(E1)单元格为日期格式,避免公式识别错误 - 动态数组公式仅支持Excel 365/2021及以上版本,旧版本需用高级筛选+下拉公式的方式
- 若数据量较大,建议限制公式的引用范围(比如
A2:A1000而非A:A),提升计算效率
内容的提问来源于stack exchange,提问作者zappee
相关产品推荐
相关产品推荐

