基于参训人员可用日期的Excel培训排班方案咨询(含优先级规则)
解决方案:Excel 内部培训排班实现
一、优先处理仅选择单个日期的参训人员
这部分是核心优先级,必须先完成:
- 计算每人可选日期数量:在空白列(比如F列)的F2单元格输入公式,下拉填充至所有行:
=COUNTIF(B2:E2,"是") // 若可用状态用1/0表示,替换为=SUM(B2:E2) - 标记单日期人员的目标日期:在G列G2单元格输入公式,下拉填充:
=IF(F2=1,INDEX($B$1:$E$1,MATCH("是",B2:E2,0)),"") // 数字状态替换为MATCH(1,B2:E2,0) - 按日期分配名额:
- 按G列筛选出每个日期的人员,比如筛选“第1天”,取前10人标记为已安排(可在H列设“已安排”标识)
- 若某日期单报名人数超过10,超出人员需纳入后续多日期人员池重新分配(若需求要求必须安排单日期人员,可考虑调整每日上限,否则按此处理)
二、分配多日期可选的剩余人员
使用Excel的规划求解工具解决约束分配问题:
- 启用规划求解:
打开「文件」>「选项」>「加载项」>「转到」,勾选「规划求解加载项」后确定。 - 设置变量区域:
在空白区域(比如H2:K[最后一行]),每个单元格代表对应人员是否被安排到该日期(1=安排,0=不安排)。 - 配置约束条件:
打开「数据」选项卡的「规划求解」,添加以下约束:- 每个人员的H-K列之和 = 1(每人仅参训1次)
- 每个日期的列总和 ≤ 10(每日参训上限)
- 若某人员对应日期不可用(如B2为“否”),则H2 = 0(以此类推所有日期的可用约束)
- 运行求解:
目标可设为「最大化」任意一个日期的列总和(或直接设为无目标,仅满足约束),点击「求解」即可得到分配结果。
三、后续验证
完成分配后,可通过以下公式验证:
- 验证每日人数:
=SUM(H:H)(对应第1天),确保≤10 - 验证每人仅安排1次:
=SUM(H2:K2),确保所有行结果为1或0(0代表未安排,若需全员安排需调整约束或上限)
内容的提问来源于stack exchange,提问作者Dimitri
相关产品推荐
相关产品推荐

