Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: cunfu2010

[已解决]制作排班表

[复制链接]
 楼主| 发表于 2016-4-13 21:27 | 显示全部楼层
wanao2008 发表于 2016-4-13 19:13
有几个问题:
1、D2已被“白班”占住,应该不能再输入其它内容吧?我看放置在A3单元格比较好;
2、如果 ...

谢谢,从要排的月开始。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2016-4-14 20:14 | 显示全部楼层
cunfu2010 发表于 2016-4-13 21:27
谢谢,从要排的月开始。

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
    '对A3单元进行判断,如果有数字且在1-12之间,就做单月排班,否则就做全年排班。
    If Sheet1.[a3] >= 1 And Sheet1.[a3] <= 12 Then
        Set mywb = Worksheets(WorksheetFunction.Text(VBA.DateSerial(Nian, Sheet1.[a3], 1), "[DBNum1]m月份"))
        maxday = VBA.Day(VBA.DateSerial(Nian, Sheet1.[a3] + 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
    Else
        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 If
End Sub

回复

使用道具 举报

 楼主| 发表于 2016-4-15 08:51 | 显示全部楼层
wanao2008 发表于 2016-4-14 20:14
Sub wanao()
    Dim Bai, Ye, Dai, Xq As Integer
    Dim Ban, Nian, jShu As Integer, rShu As Inte ...

谢谢!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 18:41 , Processed in 0.251595 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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