Hi Som,
This works
Sub somX(): Dim r As Long, a As Long, c As Long, s As Long, Quota As Boolean
Dim w1 As Worksheet, w2 As Worksheet, t As Long, k As Long, N, Q
Set w1 = Sheets("Sheet1"): Set w2 = Sheets("Sheet2")
N = w2.UsedRange.Columns(1): w1.Cells(1, 3) = "Name"
Q = w1.UsedRange.Columns("A:D")
s = WorksheetFunction.Sum(w1.Range("B2:B" & UBound(Q)))
k = 1 + s / (UBound(N) - 1)
GetQuota:
For r = 2 To UBound(Q)
If Q(r, 2) > k And Q(r, 3) = "" Then Q(r, 3) = "Unassignable": s = s - Q(r, 2)
Next r
t = 1 + s / (UBound(N) - 1): Quota = IIf(t = k, True, False): k = t
If Quota = False Then GoTo GetQuota
k = 0: t = t+1: r = 2: For a = 2 To UBound(N)
MakeAssignment: 'w1.UsedRange.Columns("A:D") = Q
Do: If r > UBound(Q) Then r = 2
If Q(r, 3) <> "" Then r = r + 1: GoTo MakeAssignment
If c + Q(r, 2) < t + 80 Then
Q(r, 3) = N(a, 1): c = c + Q(r, 2): r = r + 1
Else: r = r + 1: GoTo MakeAssignment
End If
Loop Until c >= t - 5 Or k + c >= s
w2.Cells(a, 4) = c: Q(r - 1, 4) = c: k = k + c: c = 0
GetNext: If r > UBound(Q) Then r = 2
Next a
w1.UsedRange.Columns("A:D") = Q: w1.Columns.AutoFit
End Sub
Bookmarks