Я хотел бы помочь с циклом (ами), чтобы поместить каждого пользователя в рабочий лист с именем roster в один из сеансов, перечисленных в рабочем листе с именем session.
Каждый сеанс может содержать 3 пользователя.
Ростер

Сессия

Код у меня такfar:
Sub ScheduleSession()
Dim Roster As Worksheet
Dim Sessions As Worksheet
Dim LastRow As Long
Dim x As Long
Dim row As Range
Dim Session As Range
With ActiveWorkbook.Worksheets("Roster")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).row
For x = LastRow To 8 Step -1
If IsEmpty((.Range("B" & x))) Then
' Look for a session
Debug.Print ("Looking For a Session for " & (.Range("A" & x)))
For Each Session In ActiveWorkbook.Worksheets("Sessions").Range("A1:E1").Cells
Debug.Print (Session)
' Check session is not full (3 per session) else next session
SessionCount = Cells(Rows.Count, Session.Column).End(xlUp).row
If (SessionCount > 4) Then
Exit For
Else
' Loop over cells in employee roster to see if they are working on given day and time.
' If so roster them by recording session against employee (on ROSTER col B) and employee against session in appropriate col on SESSIONS
End If
Next
Else
' Employee already scheduled
Debug.Print ("This employee " & (.Range("A" & x)) & " already has a session")
End If
Next x
End With
Результат может выглядеть следующим образом: он записал дату / время сеанса в столбце для этого пользователя.

Соответственно, на листе сеанса теперь пользователь указан в столбце под сеансом:
