我对VBA(或编程)编程相当新,请原谅我,如果我的问题有点愚蠢。
我遇到了尝试创建可以自动填写工作时间表的代码的问题。该计划应该能够接收任意数量的员工,并根据一年中所有52周内的星期一至星期五的重复时间表分配他们的姓名(时间表不包括假期,雇主本身将必须填写商业关闭)。
我要做的是确保没有人连续两天安排,而且每个人都安排了大量相等的天数。我的解决方案是相应地改变名称:
12345,23451,34512,45123,51234。
对此:
我已经尝试了一段时间,但无法使其发挥作用。问题是我不知道如何使用x个名称制作这样的计划。如果数字是常数,那将很容易,但我需要根据x名称自动创建计划。
我有一个想法是创建某种循环,在整个计划中输入数据,首先输入名称x次(其中x =放入要安排的人员列表中的名称总数),然后跳过x + 1:每次都是名字。
有五个人看起来像这样(在()中跳过的数字): 12345(1)23451(2)34512(3)45123(4)51234(5)(重复全年已填写)。
我必须这样做的原因是因为我们的一些部门中有5人,我想确保他们没有安排在每周的同一天完成同样的任务。
如果有人对此问题有解决方案或一些有用的输入,我将非常感激。
干杯!
答案 0 :(得分:0)
这是一种能产生预期结果的算法:
Sub createDutyRoster(numOfEmployees As Integer, numOfWeeks As Integer)
Dim dutyRosterWS As Excel.Worksheet
Dim emplCount As Integer, i As Integer, n As Integer, tempEmplCount As Integer
Set dutyRosterWS = ThisWorkbook.Sheets("Duty Roster")
With dutyRosterWS
' insert headers
.Cells(1, 1) = "Week/day"
.Cells(1, 2) = "Monday"
.Cells(1, 3) = "Tuesday"
.Cells(1, 4) = "Wednesday"
.Cells(1, 5) = "Thursday"
.Cells(1, 6) = "Friday"
For i = 1 To numOfWeeks
' weeks
.Cells(i + 1, 1) = i
' employee count
If emplCount < numOfEmployees Then
emplCount = emplCount + 1
ElseIf emplCount = numOfEmployees Then
emplCount = 1
End If
tempEmplCount = emplCount
' insert for monday to friday
For n = 2 To 6
.Cells(i + 1, n) = tempEmplCount
If tempEmplCount < numOfEmployees Then
tempEmplCount = tempEmplCount + 1
ElseIf tempEmplCount = numOfEmployees Then
tempEmplCount = 1
End If
Next n
Next i
End With
End Sub
工作原理