You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets统计连续排班次数:25人年度夜班连续值分档统计

解决Google Sheets中连续夜班频次统计问题

核心思路

通过转长格式数据 + 标记连续组 + 分组统计长度 + 区间汇总的步骤,精准统计每位员工“Back Up IV Call”的连续频次及区间分布。以下是针对你的排班表(假设A列是员工姓名,B-H列是一周日期,B2:H26是每日排班)的具体操作:


步骤1:将宽格式排班表转成便于处理的长格式

在空白列(比如J列)输入数组公式,把每行员工的多列排班数据转成“姓名-日期-排班类型”的单行结构:

=ARRAYFORMULA(SPLIT(FLATTEN(A2:A26&"|"&B1:H1&"|"&B2:H26), "|"))

执行后会得到三列:

  • J列:员工姓名
  • K列:日期
  • L列:当日排班类型

步骤2:标记连续的“Back Up IV Call”组

在M列用SCAN函数生成连续组ID,同一员工的连续目标班次会被标记为同一个ID:

=LET(
  目标数据, FILTER(J:L, L:L="Back Up IV Call"),
  员工列, INDEX(目标数据,,1),
  日期列, INDEX(目标数据,,2),
  -- 按日期顺序判断是否连续(若日期是文本如“周一”,替换成MATCH({"周一","周二"...},日期列,0))
  日期序号, ARRAYFORMULA(DATEVALUE(日期列)),
  连续判断, ARRAYFORMULA(员工列=OFFSET(员工列,1,0) AND (日期序号+1=OFFSET(日期序号,1,0))),
  SCAN(1, 连续判断, LAMBDA(acc, curr, IF(curr, acc, acc+1)))
)

执行后M列会为每一段连续的目标班次分配唯一ID。


步骤3:统计每段连续班次的长度

用GROUPBY函数按“员工+组ID”分组,统计每组的连续天数:

=LET(
  目标数据, FILTER(J:L, L:L="Back Up IV Call"),
  员工列, INDEX(目标数据,,1),
  组ID列, M:M,
  拆分结果, ARRAYFORMULA(SPLIT(GROUPBY(员工列&"|"&组ID列, 员工列, COUNTA, FALSE, FALSE), "|")),
  HSTACK(INDEX(拆分结果,,1), INDEX(拆分结果,,2))
)

执行后得到两列:员工姓名、连续夜班天数。


步骤4:按区间汇总频次

新建汇总表,A列填所有员工姓名,B-D列分别对应“连续2晚”“连续3晚”“连续4晚及以上”,在B2输入公式后下拉:

  • 连续2晚:
=COUNTIFS($P:$P, 2, $O:$O, A2)
  • 连续3晚:
=COUNTIFS($P:$P, 3, $O:$O, A2)
  • 连续4晚及以上:
=COUNTIFS($P:$P, ">3", $O:$O, A2)

(注:$O:$O和$P:$P替换为步骤3得到的员工列和连续天数列)


关键说明

  • 年度排班表只需扩展日期列范围即可,上述公式支持批量处理所有数据;
  • 若日期是文本格式(如“周一”),需将步骤2中的DATEVALUE(日期列)替换为MATCH(日期列, {"周一","周二","周三","周四","周五","周六","周日"}, 0)来判断连续性;
  • 之前用QUERY和VLOOKUP无法实现,是因为这两个函数擅长静态查找/聚合,而连续序列统计需要SCAN这类迭代标记或GROUPBY分组统计的函数支持。

内容的提问来源于stack exchange,提问作者JCO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:05:28