Функция VBA Rnd
не возвращает истинное случайное число , поскольку рандомизация основана на последовательности начальных чисел, которая может повторяться при каждом открытии файла, как вы уже видели. Согласно комментариям, WorksheetFunction.RandBetween
не имеет такого недостатка, и в этом случае будет работать в качестве замены. Также, как Excel знает об этом, была добавлена функция Randomize
, чтобы рандомизировать начальное число, чтобы получить более случайное число.
Вы уже узнали об этом из комментариев, однако я все еще отправляю свой ответ, так как ваш код крайне неэффективен и может занять много времени для запуска (мне потребовалось полминуты, чтобы открыть файлпри тестировании). И я просто не мог игнорировать это. Поэтому я изменил его, чтобы вместо этого генерировать все ваши числа в массиве и вставлять их на свой лист после. Это делает код почти мгновенным:
Private Sub workbook_Open()
Dim i As Integer, j As Integer
Dim arr(0 To 24, 0 To 12) As Variant
For i = 0 To 24
For j = 0 To 12
Randomize
arr(i, j) = Int(10000 * Rnd) 'WorksheetFunction.RandBetween(1, 10000)
Next j
Next i
Range("B15:M38") = arr
End Sub