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

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

  • [1. 背景](#1. 背景)
  • [2. 代码](#2. 代码)
  • [2. 代码使用](#2. 代码使用)
  • [4. 其他文章](#4. 其他文章)
  • [5. 更多素材](#5. 更多素材)
  • 快来试试吧🥰

1. 背景

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

2. 代码

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

js 复制代码
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练习素材 👈点击即可进行查看

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

快来试试吧🥰

相关推荐
张风捷特烈1 小时前
每日一题 Flutter#1 | 说说你对声明式 UI 的理解
android·flutter
移动开发者1号1 小时前
Android ContentProvider多表关联查询
android·kotlin
移动开发者1号1 小时前
显式与隐式Intent调用对比
android·kotlin
移动开发者1号2 小时前
Android后台服务保活简介
android·kotlin
移动开发者1号2 小时前
Android后台任务管理利器
android·kotlin
恋猫de小郭2 小时前
Flutter 官方多窗口体验 ,为什么 Flutter 推进那么慢,而 CMP 却支持那么快
android·前端·flutter
wb1892 小时前
shell脚本的条件测试
开发语言·python·excel
yan123688 小时前
Linux 驱动之设备树
android·linux·驱动开发·linux驱动
aningxiaoxixi10 小时前
android stdio 的布局属性
android
CYRUS STUDIO11 小时前
FART 自动化脱壳框架一些 bug 修复记录
android·bug·逆向·fart·脱壳