Добрый день ,помогите пожалуйста есть файл ,который считает значения в ячейках B2 ,C2, D2 исходя из генерации случайных чисел, нужен макрос ,который будет каждый раз нажимать f9 для обновления результатов, затем после каждого нажатия f9 копировать полученный результат в столбцы I J K,нужно проделать эту операцию 50 000 раз то есть каждый раз генерировать число а затем копировать его в др столбцы получится 50000 строк, затем нужно просуммировать все значения в столбцах I J K и разделить их на 50000,это написано в формуле в ячейках I5,J5,K5.Спасибо за помощь. Комп средненький желательно как-то оптимизировать макрос чтобы он работал побыстрее.
Добрый день ,помогите пожалуйста есть файл ,который считает значения в ячейках B2 ,C2, D2 исходя из генерации случайных чисел, нужен макрос ,который будет каждый раз нажимать f9 для обновления результатов, затем после каждого нажатия f9 копировать полученный результат в столбцы I J K,нужно проделать эту операцию 50 000 раз то есть каждый раз генерировать число а затем копировать его в др столбцы получится 50000 строк, затем нужно просуммировать все значения в столбцах I J K и разделить их на 50000,это написано в формуле в ячейках I5,J5,K5.Спасибо за помощь. Комп средненький желательно как-то оптимизировать макрос чтобы он работал побыстрее.snegovik2389
Как-то так получилось (ну, и что там надо поделить/посчитать после генерации - сами сделайте формулами): [vba]
Код
Sub main_run() Dim arr(1 To 50000, 1 To 3) As Integer Dim b2 As Integer, c2 As Integer, d2 As Integer Dim i As Long For i = 1 To 50000 Randomize Select Case Rnd() Case Is <= 0.333333 b2 = 1: c2 = 0: d2 = 0 Case Is > 0.6666666 b2 = 0: c2 = 0: d2 = 1 Case Else b2 = 0: c2 = 1: d2 = 0 End Select arr(i, 1) = b2: arr(i, 2) = c2: arr(i, 3) = d2 Next i Range("I2:K50001") = arr End Sub
[/vba]
Как-то так получилось (ну, и что там надо поделить/посчитать после генерации - сами сделайте формулами): [vba]
Код
Sub main_run() Dim arr(1 To 50000, 1 To 3) As Integer Dim b2 As Integer, c2 As Integer, d2 As Integer Dim i As Long For i = 1 To 50000 Randomize Select Case Rnd() Case Is <= 0.333333 b2 = 1: c2 = 0: d2 = 0 Case Is > 0.6666666 b2 = 0: c2 = 0: d2 = 1 Case Else b2 = 0: c2 = 1: d2 = 0 End Select arr(i, 1) = b2: arr(i, 2) = c2: arr(i, 3) = d2 Next i Range("I2:K50001") = arr End Sub
чтобы в самом коде не было функции генератора случ числа
Хм... а чем тогда вариант от bmv98rus не устраивает из сообщения № 3? Там нет генерации СЧ внутри процедуры...
Если вам нужно обязательно с Copy и PasteSpecial (зачем-то!) и без всяких ускоряющих фишек, то это долго будет, где-нибудь на полчаса. Например, вот банальная непричесанная процедура: [vba]
Код
Sub main_run2() Dim i For i = 1 To 50000 Range("B2:D2").Copy Range("I2:K2").Offset(i - 1).PasteSpecial xlPasteValues Next End Sub
[/vba] Только запустите сначала для 500 или 5000 повторений, чтобы понять как это небыстро.
чтобы в самом коде не было функции генератора случ числа
Хм... а чем тогда вариант от bmv98rus не устраивает из сообщения № 3? Там нет генерации СЧ внутри процедуры...
Если вам нужно обязательно с Copy и PasteSpecial (зачем-то!) и без всяких ускоряющих фишек, то это долго будет, где-нибудь на полчаса. Например, вот банальная непричесанная процедура: [vba]
Код
Sub main_run2() Dim i For i = 1 To 50000 Range("B2:D2").Copy Range("I2:K2").Offset(i - 1).PasteSpecial xlPasteValues Next End Sub
[/vba] Только запустите сначала для 500 или 5000 повторений, чтобы понять как это небыстро.Gustav
Gustav,многда моя формула генерации будет чуть меняться, но ответы всегда будут в тех трех ячейках потому нужен макрос ,который берет именно ответы из трех ячеек не меняя формулу и генерирует их на 50000 строк, я запускал код от bmv98rus ,но почему-то он не работает ,вот приложил файл с кодом. Можете пжлста сказать в чем ошибка ?
Gustav,многда моя формула генерации будет чуть меняться, но ответы всегда будут в тех трех ячейках потому нужен макрос ,который берет именно ответы из трех ячеек не меняя формулу и генерирует их на 50000 строк, я запускал код от bmv98rus ,но почему-то он не работает ,вот приложил файл с кодом. Можете пжлста сказать в чем ошибка ?snegovik2389