一、 引言:排班难题,一键解决!文末有分享链接。
- 1.1 排班的烦恼还在为每月排班头疼?人员、时间、特殊要求… 🤯 每次排班都像一场“烧脑大战”!
- 1.2 DeepSeek来帮忙今天给大家介绍一个排班神器——DeepSeek助力EXCEL/WPS表格的VBA!它能帮你轻松搞定值班表,省时省力,告别烦恼!😊
二、 准备工作:明确需求,事半功倍!
- 2.1 打开DeepSeek首先,访问DeepSeek官网(https://chat.deepseek.com/),直接使用即可。用不了,请坛子里搜索下吧。或者换用其他AI!
- 2.2 梳理值班需求在开始排班前,我们需要清晰地了解值班需求,这包括:
- 值班周期: 例如,一周、一个月?
- 值班人员: 参与值班的所有人员名单。
- 班次类型: 例如,早班、晚班、夜班?
- 特殊日期: 例如,节假日、调休?
- 人员限制: 例如,某人不能上夜班,某两人不能同时值班?
我的实战案例:①值班表不区分工作日和休息日。②男的带班领导搭配女的值班人员,女的带班领导搭配男的值班人员。③每天要求1名带班领导和2名值班人员进行值班。
三、 步骤详解:手把手教你生成值班表! (实战)
- 3.1 输入指令:告诉DeepSeek你的需求登录DeepSeek后,找到对话框或类似输入指令的地方。当然了,为了一劳永逸,建议用excel,这样,以后每个月都非常简单啦。你可以这样告诉DeepSeek:
|
等了10分钟后,发现还没好,我查看了一下思考内容,我是男女值班人员混排的,这样VBA太过复杂了,deepseek思考了10分钟,还没想好。所以,优化了一下,重新让AI思考。主要是将值班人员的男女表格重新列明,减少VBA的工作难度。同时,先把数据给deepseek,再告诉他值班规则,能够有效减少他阅读值班规则时候的各种假设,做出来的值班表也更具针对性。
|
- 3.2 调整参数:
- 精细化你的排班DeepSeek会根据你的指令生成初步的排班表。如果对结果不满意,你可以通过调整参数进行优化。例如:
- 调整班次时长: 更改早班、晚班的具体时间。
- 指定班次: 明确要求某人在某天值某个班次。
你可以继续在对话框中输入新的指令,DeepSeek会根据你的反馈进行调整。
- 3.3 生成与优化:多次尝试,直到满意不断尝试不同的指令和参数组合,直到DeepSeek生成你满意的排班表。DeepSeek的强大之处在于,它能理解你的各种要求,并智能地进行调整,避免冲突,确保排班的公平性和合理性。好了,等待了若干个10分钟后,现在献上最终的代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
|
使用方法
按Alt+F11打开VBA编辑器插入新模块并粘贴代码按需修改日期范围(当前设置为生成当月排班)按F5运行宏为了方便使用,我们可以在宏窗口插入一个按钮,点击直接运行宏,这样更加方便。比如:点击“开发者”选项卡。在“控件”组中,点击“插入”按钮。在下拉菜单中选择“表单控件”(如果是旧版Excel,直接选择“按钮”)。在工作表上拖动鼠标绘制一个按钮。如果在绘制按钮后没有出现“分配宏”对话框,我们插入按钮后,进入设计模式,点击按钮修改名称,然后点击查看代码。修改该按钮的代码如下,即可实现点击运行啦
1
2
3
|
Private
Sub
CommandButton1_Click()
Call
GenerateDutySchedule
End
Sub
|
2025年2月24日更新完善一下,重新调整了代码
增加了一些细节调整:
1.调整运行按钮至SHEET2页面,因为上次值班的人员还是手动输入,防止出现错误不懂的人不会改。此外,由于VBA的名称变了,且从sheet2要调用sheet1的VBA代码,这个按钮的代码也小改了一下。
1 2 3 4 |
|
2.单列的表格不方便打印,新增sheet3,将值班表变为A4纸直接打印的多列横表。
设置好表格模版,然后,让sheet3自动填上月份,简单写一个小公式,直接获取sheet1值班的月份即可,比如在sheet3的A2处直接=TEXT(sheet1!A2,"m月")
再通过一个简单公式,先把日期都显示出来,比如A3=TEXT(sheet1!A2,"d日") ,是不是和月份显示有异曲同工之妙。哈哈
=TEXT(sheet1!A2,"d日")
然后,按照顺序填充,到A11=TEXT(sheet1!A12,"d日")。然后修改一下公式,E3=TEXT(sheet1!A13,"d日"),继续填充,以此类推,全部填充完成。
最后,让显示0日的这些不显示。这个操作比较复杂了,让我们问一问deepseek吧。简单的思考后,deepseek竟然给出了我两种方法。
于是,我们直接在I9,也就是这个月的29日这一表格输入公式=IF(sheet1!A30="","",TEXT(sheet1!A30,"d日"))然后依次填充至最下面一行。即I12=IF(sheet1!A33="","",TEXT(sheet1!A33,"d日"));I13=IF(sheet1!A34="","",TEXT(sheet1!A34,"d日"))
值班人员同理。以J9为例:=IF(sheet1!B30="","",sheet1!B30)。
最终实现的效果就是sheet2页输入值班人员信息和最后一次值班信息,然后就能在sheet3直接看到最终值班表了。最终成品还是放在原链接不变。
我用夸克网盘分享了「无需网络快速部署deepseek」
链接:https://pan.quark.cn/s/137e40c5d8fa