考勤追踪:连续5天P/S计数需求,求数组公式或VBA解决方案
Excel考勤连续事假/病假计数方案(无需VBA)
不需要调整现有表格结构,直接用数组公式就能实现基于P(事假)/S(病假)字符的连续天数计数及Occurrence统计,以下分版本给出实现方式:
Excel 365/2021 动态数组方案
假设考勤状态数据在B2:B100(B列从第2行开始记录每日状态),在C2单元格输入以下动态数组公式,公式会自动向下填充:
=LET( status_range, B2:B100, valid_flag, (status_range="P")+(status_range="S"), consecutive_days, SCAN(0, valid_flag, LAMBDA(acc, curr, IF(curr=0, 0, acc+curr))), occurrence_count, FLOOR.MATH(consecutive_days/5, 1), IF(consecutive_days=0, "", occurrence_count) )
公式说明:
valid_flag:将P/S转换为1,其他状态转换为0,标记有效考勤状态consecutive_days:用SCAN函数累加有效状态,遇到非P/S时重置计数,得到连续有效天数occurrence_count:用FLOOR.MATH对连续天数取整,每5天计为1次Occurrence- 最后一行判断:若连续天数为0(当前状态非
P/S),则显示空值,否则显示Occurrence次数
旧版Excel(非365)数组方案
如果使用不支持动态数组的旧版Excel,需要分两步实现:
- 计算连续有效天数:在C2单元格输入以下数组公式,按
Ctrl+Shift+Enter确认,然后下拉填充:
=IF(OR(B2="P",B2="S"),COUNT(INDIRECT("B"&MAX(IF(NOT(OR(B$1:B1="P",B$1:B1="S")),ROW(B$1:B1),0))+1&":B"&ROW())),0)
- 统计Occurrence次数:在D2单元格输入公式,下拉填充:
=IF(C2=0,"",FLOOR.MATH(C2/5,1))
方案优势
无需启用VBA宏,直接通过公式实现需求,表格结构无需调整,仅需保证状态列使用P/S标记即可。
内容的提问来源于stack exchange,提问作者John Hopper
相关产品推荐
相关产品推荐

