Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8701|回复: 32

[已解决]制作排班表

[复制链接]
发表于 2016-4-10 19:16 | 显示全部楼层 |阅读模式
本帖最后由 cunfu2010 于 2016-4-12 08:54 编辑

工作上排班,创建日期工作表已经实现,现在想把人员排进去:
1、夜班和带班始终轮转,不分双休日和节假日;
2、白班周一到周五轮转,周六周日单独轮转:即这周是第一值周六、第二值周日,到下周第三值周六、第四值周日,依次类推,最后一人值完第一人接着
条件有些复杂,求帮忙
最佳答案
2016-4-12 21:22
Sub wanao()
    Dim Bai, Ye, Dai, Xq As Integer
    Dim Ban, Nian, jShu As Integer, rShu As Integer
    Dim BB(1 To 3, 1 To 366), jS1 As Integer, jS2 As Integer
    With Sheet1
        Ban = .Range("D1:F1")
        Bai = .Range("D2:D" & .Range("D100").End(xlUp).Row)
        Ye = .Range("E2:E" & .Range("E100").End(xlUp).Row)
        Dai = .Range("F2:F" & .Range("F100").End(xlUp).Row)
        Nian = .[a2]
    End With
    jS1 = 0
    jS2 = 0
    rShu = 0
    '白班 + 带班
    For x = 1 To 366
        jS1 = jS1 + 1
        BB(1, x) = Bai(jS1, 1)
        If jS1 = UBound(Bai, 1) Then jS1 = 0
        jS2 = jS2 + 1
        BB(3, x) = Dai(jS2, 1)
        If jS2 = UBound(Dai, 1) Then jS2 = 0
    Next
    Xq = Weekday(VBA.DateSerial(Nian, 1, 1), vbMonday)
    jS1 = 0
    jS2 = 0
    '夜班
    For x = 1 To 366
        If Xq <= 5 Then
            jS1 = jS1 + 1
            BB(2, x) = Ye(jS1, 1)
            If jS1 = UBound(Ye, 1) Then jS1 = 0
            Xq = Xq + 1
        Else
            jS2 = jS2 + 1
            BB(2, x) = Ye(jS2, 1)
            If jS2 = UBound(Ye, 1) Then jS2 = 0
            Xq = Xq + 1
            If Xq > 7 Then Xq = 1
        End If
    Next
    '将数据放入12个月里
    For m = 1 To 12
        Set mywb = Worksheets(WorksheetFunction.Text(VBA.DateSerial(Nian, m, 1), "[DBNum1]m月份"))
        maxday = VBA.Day(VBA.DateSerial(Nian, m + 1, 0))
        With mywb
            .Range("D1:F1") = Ban

            For x = 1 To maxday
                zday = zday + 1
                .Cells(x + 1, 4) = BB(1, zday)
                .Cells(x + 1, 5) = BB(2, zday)
                .Cells(x + 1, 6) = BB(3, zday)
            Next
        End With
   Next
End Sub
发表于 2016-4-10 20:36 | 显示全部楼层
本帖最后由 dsmch 于 2016-4-11 16:53 编辑
  1. 理解错误,删帖
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-4-10 20:55 | 显示全部楼层
dsmch 发表于 2016-4-10 20:36

感谢,能否给个注释,有些地方不太明白
回复

使用道具 举报

 楼主| 发表于 2016-4-10 21:57 | 显示全部楼层
dsmch 发表于 2016-4-10 20:36

能给个注释吗?
回复

使用道具 举报

 楼主| 发表于 2016-4-10 22:15 | 显示全部楼层
本帖最后由 cunfu2010 于 2016-4-11 11:48 编辑
dsmch 发表于 2016-4-10 20:36

    谢谢
回复

使用道具 举报

 楼主| 发表于 2016-4-10 23:49 | 显示全部楼层
dsmch 发表于 2016-4-10 20:36

夜班和带班混了

点评

减少源数据,测试一下结果  发表于 2016-4-11 09:34
回复

使用道具 举报

 楼主| 发表于 2016-4-11 09:52 | 显示全部楼层
dsmch 发表于 2016-4-10 20:36

我试了,减少源数据也试了,好像就是位置换了,而是在生成的排班表中,按现在的排班,还有一个人连值两天的情况,麻烦你再看看
回复

使用道具 举报

发表于 2016-4-11 10:26 | 显示全部楼层
夜班周一到周五轮转,周六周日单独轮转
1-5值夜班,恰逢6-7夜班轮值,所以连值两天
如果觉得结果有误,最好上传附件模拟一下结果
回复

使用道具 举报

 楼主| 发表于 2016-4-11 11:12 | 显示全部楼层
本帖最后由 cunfu2010 于 2016-4-14 08:40 编辑
dsmch 发表于 2016-4-11 10:26
夜班周一到周五轮转,周六周日单独轮转
1-5值夜班,恰逢6-7夜班轮值,所以连值两天
如果觉得结果有误,最 ...

谢谢,不好意思,我再看看,有问题再向你请教。
回复

使用道具 举报

 楼主| 发表于 2016-4-11 11:59 | 显示全部楼层
本帖最后由 cunfu2010 于 2016-4-12 08:55 编辑
dsmch 发表于 2016-4-11 10:26
夜班周一到周五轮转,周六周日单独轮转
1-5值夜班,恰逢6-7夜班轮值,所以连值两天
如果觉得结果有误,最 ...

你好,我试了,在月份工作表里,带班排到夜班前面去了,如何修改?带班要放到夜班后面。谢谢

点评

测试结果正确后再解释代码,否则没任何意义。夜班有带班人员吗  发表于 2016-4-11 12:53
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 15:55 , Processed in 0.480576 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表