To mods: As the title has been changed from:
A little bit of programming I think?! 
to
Random automated number allocator
I assume it is not against rule 7 to answer.
Have a look on a skeleton of the main loop. of course you have to add a lot there to have a fully functional one, but as for the start - try this:
Sub allocate_trainers()
Dim CPsh As Worksheet, NAsh As Worksheet
Dim blocks() As Range, trainers, blockaddress
Dim i As Long, j As Long, to_allocate As Long, allocated As Long, counter As Long, where As Long
Randomize
Set CPsh = Sheets("Control Panel")
Set NAsh = Sheets("Number Allocation")
trainers = WorksheetFunction.Transpose(CPsh.Range("A4:A6").Value)
blockaddress = Split("G3:G21,G24:G47", ",")
For i = 1 To 2 'to number of blocks
ReDim Preserve blocks(1 To i)
Set blocks(i) = NAsh.Range(blockaddress(i - 1))
blocks(i).ClearContents
For j = 1 To 3 'all trainers
counter = 0
to_allocate = 3 'of course calculate based on data from CPsh and already assigned
allocated = 0
Do
where = 1 + Int(blocks(i).Rows.Count * Rnd)
If blocks(i).Cells(where) = "" Then
blocks(i).Cells(where) = trainers(j)
allocated = allocated + 1
End If
Loop Until allocated = to_allocate Or counter > 1000
If counter > 1000 Then
MsgBox "Do something here, not all allocated!"
End If
Next j
Next i
End Sub
Bookmarks