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

如何在Google Sheets中从右往左计算连续出勤/缺勤次数?

Google Sheets 连续出勤/未出勤统计解决方案

1. 单行公式(自动识别最右侧活动列)

连续未参加次数(从右往左遇到“是”前的“否”数量)

在目标单元格(如Z1)输入:

=LEN(REGEXEXTRACT(JOIN("",SORT(TRANSPOSE(B1:INDEX(1:1,COUNTA(1:1))),1,FALSE)),"^否*"))

公式拆解:

  • INDEX(1:1,COUNTA(1:1)):自动定位当前行最右侧的非空活动列
  • TRANSPOSE(B1:...):将行内的活动列转成纵向数组
  • SORT(...,1,FALSE):把纵向数组倒序,模拟从右往左的遍历顺序
  • JOIN("",...):把倒序后的所有出勤状态拼成一个字符串
  • REGEXEXTRACT("^否*"):提取字符串开头连续的“否”
  • LEN():计算提取到的“否”的长度,即连续未参加次数

连续参加次数(从右往左遇到“否”前的“是”数量)

将上述公式中的"^否*"替换为"^是*"即可:

=LEN(REGEXEXTRACT(JOIN("",SORT(TRANSPOSE(B1:INDEX(1:1,COUNTA(1:1))),1,FALSE)),"^是*"))

2. 数组公式(批量处理所有行)

若要一次性为所有用户行计算,在统计列第一行(如Z1)输入以下数组公式:

批量统计连续未参加次数

=ARRAYFORMULA(IF(A:A="","",BYROW(B:INDEX(A:A,COUNTA(A:A)),LAMBDA(current_row,
  LEN(REGEXEXTRACT(JOIN("",SORT(FILTER(TRANSPOSE(current_row),TRANSPOSE(current_row)<>""),1,FALSE)),"^否*"))
))))

批量统计连续参加次数

=ARRAYFORMULA(IF(A:A="","",BYROW(B:INDEX(A:A,COUNTA(A:A)),LAMBDA(current_row,
  LEN(REGEXEXTRACT(JOIN("",SORT(FILTER(TRANSPOSE(current_row),TRANSPOSE(current_row)<>""),1,FALSE)),"^是*"))
))))

公式说明:

  • ARRAYFORMULA:实现批量计算
  • IF(A:A="","",...):跳过空用户行(假设A列为用户ID/姓名)
  • BYROW(...,LAMBDA(...)):遍历每一行数据
  • FILTER(...):过滤当前行的空单元格,避免空值干扰统计

3. 手动指定范围并忽略空单元格

若需手动固定活动列范围(如B1:X1),同时忽略空单元格,使用以下公式:

连续未参加次数

=LEN(REGEXEXTRACT(JOIN("",SORT(FILTER(TRANSPOSE(B1:X1),TRANSPOSE(B1:X1)<>""),1,FALSE)),"^否*"))

连续参加次数

=LEN(REGEXEXTRACT(JOIN("",SORT(FILTER(TRANSPOSE(B1:X1),TRANSPOSE(B1:X1)<>""),1,FALSE)),"^是*"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:02:50