Страницы: 1 2 След.
RSS
макрос генерирующий случайные числа в заданном диапазоне
 
Добрый день...  
 
Помогите пожалуйста написать общий макрос, который генерирует случайные числа (через СЛУЧМЕЖДУ) в каждой ячейке толбцов А и В в диапазоне от (-78) по (78)..  
 
То есть, запускаю макрос и в начале в ячйке А1 появляется случайное число от (-78) по (78)..Затем в ячйке В1 появляется случайное число от (-78) по (78)..  
 
Затем цикл повторяется для ячеек А2 и В2, А3 и В3 и так далее, ровно до конца листа, до 65536-й строки...  
 
Я сам написал такой макрос, но он такой муторный, ползёт как трамвай...Пока он выполняется можно кандидатскую защитить...Из-за нехватки знаний слишком много промежуточных действий туда заложил...  
 
Что-нибудь простое и быстрое)..  
 
Пожалуйста...  
 
Вот пример :
 
Sub pp()  
[a1:b65536].FormulaR1C1 = "=RANDBETWEEN(-78,78)"
[a1:b65536].Value = [a1:b65536].Value
End Sub
 
Или так:  
Public Sub MyRandom()  
Dim stb  
Dim c As Range  
Application.ScreenUpdating = False  
stb = Timer  
 
For Each c In Range("A:B").Cells  
   c.Value = Int((156 * Rnd) + 1) - 78 '(Rnd(156) - 78))  
Next  
   stb = CInt((Timer - stb) * 100) / 100  
   MsgBox ("Время работы " & stb & " сек."), vbInformation  
Application.ScreenUpdating = True  
 
End Sub
Я сам - дурнее всякого примера! ...
 
Dophin, с уважением, оцените разницу:  
Sub pp()  
Dim stb  
Application.ScreenUpdating = False  
stb = Timer  
 
[a1:b65536].FormulaR1C1 = "=RANDBETWEEN(-78,78)"
[a1:b65536].Value = [a1:b65536].Value
   stb = CInt((Timer - stb) * 100) / 100  
   MsgBox ("Время работы " & stb & " сек."), vbInformation  
Application.ScreenUpdating = True  
 
End Sub
Я сам - дурнее всякого примера! ...
 
Ваш 5 сек, мой 0.42) или я не туда смарел?)  
 
заполнял 65356 строк, на миллионе в 2007 Ваш больно долго работал, мой за 7 сек заполнил
 
to Dophin, KuklP  
 
Большое спасибо)..  
Когда мой макрос выполнял эту же задачу, я успевал посмотреть новости по телевизору)  
 
С уважением)
 
Dophin, у меня 2003.  
Мой вариант - 20,78 сек., Ваш - 132,94. Может 2007 считает по другому... И спасибо Волшебнику, что оценил наши потуги :-)
Я сам - дурнее всякого примера! ...
 
может Вы просто макросы перепутали?)) цикл по идее дольше выполняться должен.
 
Public Sub MyRandom()  
Dim stb  
Dim c As Range  
Application.ScreenUpdating = False  
stb = Timer  
 
For Each c In Range("A:B").Cells  
c.Value = Int((156 * Rnd) + 1) - 78 '(Rnd(156) - 78))  
Next  
stb = CInt((Timer - stb) * 100) / 100  
MsgBox ("Время работы " & stb & " сек."), vbInformation  
Application.ScreenUpdating = True  
 
End Sub  
 
 
Sub pp()  
Dim stb  
Application.ScreenUpdating = False  
stb = Timer  
 
[a1:b65536].FormulaR1C1 = "=RANDBETWEEN(-78,78)"
[a1:b65536].Value = [a1:b65536].Value
stb = CInt((Timer - stb) * 100) / 100  
MsgBox ("Время работы " & stb & " сек."), vbInformation  
Application.ScreenUpdating = True  
 
End Sub  
 
Как перепутать?
Я сам - дурнее всякого примера! ...
 
мне ажно интересно стало)  
 
Замерьте пожалуйста еще кто нить выполнение этих двух макросов)
 
{quote}{login=Dophin}{date=17.03.2010 10:35}{thema=}{post}мне ажно интересно стало)  
Замерьте пожалуйста еще кто нить выполнение этих двух макросов){/post}{/quote}  
 
Присоединяюсь к просьбе Dophin.
Я сам - дурнее всякого примера! ...
 
2003:  
Public Sub MyRandom() = 7,84  
Sub pp()= 0,86. Правда, оба столбца заполнены #ИМЯ? :-)
 
2003:  
Public Sub MyRandom() = 13,77  
Sub pp()= 1,95. Тоже оба столбца заполнены #ИМЯ? :-)
 
{quote}{login=The_Prist}{date=17.03.2010 10:52}{thema=Re: }{post}{quote}{login=Юрий М}{date=17.03.2010 10:50}{thema=}{post}Правда, оба столбца заполнены #ИМЯ? :-){/post}{/quote}Я еще тестирую. А #ИМЯ потому, что функция RANDBETWEEN доступна лишь начиная с 2007 Excel.{/post}{/quote}  
 
заполняете циклом полностью два столбца в 2007? я так и не дождался)
 
Dophin, а как нам с Виктором теперь жить без RANDBETWEEN?
 
KuklP, а как у Вас проскочила RANDBETWEEN?
 
мож у него какой пакет анализа есть с этой функцией? вот он и тормозил так.
 
{quote}{login=Юрий М}{date=17.03.2010 10:59}{thema=}{post}Dophin, а как нам с Виктором теперь жить без RANDBETWEEN?{/post}{/quote}  
Как жить с тем, что у Юры машина в два раза шустрее? :)
 
У меня 2000, но randbetween сработал. И рр значительно быстрее...!
 
Кроме того, что у 2007-го дружественный интерфейс, у него ещё и завидное быстродействие?    
Кто может сказать насчёт скорости 2010-го по сравнению с 2003/2007?
 
И какой у меня 2003? если распознает "=RANDBETWEEN".  
Видимо в этом все дело. Сервиспук. Возможно с конвертором. Привык программки писать с обратной совместимостью(в отличии от Мелкомягких). Иногда приходится совмещать с 386 проц. Это Excel 5, Word 6. Win 3.1.    
Ладно, пойду спать, я с ночи.
Я сам - дурнее всякого примера! ...
 
Чуть не забыл. Большое спасибо тем, кто откликнулся!
Я сам - дурнее всякого примера! ...
 
{quote}{login=KuklP}{date=17.03.2010 11:18}{thema=}{post}Чуть не забыл. Большое спасибо тем, кто откликнулся!{/post}{/quote}  
Виктор, это нам. Диме ещё рано - тестирует.
 
У меня получилось, что иногда, если запускать несколько раз подряд макрос KuklP, то выпадают совершенно одинаковые значения...Не знаю чем объяснить, но случайно обратил внимание...  
 
А у Dophin макрос медленне работает, но зато каждый раз значения уникальные, не повторяются - то есть макрос Dophin - объективнее)
 
а версия Excel какая?  
 
чудеса какие то)
 
Засыпаю... А у меня все время разные значения. Но пришло на ум: randomise(timer). Все сплююююю
Я сам - дурнее всякого примера! ...
 
{quote}{login=Dophin}{date=17.03.2010 11:24}{thema=}{post}а версия Excel какая?  
 
чудеса какие то){/post}{/quote}  
 
Excel 2003  
 
Нет, правда...Просто я сохранял результаты и мог сопоставить... После какого-то перебора, внимание зацепилось на верхних яейках - чувствую, что уже встречал...Извлёк из корзины старые результаты - полностью совпали...  
 
Может у меня што-то с компом)
 
MyRandom 5.61  
PP 1.39  
 
MyRandom 5.17  
PP 1.12  
 
Значения разные.
 
{quote}{login=The_Prist}{date=17.03.2010 11:15}{thema=}{post}По имеющимся данным, 2010 пошустрее 2007. Точные замеры вроде пока никто не производил, а если и производил, то результатами пока не делился :-){/post}{/quote}Я проводил, и кстати на вашем макросе. И даже результаты тут вакладывал (примерно в сентябре)  
Вкратце так: не зависимо от операционной системы (XP, Vista, Win-7), и мощности компа, 2003 примерно на 40-50% быстрее 2007; 2010 и 2003 - здесь вопрос спорный.., да и 2010 в то время еще был даже не бета...  
Зы. Если выложите нормальный пример для теста - я вечером могу дома протестировать все три версии.
 
Вот, выкроил время на работе.  
В этом тесте 2007 не уступает 2003
Страницы: 1 2 След.
Читают тему
Наверх