Здравствуйте.Уважаемые сверхзнатоки vba,не первый год пишу для себя макросы,но на этот раз вошёл в ступор.Не получается сгенерировать рандом уникальных в коллекции,что-бы были в столбце и в строке уникальные из коллекции без повторений и без пустых ячеек,как в примере.Перепробовал много вариантов и безрезультатно,этот код оставляет тоже пустые ячейки.
Sub Проверка11()
Application.ScreenUpdating = False
Dim j&, i&, a&, b&, c&, m&, d&, v&, arr(), r As New Collection
arr = [a1:d4].Value
b = 1: a = 1:
For c = 1 To 4
r.Add 99
r.Add 88
r.Add 77
r.Add 66
Randomize
For i = 1 To 4
j = CInt((4 - i) * Rnd + 1)
t = r.Item(j)
If arr(a + d, b + m) = Empty Then
For v = 1 To 4
If arr(a + k, b + m) = t Then
m = m + 1
k = 0
Exit For
Else
k = k + 1
End If
Next v
If k = 4 Then arr(a + d, b + m) = t: k = 0: m = m + 1
Else
m = m + 1
If m = 4 Then m = 0
End If
If m = 4 Then m = 0
r.Remove (j)
Next i
d = d + 1
m = 0
Next c
[a1:d4].Value = arr
Application.ScreenUpdating = True
End Sub
Sub Проверка11()
Application.ScreenUpdating = False
Dim j&, i&, a&, b&, c&, m&, d&, v&, arr(), r As New Collection
arr = [a1:d4].Value
b = 1: a = 1:
For c = 1 To 4
r.Add 99
r.Add 88
r.Add 77
r.Add 66
Randomize
For i = 1 To 4
j = CInt((4 - i) * Rnd + 1)
t = r.Item(j)
If arr(a + d, b + m) = Empty Then
For v = 1 To 4
If arr(a + k, b + m) = t Then
m = m + 1
k = 0
Exit For
Else
k = k + 1
End If
Next v
If k = 4 Then arr(a + d, b + m) = t: k = 0: m = m + 1
Else
m = m + 1
If m = 4 Then m = 0
End If
If m = 4 Then m = 0
r.Remove (j)
Next i
d = d + 1
m = 0
Next c
[a1:d4].Value = arr
Application.ScreenUpdating = True
End Sub