Sub test()
Dim a, b, i As Long, ttl As Long, n As Long, myWk As Long
Const maxJob As Long = 25
With Sheets("sheet1")
a = Sheets("sheet1").[a3].CurrentRegion.Value
ReDim b(1 To 10000, 1 To 4): myWk = 1: n = 1
b(1, 1) = "Week" & myWk: VSortM a, 1, UBound(a, 1), 2
For i = 1 To UBound(a, 1)
If a(i, 3) <> 0 Then
If ttl + a(i, 3) <= maxJob Then
n = n + 1
b(n, 2) = a(i, 1): b(n, 3) = a(i, 2): b(n, 4) = a(i, 3)
ttl = ttl + a(i, 3)
If ttl = maxJob Then
myWk = myWk + 1: n = n + 1
b(n, 1) = "Week" & myWk: ttl = 0
End If
Else
n = n + 1
b(n, 2) = a(i, 1): b(n, 3) = a(i, 2)
b(n, 4) = maxJob - ttl: ttl = b(n, 4)
myWk = myWk + 1: n = n + 1
b(n, 1) = "Week" & myWk
a(i, 3) = a(i, 3) - ttl: ttl = 0: i = i - 1
End If
End If
Next
.Columns("f:j").ClearContents
.[f2].Resize(n, 4) = b
End With
End Sub
Sub VSortM(ary, LB, UB, ref)
Dim i As Long, ii As Long, iii As Long, M, temp
i = UB: ii = LB
M = ary(Int((LB + UB) / 2), ref)
Do While ii <= i
Do While ary(ii, ref) < M: ii = ii + 1: Loop
Do While ary(i, ref) > M: i = i - 1: Loop
If ii <= i Then
For iii = LBound(ary, 2) To UBound(ary, 2)
temp = ary(ii, iii): ary(ii, iii) = ary(i, iii): ary(i, iii) = temp
Next
i = i - 1: ii = ii + 1
End If
Loop
If LB < i Then VSortM ary, LB, i, ref
If ii < UB Then VSortM ary, ii, UB, ref
End Sub
Bookmarks