Google Sheets如何按月份分组统计工作天数与累计总工时
Google Sheets 工时按月统计实现方案
基础前提
原始数据列规则(第1行为表头,数据从第2行开始):
- A列:标准日期格式的考勤日期
- B列:上班开始时间
- C列:下班结束时间
- D列:单条记录对应的工作时长
输出列要求: - E列:年月标识,格式为
mm/yyyy(如06/2022) - F列:对应月份去重后的实际工作天数(同一日期多条记录仅计1天)
- G列:对应月份累计总工作时长(同一日期多条记录的工时全部累加)
各列公式(直接套用即可)
E列:自动生成不重复年月列表
选中E2单元格,输入以下公式,会自动溢出所有存在考勤记录的年月,无需手动下拉:
=UNIQUE(ARRAYFORMULA(TEXT(A2:A,"mm/yyyy")))
注意:如果公式报错,先选中A列,将单元格格式设置为「日期」,确保A列内容是可识别的日期值而非文本。
F列:按月统计去重工作天数
选中F2单元格,输入以下公式,下拉填充到E列年月值的最后一行即可:
=COUNTUNIQUEIFS(A:A,ARRAYFORMULA(TEXT(A:A,"mm/yyyy")),E2)
公式逻辑:先筛选出A列年月与当前行E列值匹配的所有记录,再对筛选结果内的日期做去重计数,自动跳过同一日期的重复工时记录。
G列:按月统计累计总工时
选中G2单元格,输入以下公式,下拉填充到E列年月值的最后一行即可:
=SUMIF(ARRAYFORMULA(TEXT(A:A,"mm/yyyy")),E2,D:D)
公式逻辑:匹配所有年月与当前行E列值一致的记录,对D列的工时值直接求和,同一天多条记录的工时会正常累加。如果D列是时间格式,求和后选中G列,将单元格格式设置为「时长」即可正常显示累计小时数。
常见踩坑说明
之前用ARRAYFORMULA、QUERY未得到正确结果,通常是三个原因:
- 未对A列日期做统一的年月格式转换,直接用月份值匹配时跨年数据会混淆(比如2022年6月和2023年6月被统计到一起)
- 统计工作天数时直接用
COUNT/COUNTA类函数,没有做日期去重,导致同一天多条记录被重复计数 - 用
QUERY做日期匹配时未按Google Sheets的日期序列化规则写筛选条件,匹配结果为空或不全。
如果数据量较大,建议把公式里的整列引用(如A:A、D:D)改成实际数据范围(比如数据到第1000行就写A2:A1000、D2:D1000),可以大幅提升表格计算速度。
内容的提问来源于stack exchange,提问作者ARNON
相关产品推荐
相关产品推荐

