Excel精英培训网

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

[已解决]表格如何按照人员每天自动排班,过滤日期呢,和双休日单人双人设置attach_img

[复制链接]
发表于 2021-12-27 13:53 | 显示全部楼层 |阅读模式
本帖最后由 lj3543711 于 2021-12-27 14:45 编辑

表格如何按照人员每天自动排班,过滤日期呢,和双休日单人双人设置

设置双休双人和过滤日期.png
路过的大佬麻烦给小的看下

不知如何设置 过滤日期 和双休日单人和双人设置

在线的大佬麻烦您 看看


公司人员排班表.zip (13.27 KB, 下载次数: 10)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-27 14:34 | 显示全部楼层
没看明白你的需求最终的效果是怎么样?
回复

使用道具 举报

 楼主| 发表于 2021-12-27 14:42 | 显示全部楼层
林木水 发表于 2021-12-27 14:34
没看明白你的需求最终的效果是怎么样?

排班实际效果图.png
人员按照顺序推进
回复

使用道具 举报

发表于 2021-12-27 15:17 | 显示全部楼层
lj3543711 发表于 2021-12-27 14:42
人员按照顺序推进

这样就比较清楚了,稍等
回复

使用道具 举报

 楼主| 发表于 2021-12-27 15:23 | 显示全部楼层
林木水 发表于 2021-12-27 15:17
这样就比较清楚了,稍等

感谢您,非常感谢
回复

使用道具 举报

发表于 2021-12-27 15:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sam-wang 于 2021-12-27 15:55 编辑

Sub test()
Dim Arr, Brr, xD, StD As Date, T, i&, n%
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range("a1:h" & Cells(Rows.Count, 1).End(3).Row)
Brr = Range("n3:n" & Cells(Rows.Count, 14).End(3).Row)
For i = 1 To UBound(Brr): xD(Brr(i, 1)) = "": Next
Brr = Range("k2:k" & Cells(Rows.Count, 11).End(3).Row)
StD = Range("L3"): n = 1
For i = 3 To UBound(Arr) Step 2
    For j = 2 To 8
        If xD.Exists(StD) Then Cells(i - 1, j) = StD: StD = StD + 1: GoTo 99
         Cells(i - 1, j) = StD
         If j < 7 Then
            Cells(i, j) = Brr(n, 1)
         Else
            T = Brr(n, 1): n = n + 1: n = (n - 1) Mod UBound(Brr) + 1
            Cells(i, j) = T & "," & Brr(n, 1)
         End If
         StD = StD + 1: n = n + 1: n = (n - 1) Mod UBound(Brr) + 1
99: Next
Next
End Sub

回复

使用道具 举报

发表于 2021-12-27 15:50 | 显示全部楼层

請測試看看,謝謝
1.JPG
回复

使用道具 举报

 楼主| 发表于 2021-12-27 16:06 | 显示全部楼层
sam-wang 发表于 2021-12-27 15:50
請測試看看,謝謝

测试啦,双休日设置- 双人没有问题, 单人不行
回复

使用道具 举报

发表于 2021-12-27 16:12 | 显示全部楼层
本帖最后由 excel用户1116 于 2021-12-27 16:21 编辑

公司人员排班表.zip (15.18 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2021-12-27 16:42 | 显示全部楼层
  1. Sub 排班()
  2.     '日期
  3. Dim i As Integer, j As Integer, k As Integer, Arr, k1 As Integer
  4. Arr = Range("k2:k" & Cells(65536, "k").End(xlUp).Row)
  5. If Cells(65536, "k").End(xlUp).Row = 1 Then MsgBox "无值班人员"
  6. For i = 2 To 18 Step 2
  7.     For j = 2 To 8
  8.         Cells(i, j) = Format(Cells(3, "l").Value + k, "yyyy-m-d")
  9.         If Range("n:n").Find(Cells(i, j).Value, lookat:=xlWhole) Is Nothing Then
  10.             If Cells(3, "m").Value = "单人" Then
  11.                 k1 = k1 + 1
  12.                 If k1 = UBound(Arr, 1) Then
  13.                     Cells(i, j).Offset(1, 0) = Arr(UBound(Arr, 1), 1)
  14.                     k1 = 0
  15.                 Else
  16.                     Cells(i, j).Offset(1, 0) = Arr(k1, 1)
  17.                 End If
  18.             Else
  19.                 '双人
  20.                     If j <= 6 Then
  21.                         k1 = k1 + 1
  22.                         If k1 = UBound(Arr, 1) Then
  23.                             Cells(i, j).Offset(1, 0) = Arr(UBound(Arr, 1), 1)
  24.                             k1 = 0
  25.                         Else
  26.                             Cells(i, j).Offset(1, 0) = Arr(k1, 1)
  27.                         End If
  28.                     Else
  29.                        k1 = k1 + 1
  30.                             If k1 = UBound(Arr, 1) Then
  31.                                 Cells(i, j).Offset(1, 0) = Arr(UBound(Arr, 1), 1) & "," & Arr(1, 1)
  32.                                 k1 = 1
  33.                             Else
  34.                                 If k1 + 1 = UBound(Arr, 1) Then
  35.                                     Cells(i, j).Offset(1, 0) = Arr(k1, 1) & "," & Arr(k1 + 1, 1)
  36.                                     k1 = 0
  37.                                 Else
  38.                                     Cells(i, j).Offset(1, 0) = Arr(k1, 1) & "," & Arr(k1 + 1, 1)
  39.                                     k1 = k1 + 1
  40.                                 End If
  41.                             End If
  42.                     End If
  43.             End If
  44.         Else
  45.             Cells(i, j).Offset(1, 0) = ""
  46.         End If
  47.         k = k + 1
  48.     Next j
  49. Next i
  50. End Sub
复制代码
以上,见附件

公司人员排班表.rar

14.41 KB, 下载次数: 10

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 09:55 , Processed in 0.386091 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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