Я новичок в VBA и пытаюсь понять, как использовать цикл for each в большом диапазоне (500 КБ).
Я хочу рассчитать несколько сценариев в таблице в зависимости от вероятности, которая имеет следующий формат:
Group Type | Group 1 | Group 2 | Group 3.
Probability | 20% | 30% | 70%
Scenario 1 | 0 | 1 | 0
Scenario 2 | 0 | 0 | 1
....
Scenario 500k| 0 | 1 | 1
К сожалению, моя петля For each работает только в небольшом диапазоне до 10k - кто-нибудь из вас знает, как я могу использовать ее лучше?
Sub ScenarioCalculation()
Dim propability As Double, random As Double, row As Long, col As Long
Application.ScreenUpdating = False
For col = 4 To 23
For row = 25 To 100
propability = Cells(12, col + 1).Value
random = 0# + Rnd * 1#
If random < propability Then
Cells(row + 1, col + 1).Value = 1
Else
Cells(row + 1, col + 1).Value = 0
End If
Next row
Next col
End Sub
Не используйте Excel для более чем 10 тыс. строк, это не база данных.
Не для каждого используемого вами цикла и почему значения цикла ограничены строкой
25 To 100
? Я не очень понимаю вашу настоящую проблему (медленный ли код), то есть что не работает с кодом?Кажется, вы случайным образом генерируете 0 и 1 в заданном диапазоне. Если это так, вы можете использовать формулу Excel
=RANDBETWEEN(0,1)
, которая случайным образом даст вам ноль или единицу, а затем скопируете ее в диапазоне, или вы можете ввести формулу с контролем + ввод во всем выбранном диапазоне сразу. Я думаю, что это будет намного быстрее, чем перебирать каждую ячейку в vba. Да, но он будет изменчивым, поэтому вам придется копировать его как значения.@Naresh - 1 или 0 зависит от значения ячейки в строке 12
@TimWilliams .. Я не уверен. Но я думаю, что если мы сравниваем два значения; один известный и другой случайный; тогда также вероятность того, что одно больше или меньше другого, должна быть 50%, как 0 или 1. Если оба значения неизвестны, то это 50%.. Я думаю :)
@TimWilliams после сравнения с вашим ответом .. да, вы правы. 0,6 (или 60%) всегда имеют высокую вероятность согласно вашему ответу. Спасибо.