如何用Excel(含Solver工具)寻找最优会议时间
如何用Excel(含Solver工具)寻找最优会议时间
刚好之前帮团队协调过类似的跨时区会议时间,用Excel加上Solver工具完全能搞定这个问题——本质上就是把「找最多人重叠的时间段」转换成一个优化求解任务。下面一步步给你拆解操作:
一、先把基础数据整理规范
这是最关键的第一步,数据乱了后面全白搭:
- 新建一个表格,列设置成:
姓名、日期、可用开始时间、可用结束时间、可用标记(用1表示该时间段可用,0表示不可用) - 把所有时间统一成同一时区(比如你说的ET),并且保持Excel的时间数值格式(比如9 AM是0.375,1 PM是0.5417),方便后续计算
- 如果某个人同一天有多个可用时间段,要拆成多行记录,比如张三周一9-10 AM和2-3 PM,就分成两行单独记录
二、先快速找初步重叠(不用Solver的方法)
如果只是想先看看大概的重叠情况,不用启动Solver,用公式就能搞定:
- 先在另一张表列出所有候选的会议时间段(比如按30分钟间隔生成从9 AM到5 PM的所有可能区间)
- 用
SUMPRODUCT公式统计每个候选时间段的可用人数:
这里=SUMPRODUCT((Sheet1!$C$2:$C$100<=A2)*(Sheet1!$D$2:$D$100>=B2)*(Sheet1!$E$2:$E$100=1))A2是候选会议的开始时间,B2是结束时间,Sheet1是你的基础数据表,这个公式会自动统计有多少人的可用时间段完全覆盖候选会议时间。 - 对结果排序,就能快速看到哪段时间可用人数最多。
三、用Solver工具做精准最优解优化
如果你的需求更复杂(比如要找最短的会议时间覆盖最多人,或者必须满足至少80%参会者的前提下找最早的时间),就需要用到Solver:
步骤1:启用Solver工具
默认Excel可能没启用,操作路径:
- 点击「文件」→「选项」→「加载项」→ 底部「管理」选「Excel加载项」→ 点击「转到」→ 勾选「规划求解加载项」→ 确定
步骤2:设置Solver参数
假设你已经有了计算可用人数的单元格(比如F2),和候选会议的开始时间(A2)、结束时间(B2):
- 设置目标单元格:选中
F2,选择「最大值」(如果要找最多人参加的时间段);如果是要找最短时长同时满足N人,就把目标设为B2-A2,选择「最小值」 - 设置可变单元格:选中
A2和B2(如果会议时长固定,比如1小时,就只选A2,B2设成=A2+1/24,不用作为可变单元格) - 添加约束条件:
- 基础约束:
A2 < B2(开始时间早于结束时间) - 时间范围约束:如果只考虑工作日9 AM到5 PM,就加
A2 >= 0.375、B2 <= 0.7083(对应9 AM和5 PM的数值) - 参会人数约束:如果要求至少X人参加,就加
F2 >= X - 可选:如果要确保每个人的可用时间段覆盖会议时间,可以对每个参会者添加约束(不过人数多的话建议用
SUMPRODUCT的统计结果来约束,更高效)
- 基础约束:
步骤3:运行Solver
点击「求解」,Solver会自动遍历所有可能的时间段,找到符合你目标的最优解。如果有多个最优解,它会返回第一个找到的结果。
四、一些踩坑后的实用技巧
- 如果参会人数多、可用时间段复杂,先把每个人的可用时间合并成不重叠的连续区间,比如张三周一有9-10和10-11 AM,合并成9-11 AM,这样能减少数据量,让Solver跑得更快
- 时区一定要统一!我之前吃过亏,有人填的是本地时间,结果计算出来的重叠完全不对
- 如果Solver找不到解,大概率是约束条件太严格(比如要求所有人都参加,但根本没有共同重叠时间),可以放宽约束(比如允许1-2人缺席)
备注:内容来源于stack exchange,提问作者Shadeslayer202




