发布日期:2026-10-12 浏览次数:3
排班这件事,最烦的不是排,是核对。
排完之后你要来回看:这个人在这一天是不是被排了两次?早班和晚班是不是撞了同一个人?谁这周一天都没排上?
如果靠眼睛一行行扫,那基本上会出错,而且很累。
所以大多数人会问:"有没有办法让它自动查出来?"
有。但在说办法之前,得先说一件更要紧的事——要不要"查",取决于你把表做成了什么形状。
排班表常见的形状有两种,而它们的性质完全不同。
第一种是"人名乘日期"的矩阵。
也就是说,纵着是人名,横着是日期。每一格填这个人这一天上什么班(或者填"休")。
用这种形状,"每人每天只排一次"这件事在结构上就不可能违反。
为什么?因为"这个人"和"这一天"交叉的地方只有一个格子。你想想:一个人的名字占一行,某一天占一列,它们的交点就一格——你要让他在同一天被排两次,都没地方填。
所以在这种形状下,你根本不需要一个检查公式。这个问题的答案,是被表格的形状直接保证的。
第二种是"日期乘班次"的形状。
这种也很常见:纵着是日期,横着是班次(早班、中班、晚班),每一格填一个人名。
它更直观地体现了"一天有几班、每班谁上"。
但这种形状下,重复就有可能了。
因为同一天占了多格:早班一格、晚班一格。你把张三填进早班,又填进晚班——这两格在表上是分开的,它们之间没有任何机制阻止你。
于是"每人每天只排一次"这件事,从"结构保证"变成了"需要检查"。
所以第一件事,是先看清自己的表是哪一种。
如果你现在正在手动核对这件事,说明你的表多半是第二种。而在动手加公式之前,值得先问一句:我能不能换成第一种?
当然,换成矩阵也有代价:它体现不出"三班倒"这种信息,或者要用别的标记来表示班次。所以这不总是可行的。
这里我说的是那个思路:能靠形状保证的,就别靠公式去查。 这也是我在别处反复提过的一句话——结构上的问题,用结构解决。
如果表必须是"日期乘班次"那种,那就得靠工具盯了。而这件事恰好是条件格式擅长的地方。
思路是这样的。
第一步,先找出"要用什么来判断"。
你要判断的是"某个人在某一天被排了几次"。而这句话里有两个条件:是这个人,以及是这一天。
第二步,用一个能数"同时满足多个条件的格子有几个"的函数。
这一类函数里常用的是带复数条件的计数函数(名字里带个复数的那个)。它做的事就是:我给你几个条件,你数一下符合条件的格子有几个。
比如你可以数:"名字这一片区域里,等于张三的、并且日期是本周一的格子,有几个。"
第三步,把"大于一"这个条件接到条件格式上。
条件格式可以基于一个公式来判断。所以你的规则就是:如果这个计数大于一,就把格子标红。
标完之后,只要有人在同一天被排了两次,那两格就会变红。你不用再一行行看。
我必须说明一点:具体怎么引用区域、公式怎么写,得按你那张表的结构来定。
因为条件是"这一格对应谁、对应哪一天",而这两个信息在表里的位置每个人都不一样。所以我给不了你一个能直接复制粘贴的公式——那必然是错的。
但思路是确定的:把"两个条件"翻译成一个计数函数,再把"大于一"接给条件格式。 至于区域引用怎么搭,你按自己的表排一下就能通。
关于条件格式本身的用法(在哪儿设、怎么建一条规则),以及怎么用它标出重复值,我在讲查找重复项的那篇里写过,那篇是从"数据"的角度讲的,可以配合着看。
再说那个"怎么让休息日自动标色"。
这件事的核心是条件格式,而条件格式的核心是"一个能判断真假的式子"。
所以问题就变成了:你怎么判断一个格子是"休息"?
常见的判法有两种。
第一种,按"空白"来判断。
在很多排班表里,"没排班"就等于"休息"。那么你的规则就是:如果这个格子是空的,就给它上色。
这种判法最省事,因为不用额外填东西。但它的前提是你的表习惯用"空着"表示休息——如果你们习惯填一个"休"字,那就不适用了。
第二种,按"值"来判断。
也就是按格子里填的内容来判断。比如规则设成"如果这个格子的内容等于'休',就变灰"。
这种判法适合那种明确要写"休"的表。它的好处是"休息"这件事被明确写出来了,看的人不会有歧义。
还有一种值得提:按"星期"来标。
如果你的表是横着放日期的,那可以按那一天是星期几来给整列上色。判断星期几有现成的函数可用,把它接进条件格式的公式就行。
这种做法的好处是自动——你把日期改了,颜色跟着改,不用重新刷一遍。
至于你想用哪一种,取决于你的表里"休息"是怎么表达的。先把这个定下来,颜色自然就有依据了。
排班表最后多半是要打出来贴在墙上的。而这里有一个很多人会踩的坑。
先说那个坑:不要习惯性地"缩放到一页"。
因为缩放到一页的意思是把内容压小,好让它塞进一张纸里。而贴在墙上的东西是要给人从远处看的——字一小,就白贴了。
所以打印之前先想清楚一件事:这份表是贴在近处(比如办公桌旁,站着看)还是远处(比如走廊、车间门口)?
这是一个"观感优先还是省纸优先"的取舍,而贴墙这件事,通常该选观感。
除了这个,还有几个打印相关的设置值得顺手看一眼。
一个是纸张方向。 排班表通常是横向的(因为日期多),所以记得选横向。
一个是打印区域和表头重复。 如果这张表要打好几页,那就设一下"每页重复标题行",这样第二页上也有人名表头,不然看的人不知道哪一列是谁。这一点我在讲打印的那篇里写过,包括跨页时表头怎么固定。
一个是先看预览。 预览能看出有没有内容被裁掉、字够不够大。它是最后一道关,而且不要钱。
最后说说模板。而我不打算推荐什么现成的模板——因为你们单位的排班规则,别人的模板多半对不上。
但模板该包含哪几样东西,是可以说的。
一样是"人"这一维和"日期"这一维,缺一不可。 这两维决定了表的形状,也决定了前面说的那个"要不要检查"的问题。
一样是班次的定义。 早班从几点到几点、晚班从几点到几点。如果这个不写在表上,看的人还得另外去问。
一样是月份的边界要清楚。 一张表最好只管一个月,跨月的时候换一张。因为跨月之后,"这一周"和"这个月"的边界就乱了,标色和统计都容易出错。
还有一样容易被漏掉:谁负责对这张表做最终确认。 排班表最常见的纠纷不是"排错了",而是"改了没人知道"。所以在表上留一处"最后更新日期",或者干脆约定好改动要通知谁,比任何公式都管用。
这两个词经常混着用,但它们说的是不同的东西。
值班表回答的是"某天谁在"。 它是一张快照:这一天早班是谁、晚班是谁。
轮班表回答的是"按什么规律轮"。 它是一条规律:四天一循环、早中晚休、然后周而复始。
所以两者的重点不同。值班表重点在"填对每一天",而轮班表重点在"那个循环定得对不对"。
而轮班这件事,在表上其实是个周期问题。
比较稳的做法是:先把那个"循环单元"单独写出来。
比如你们是四天一循环,那就先把这四天的模式(早、中、晚、休)写在一小块地方,作为"母版"。然后往下就是把这个母版重复下去。
这样做的好处是:以后要调规律,你只改那个母版。 而不是去把整张表的每一格都改一遍。
这又是同一个思路——能靠结构保证的,就别靠逐格去改。
至于循环长度和人数是不是能整除、会不会有人总是固定落在某个班次上,这取决于你们具体的人数和班次组合,我这里不给一个通用解法。但有个自检的办法:把循环跑满两轮,然后看看有没有人的排法明显比别人的差。 有,就说明周期需要调。
第一个坑,是表做成"日期乘班次",然后手动核对有没有人一天被排两次。其实可以换成"人名乘日期"的矩阵,让重复在结构上不可能。
第二个坑,是以为条件格式是个"美化"功能。它本质是"按规则自动判断",标色只是它的表现形式。
第三个坑,是想找一个能直接复制的公式。区域引用必须按你那张表的结构来搭,照抄别人的必然不对。
第四个坑,是打印时习惯性缩到一页。贴墙上的表,字大比省纸重要。
第五个坑,是表上不写"班次时间"和"最后更新日期"。这两样省掉了,后面要用的人还得来问你。
如果只用三句话记住这篇,我希望是这三句。
"每人每天只排一次"这件事,先取决于表的形状:做成"人名乘日期"的矩阵,重复在结构上就不可能,你压根不需要检查;做成"日期乘班次",重复才有可能,这时候才需要条件格式来盯。所以第一步是看清自己的表是哪一种。
如果要盯,思路是确定的:用一个能数"同时满足多个条件"的计数函数,把"某人在某天出现了几次"算出来,再把"大于一"接给条件格式。而具体公式得按你自己那张表的区域来搭,抄别人的不行。
最后两件事:休息日自动标色,靠的还是条件格式,关键是先定"你怎么判断一个格子是休息";而打印出来贴墙上的时候,别习惯性缩到一页——字大比省纸重要。
没有相关标签