如何在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
相关产品推荐
相关产品推荐

