Я адаптировал ваш код. Попробуйте:
Dim MyNames() As String
Dim strName As String
Dim Ichosen As Integer
Dim i As Long, TotalRandoms As Long
i = 2 'starting row
'load list into Array based on split by /
'note will start as MyNums(0) and finish with MyNums(number-1)
MyNames = Split("John/Bill/Steve/Echo/Sandy/A/B/C/D/E/F/G/H/I/J", "/")
TotalRandoms = UBound(MyNames) + 2
Dim str As String
Do Until i > TotalRandoms
Randomize
'This will work with any length of name sequence
Ichosen = Int(Rnd * (UBound(MyNames) + 1))
strName = (MyNames(Ichosen))
str = Join(MyNames, "/")
If Right(str, Len(strName) + 1) = "/" & strName Then
str = Replace(str, "/" & strName, "") 'we replace strname in last position of array
Else
str = Replace(str, strName & "/", "") 'we replace strname in any position of array (except last one)
End If
Range("E" & i).Value = strName
Erase MyNames
MyNames = Split(str, "/")
i = i + 1
Loop
Erase MyNames
Это очень похоже на оригинал от вас, но я изменил способ избавления вашего массива от уже используемых элементов . Кроме того, изменился способ присваивания значений ячейке с помощью переменной.
Я сделал несколько прогонов и, похоже, все в порядке. Никаких дубликатов и всего прочего.
Надеюсь, вы сможете адаптировать это под свои нужды.