用excel做循环排班,靠mod函数就能把日期序号转成0、1、2、3……这样的循环余数,再搭配index函数直接返回早、中、晚、休这类班次。核心公式是 `=index($h$2:$h$5,mod(row(a1)-1,4)+1)`,往下一拉填充,4个班次就会自动反复轮转。

这个方法专门适配固定周期的排班场景,比如早中晚休4天一轮、白夜休3天一轮,或是多人错位轮班的需求。只要轮班规则是按固定顺序重复,用MOD就能代替人工挨个复制班次,全靠公式自动生成。
第一步:先把循环班次单独列出来
先在表格旁边单独列好所有班次,比如H2:H5单元格依次输入“早、中、晚、休”,后面公式返回的结果就从这个列表里取。别把班次直接写死在很长的IF嵌套公式里,不然之后要调整班次顺序的时候会特别麻烦。
只排一个人的话,列表按实际轮换顺序写就行;要是需要给多个人错位排班,先定好第一个人的轮班顺序,再用公式偏移,后面第二、第三个人就能从不同的班次开始轮。

第二步:用 MOD 生成循环编号
MOD函数的功能是取余数。比如 `MOD(ROW(A1)-1,4)` 算出来的结果是0,往下填充到下一行,ROW(A2)-1变成1,结果就等于1,继续往下拖结果会依次得到2、3,到第5行又跳回0,刚好形成0、1、2、3、0、1、2、3的循环。
为什么公式里要减1?因为INDEX函数的位置参数是从1开始计数的,MOD生成的余数刚好可以从0起步,后面给最终结果再加1,就能把0、1、2、3转成1、2、3、4,刚好对应班次列表里第1到第4个项目的位置。

第三步:用 INDEX 把编号转换成班次
在第一个要填班次的单元格里输入公式:`=INDEX($H$2:$H$5,MOD(ROW(A1)-1,4)+1)`。其中 `$H$2:$H$5` 就是你提前列好的班次列表,`MOD(ROW(A1)-1,4)+1` 是用来指定取列表里第几个班次。
公式输完直接向下拖动填充,结果就会自动按“早、中、晚、休”循环。如果你的排班周期是3天,就把班次列表改成3个项目,同时把公式里的数字4改成3;周期是5天就改成5就行。

第四步:先生成日期,再让班次跟着日期走
排班表一般要先把日期列做出来,可以用 `DATE(年,月,1)` 生成当月第一天,下一行直接用上一行的日期加1,一直拖到当月最后一天。之后切换年月的时候,日期列会自动更新,班次公式也能跟着正常计算。
如果直接靠行号循环,中途插入空行很容易打乱结果。更稳妥的做法是用当前日期和排班起始日期的天数差来算班次,比如写 `MOD(A10-$A$10,4)`。A10是当前行的日期,$A$10是排班的起始日期,就算之后表格整体移动位置,循环逻辑还是按日期差计算,不会出错。

第五步:多人排班时给每个人增加偏移量
多人排班不能所有人都从同一个班次开始,不然所有人每天的班都一模一样。可以给不同的人加不同的偏移量,比如第一个人偏移0,第二个人偏移1,第三个人偏移2。公式可以写成:`=INDEX($H$2:$H$5,MOD($A10-$A$10+COLUMN(A1)-1,4)+1)`。
这个公式里,`COLUMN(A1)-1` 随着你向右填充,会自动变成0、1、2、3,刚好用来给不同的人错开班次。向右拖填充完所有人员列,再向下拖覆盖整个排班周期,一张基础的循环排班表就出来了。

第六步:用 COUNTIF 检查各班次数量
排班做完最好用COUNTIF核对一遍,比如统计某个人当月早班有几次、中班几次、晚班几次、休息几天。公式可以写成 `=COUNTIF(D10:D40,"早")`,再把条件换成其他班次逐一统计就行。
要是发现某个人的休息天数明显不对,先检查公式里的循环周期数有没有写错,再核对起始日期和偏移量的数值对不对。MOD排班最大的好处就是逻辑清晰:排班周期是几,余数就除以几;想要谁错开班次,就给谁的参数里加对应偏移量。
把这个逻辑摸透,固定周期的排班根本不用一格一格手填。先列好所有班次,用MOD取余生成循环位置,再用INDEX返回对应的班次名称,几秒钟就能自动展开一整个周期的排班表。











