Excel中使用VBA自动生成排班表

1. 背景

在我们排班过程中,会有很多的问题,比如我们的有多少个人,从什么时候开始排班,节假日是否要进行排班等等一系列问题,手动排班的话会有很多的这样那样的问题,那我们为什么不能直接使用VBA代码进行排班呢,所以我们本篇文章就是基于这样的目的来展开的。

2. 代码

以下就是我们的自动排班的代码了,让我们来使用一下吧

Sub GenerateSchedule()
    Dim startDate As Date
    Dim numPeople As Integer
    Dim peopleNames() As String
    Dim includeHolidays As Boolean
    Dim includeWeekends As Boolean
    
    ' 1. 自定义起始排班日期
    startDate = InputBox("请输入起始排班日期(格式:yyyy-mm-dd):")
    
    ' 2. 自定义排班人员数量和姓名
    numPeople = InputBox("请输入排班人员数量:")
    ReDim peopleNames(1 To numPeople)
    
    For i = 1 To numPeople
        peopleNames(i) = InputBox("请输入第 " & i & " 个人员的姓名:")
    Next i
    
    ' 3. 自定义选择是否要在节假日排班
    includeHolidays = MsgBox("是否包括节假日在内?选择是(是)或否(否)。", vbYesNo) = vbYes
    
    ' 4. 自定义选择是否要在周六周日排班
    includeWeekends = MsgBox("是否包括周末在内?选择是(是)或否(否)。", vbYesNo) = vbYes
    
    ' 输出结果到工作表
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add
    
    Dim currentDate As Date
    currentDate = startDate
    
    Dim rowCounter As Integer
    rowCounter = 1
    
    Do While Month(currentDate) = Month(startDate)
        If (includeWeekends Or (Weekday(currentDate) <> 1 And Weekday(currentDate) <> 7)) And (includeHolidays Or Not (IsHoliday(currentDate))) Then
            ws.Cells(rowCounter, 1).Value = currentDate
            ws.Cells(rowCounter, 2).Value = peopleNames((rowCounter - 1) Mod numPeople + 1)
            rowCounter = rowCounter + 1
        End If
        currentDate = currentDate + 1
    Loop
    
    MsgBox "排班表生成完成!"
End Sub

Function IsHoliday(dt As Date) As Boolean
    ' 在这里可以添加节假日判断的逻辑,例如国家法定节假日等
    ' 这里简化为没有节假日的情况
    IsHoliday = False
End Function

2. 代码使用

点击开发工具,点击我们的VBA在这里插入图片描述
找到对应的位置,粘贴代码
在这里插入图片描述
关闭之后,点击宏
在这里插入图片描述
开始执行
在这里插入图片描述

输入起始排班日期
在这里插入图片描述
输入排班人员数量
在这里插入图片描述
输入排班人员的姓名
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
选择是否包括节假日
在这里插入图片描述
选择是否包括周末
在这里插入图片描述

完成

在这里插入图片描述
我们进行简单的美化
在这里插入图片描述

4. 其他文章

5. 更多素材

全部Excel练习素材 👈点击即可进行查看

如果对您有帮助,请您点赞、收藏、关注、转发,让更多的人看到。

快来试试吧🥰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@cheese

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值