Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Рандомные числа в VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Рандомные числа в VBA (Формулы/Formulas)
Рандомные числа в VBA
Nik12 Дата: Вторник, 26.05.2015, 20:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Здравствуйте!
помогите пожалуйста.
Есть код:

[vba]
Код
d = Sheets(3).Cells(26, 8).Text
If d <> 0 Then
If d Mod 2 = 0 Then
If Sheets(3).Cells(26, 8).Text = d Then
Randomize
r = Rnd * 10
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = False
End If
End If
End If

Application.EnableEvents = True
[/vba]

в перемененной d храниться некоторое значение, которое меняется, начальное его значение - 0
нужно сделать так, что бы как только значение переменной становилось четным - в другой ячейке появлялось рандомно значение от 1 до 10

а у меня получается бесконечный цикл - в нужной ячейке бесконечно перебираются рандомно числа.
Что не так я делаю?
Помогите пожалуйста!
[moder]Оформляйте коды тегами (кнопка #)[/moder]


Сообщение отредактировал Pelena - Вторник, 26.05.2015, 20:50
 
Ответить
СообщениеЗдравствуйте!
помогите пожалуйста.
Есть код:

[vba]
Код
d = Sheets(3).Cells(26, 8).Text
If d <> 0 Then
If d Mod 2 = 0 Then
If Sheets(3).Cells(26, 8).Text = d Then
Randomize
r = Rnd * 10
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = False
End If
End If
End If

Application.EnableEvents = True
[/vba]

в перемененной d храниться некоторое значение, которое меняется, начальное его значение - 0
нужно сделать так, что бы как только значение переменной становилось четным - в другой ячейке появлялось рандомно значение от 1 до 10

а у меня получается бесконечный цикл - в нужной ячейке бесконечно перебираются рандомно числа.
Что не так я делаю?
Помогите пожалуйста!
[moder]Оформляйте коды тегами (кнопка #)[/moder]

Автор - Nik12
Дата добавления - 26.05.2015 в 20:46
Samaretz Дата: Вторник, 26.05.2015, 20:50 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 223
Репутация: 63 ±
Замечаний: 0% ±

Excel 2010; 2013; 2016
А где цикл-то? Или это не полный листинг, а только отрывок?
В какой процедуре используется данный код?


Сообщение отредактировал Samaretz - Вторник, 26.05.2015, 20:54
 
Ответить
СообщениеА где цикл-то? Или это не полный листинг, а только отрывок?
В какой процедуре используется данный код?

Автор - Samaretz
Дата добавления - 26.05.2015 в 20:50
KSV Дата: Вторник, 26.05.2015, 21:06 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Nik12, поменяйте местами вот эти 2 строки:
[vba]
Код
    Sheets(3).Cells(2, 15).Formula = r
     Application.EnableEvents = False
[/vba]

[vba]
Код
    ' ваша строка вернет число от 0 до 9
     r = 10 * Rnd

     ' а так, от 1 до 10
     r = 10 * Rnd + 1        ' дробные числа
     'r = Int(10 * Rnd) + 1  ' целые числа
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Вторник, 26.05.2015, 21:12
 
Ответить
СообщениеNik12, поменяйте местами вот эти 2 строки:
[vba]
Код
    Sheets(3).Cells(2, 15).Formula = r
     Application.EnableEvents = False
[/vba]

[vba]
Код
    ' ваша строка вернет число от 0 до 9
     r = 10 * Rnd

     ' а так, от 1 до 10
     r = 10 * Rnd + 1        ' дробные числа
     'r = Int(10 * Rnd) + 1  ' целые числа
[/vba]

Автор - KSV
Дата добавления - 26.05.2015 в 21:06
Manyasha Дата: Вторник, 26.05.2015, 21:08 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Nik12,
d = Sheets(3).Cells(26, 8).Text
нужно заменить на[vba]
Код
d = Sheets(3).Cells(26, 8).Value
[/vba]
Конец переписать так[vba]
Код
Application.EnableEvents = False
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = True
End If
End If
End If
[/vba]
Вот это[vba]
Код
If Sheets(3).Cells(26, 8).Text = d Then
[/vba]вообще не поняла зачем...


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNik12,
d = Sheets(3).Cells(26, 8).Text
нужно заменить на[vba]
Код
d = Sheets(3).Cells(26, 8).Value
[/vba]
Конец переписать так[vba]
Код
Application.EnableEvents = False
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = True
End If
End If
End If
[/vba]
Вот это[vba]
Код
If Sheets(3).Cells(26, 8).Text = d Then
[/vba]вообще не поняла зачем...

Автор - Manyasha
Дата добавления - 26.05.2015 в 21:08
Nik12 Дата: Вторник, 26.05.2015, 22:09 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha,
сделала все как написано
когда этот отрывок стоял в конце кода - работало, но не совсем правильно программа работала
переставила в начало - все равно перебирает случайные цифры
код примерно так выглядит:
[vba]
Код

d = Sheets(3).Cells(26, 8).Value
If d <> 0 Then
If d Mod 2 = 0 Then
Randomize
r = Int(Rnd * 10) + 1
Application.EnableEvents = False
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = True
End If
End If

a = Sheets(3).Cells(2, 15).Text

Select Case a
Case 1
      Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ.  - 50 èç áþäæåòà."
      Application.EnableEvents = False
[/vba]
 
Ответить
СообщениеManyasha,
сделала все как написано
когда этот отрывок стоял в конце кода - работало, но не совсем правильно программа работала
переставила в начало - все равно перебирает случайные цифры
код примерно так выглядит:
[vba]
Код

d = Sheets(3).Cells(26, 8).Value
If d <> 0 Then
If d Mod 2 = 0 Then
Randomize
r = Int(Rnd * 10) + 1
Application.EnableEvents = False
Sheets(3).Cells(2, 15).Formula = r
Application.EnableEvents = True
End If
End If

a = Sheets(3).Cells(2, 15).Text

Select Case a
Case 1
      Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ.  - 50 èç áþäæåòà."
      Application.EnableEvents = False
[/vba]

Автор - Nik12
Дата добавления - 26.05.2015 в 22:09
Manyasha Дата: Вторник, 26.05.2015, 22:30 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Nik12, а Вам нужно, чтобы поставилось рандомное число и все, больше оно не меняла вне зависимости от четности Cells(26, 8)? Если да, то уберите [vba]
Код
Application.EnableEvents = True
[/vba]
Сложно оценивать, как правильней написать, с учетом того, что дальше есть еще код. Покажите полный текст макроса в файле.

[vba]
Код
a = Sheets(3).Cells(2, 15).Text
[/vba]и снова, .Text не нужен, он все числовые значения будет считать текстом (да и .Value не обязательно)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNik12, а Вам нужно, чтобы поставилось рандомное число и все, больше оно не меняла вне зависимости от четности Cells(26, 8)? Если да, то уберите [vba]
Код
Application.EnableEvents = True
[/vba]
Сложно оценивать, как правильней написать, с учетом того, что дальше есть еще код. Покажите полный текст макроса в файле.

[vba]
Код
a = Sheets(3).Cells(2, 15).Text
[/vba]и снова, .Text не нужен, он все числовые значения будет считать текстом (да и .Value не обязательно)

Автор - Manyasha
Дата добавления - 26.05.2015 в 22:30
Nik12 Дата: Вторник, 26.05.2015, 22:44 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha,
в продолжении кода ничего больше нет, просто еще несколько значений case с такой же конструкцией - и все.
Мне нужно что бы каждый раз, когда d получает четное значение в ячейке появлялось случайное число. Сохранять его не надо.
 
Ответить
СообщениеManyasha,
в продолжении кода ничего больше нет, просто еще несколько значений case с такой же конструкцией - и все.
Мне нужно что бы каждый раз, когда d получает четное значение в ячейке появлялось случайное число. Сохранять его не надо.

Автор - Nik12
Дата добавления - 26.05.2015 в 22:44
Serge_007 Дата: Среда, 27.05.2015, 00:49 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
[vba]
Код
Sub Nik12()
     For d = 1 To 10
         If d Mod 2 = 0 Then
             Randomize
                 r = Int(Rnd * 10) + 1
             MsgBox ("Случайное число " & r)
'            Cells(1, 1) = r
         Else
             MsgBox ("d не чётное!")
         End If
     Next
End Sub
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение[vba]
Код
Sub Nik12()
     For d = 1 To 10
         If d Mod 2 = 0 Then
             Randomize
                 r = Int(Rnd * 10) + 1
             MsgBox ("Случайное число " & r)
'            Cells(1, 1) = r
         Else
             MsgBox ("d не чётное!")
         End If
     Next
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 27.05.2015 в 00:49
Nik12 Дата: Среда, 27.05.2015, 12:22 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Serge_007,
значение d считывается из ячейки
и оно постоянно меняется
 
Ответить
СообщениеSerge_007,
значение d считывается из ячейки
и оно постоянно меняется

Автор - Nik12
Дата добавления - 27.05.2015 в 12:22
Manyasha Дата: Среда, 27.05.2015, 12:36 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Nik12, в модуль 3-го листа:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, [h26]) Is Nothing Then
         d = Cells(26, 8)
         If d <> 0 And (d And 1) = 0 Then
             Randomize
             r = Int(Rnd * 10) + 1
             Cells(2, 15).Formula = r
         End If
     End If
End Sub
[/vba]
Если не понятно
Покажите полный текст макроса в файле


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNik12, в модуль 3-го листа:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, [h26]) Is Nothing Then
         d = Cells(26, 8)
         If d <> 0 And (d And 1) = 0 Then
             Randomize
             r = Int(Rnd * 10) + 1
             Cells(2, 15).Formula = r
         End If
     End If
End Sub
[/vba]
Если не понятно
Покажите полный текст макроса в файле

Автор - Manyasha
Дата добавления - 27.05.2015 в 12:36
Nik12 Дата: Среда, 27.05.2015, 14:38 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha,
не срабатывает этот метод
в ячейку O2 должно записываться случайное число, когда значение h26 четное
код написан в коде страницы
то что там написано Sheet 3 - это потому что из другого документа скопировано
К сообщению приложен файл: 7403014.xlsx (12.9 Kb)
 
Ответить
СообщениеManyasha,
не срабатывает этот метод
в ячейку O2 должно записываться случайное число, когда значение h26 четное
код написан в коде страницы
то что там написано Sheet 3 - это потому что из другого документа скопировано

Автор - Nik12
Дата добавления - 27.05.2015 в 14:38
ShAM Дата: Среда, 27.05.2015, 15:48 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
код написан в коде страницы
В .xlsx файлах код не может быть ни в "коде страницы", вообще нигде.
Код от Manyasha вставил в Ваш файл. Меняйте Н26, смотрите результат в О2.
К сообщению приложен файл: 7403014_1.xlsm (19.0 Kb)
 
Ответить
Сообщение
код написан в коде страницы
В .xlsx файлах код не может быть ни в "коде страницы", вообще нигде.
Код от Manyasha вставил в Ваш файл. Меняйте Н26, смотрите результат в О2.

Автор - ShAM
Дата добавления - 27.05.2015 в 15:48
Nik12 Дата: Среда, 27.05.2015, 16:10 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
метод срабатывает, если я руками записываю цифру в ячейку H26 и то не совсем так как надо, ну это ерунда и так нормально будет
но проблема в том, что в ячейке H26 у меня формула записана - и если значение в ячейке меняется по формуле, то ничего не работает
 
Ответить
Сообщениеметод срабатывает, если я руками записываю цифру в ячейку H26 и то не совсем так как надо, ну это ерунда и так нормально будет
но проблема в том, что в ячейке H26 у меня формула записана - и если значение в ячейке меняется по формуле, то ничего не работает

Автор - Nik12
Дата добавления - 27.05.2015 в 16:10
Manyasha Дата: Среда, 27.05.2015, 16:30 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Nik12, тогда так:

Если значение H26 не меняется (было 2, что-то сделали, стало 2), сл. число не обновится.
К сообщению приложен файл: 7403014_2.xlsm (19.2 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNik12, тогда так:

Если значение H26 не меняется (было 2, что-то сделали, стало 2), сл. число не обновится.

Автор - Manyasha
Дата добавления - 27.05.2015 в 16:30
Nik12 Дата: Среда, 27.05.2015, 16:41 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, он перебирает все 10 цифр и останавливается
это плохо, потому что в зависимости от полученной случайной цифры, происходит одно из десяти действий
а тут получается, что каждый раз как число четным становиться, все события происходят

но хорошо, что уже срабатывает каждый раз когда четное число записывается в ячейку
 
Ответить
СообщениеManyasha, он перебирает все 10 цифр и останавливается
это плохо, потому что в зависимости от полученной случайной цифры, происходит одно из десяти действий
а тут получается, что каждый раз как число четным становиться, все события происходят

но хорошо, что уже срабатывает каждый раз когда четное число записывается в ячейку

Автор - Nik12
Дата добавления - 27.05.2015 в 16:41
Manyasha Дата: Среда, 27.05.2015, 17:29 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
перебирает все 10 цифр и останавливается
Неправда, код проверила раз 30, ничего не останавливается.
все события происходят
какие события? Где они в Вашем файле?
См. файл: добавила тестовую UDF c Select case.
К сообщению приложен файл: 7403014_3.xlsm (20.8 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
перебирает все 10 цифр и останавливается
Неправда, код проверила раз 30, ничего не останавливается.
все события происходят
какие события? Где они в Вашем файле?
См. файл: добавила тестовую UDF c Select case.

Автор - Manyasha
Дата добавления - 27.05.2015 в 17:29
Nik12 Дата: Среда, 27.05.2015, 17:48 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
перебирает все 10 цифр и останавливается
Неправда, код проверила раз 30, ничего не останавливается.

я видимо не правильно выразилась
извиняюсь

как только меняется значение в h26 он в ячейке o2 перебирает кучу цифры и в итоге записывает все таки одну.
Под событиями подразумевается значения, записанные в case:
[vba]
Код

Select Case a
Case 1
      Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ.  - 50 èç áþäæåòà."
      Application.EnableEvents = False
Case 2
     Sheets(3).Cells(3, 18).Formula = "Ñèñòåìíûé àäìèíèñòðàòîð ïîëó÷èë ãîä áåñëàòíîãî àíòèâèðóñà Êàñïåðñêèé"
     Application.EnableEvents = False
     Sheets(3).Cells(14, 6).Formula = "äà"
Case 3
     Sheets(3).Cells(4, 18).Formula = "Íà÷àëüíèê íå ïîâûñèë çàðïëàòó ñèñòåìíîìó àäìèíèñòðàòîðó. Óâîëåííûé àäìèí îñòàâèë ïðîãðàììó - 'ïîäàðîê', êîòîðàÿ êîïèðóåò âèðòóëàëüíóþ ìàøèíó ñ áàçîé äàííûõ"
     Application.EnableEvents = False
     Sheets(4).Cells(11, 4).Formula = "äà"
Case 4
     Sheets(3).Cells(5, 18).Formula = "Õàêåð ïîäêóïàåò çíàêîìîãî, ðàáîòàþùåãî â Âàøåé ôèðìå, è òîò çàõîäèò íà ðàñøàðåííûå ðåñóðñû è êîïèðóåò áàçó äàííûõ"
     Application.EnableEvents = False
      Sheets(4).Cells(9, 4).Formula = "äà"
Case 5
     Sheets(3).Cells(6, 18).Formula = "Êîìïàíèÿ-ïðîèçâîäèòåëü DioNIS îáúÿâèëà î ðàçîðåíèè è äåëàåò ñêèäêó 30% íà ñâîþ ïðîäóêöèþ"
     Application.EnableEvents = False
Case 6
     Sheets(3).Cells(7, 18).Formula = "Õàêåðñêèå àòàêè ïîääåðæàëà êîìïàíèÿ-êîíêóðåíò. +120 íà ñ÷åò íàïàäåíèÿ."
     Application.EnableEvents = False
Case 7
     Sheets(3).Cells(8, 18).Formula = "Íà Âàøè êîìïüþòåðû íåèçâåñòíûì îáðàçîì ïîïàäàåò íîâûé âèðóñ, êîòîðûé ìåíÿåò ñóììû â ïëàòåæêàõ. Îò íîâîãî âèðóñà íåò ñïàñåíèÿ. Âñÿ çàùèòà, óñòàíîâëåííàÿ âî èçáåæàíèè äàííûõ ïðîáëåì, îêàçûâàåòñÿ áåñïîëåçíîé."
     Application.EnableEvents = False
     x = Range("G20").Value
     y = Range("H20").Value
     Sheets(3).Cells(20, 6).Formula = "íåò"
     Range("G20").Value = x
     Range("H20").Value = y
Case 8
     Sheets(3).Cells(9, 18).Formula = "Â îôèñ ÈÒ-îòäåëà ïî îøèáêå êóðüåðñêîé ïî÷òîé äîñòàâëÿþò öåëûé ÿùèê ïðîäóêöèè eToken. Êóðüåð íàñòàèâàåò ïðèíÿòü ïîñûëêó, ïîýòîìó âûáîðà íåò"
     Application.EnableEvents = False
     Sheets(3).Cells(7, 6).Formula = "äà"
Case 9
     Sheets(3).Cells(10, 18).Formula = "Æåëàÿ ñýêîíîìèòü íà ðàñõîäàõ íà÷àëüíèê íàíèìàåò îõðàíó ïî îáúÿâëåíèþ, êîòîðàÿ òùàòåëüíî 'îõðàíÿåò' òîëüêî òåëåâèçîð â ïîäñîáêå. Îáúÿâëÿåòñÿ íåäåëÿ áåíàêàçàííîãî ãðàáåæà, âñå âîðû è çëîóìûøëåííèêè ïîëó÷àþò +10 ê âåçåíèþ."
     Application.EnableEvents = False
     y = Range("H21").Value
     Sheets(3).Cells(21, 6).Formula = "íåò"
     x = Range("D21").Value
     Range("G21").Value = x
     Range("H21").Value = y
Case 10
     Sheets(3).Cells(11, 18).Formula = " êîìïàíèþ íà ïðàêòèêó ïðèõîäèò ìîëîäîé ñïåöèàëèñò ïî àíàëèçó ÈÁ. Çà ÷èñòî ñèìâîëè÷åñêîå âîçíàãðàæäåíèå îí ãîòîâ ïîìî÷ü âûñòðîèòü ãðàììîòíóþ ñèñòåìó ÈÁ."
     Application.EnableEvents = False
     If Range("F25").Value = "íåò" Then
     Sheets(3).Cells(25, 6).Formula = "äà"
     Sheets(3).Cells(25, 8).Formula = 0
     Sheets(3).Cells(25, 4).Formula = 90
     End If
End Select
[/vba]

получается что он в ячейке о2 перебрал все 10 цифр, а на каждую цифру у меня срабатывает какое то действие

а должно быть только одно событие на одно четное значение в ячейке h26
 
Ответить
Сообщение
перебирает все 10 цифр и останавливается
Неправда, код проверила раз 30, ничего не останавливается.

я видимо не правильно выразилась
извиняюсь

как только меняется значение в h26 он в ячейке o2 перебирает кучу цифры и в итоге записывает все таки одну.
Под событиями подразумевается значения, записанные в case:
[vba]
Код

Select Case a
Case 1
      Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ.  - 50 èç áþäæåòà."
      Application.EnableEvents = False
Case 2
     Sheets(3).Cells(3, 18).Formula = "Ñèñòåìíûé àäìèíèñòðàòîð ïîëó÷èë ãîä áåñëàòíîãî àíòèâèðóñà Êàñïåðñêèé"
     Application.EnableEvents = False
     Sheets(3).Cells(14, 6).Formula = "äà"
Case 3
     Sheets(3).Cells(4, 18).Formula = "Íà÷àëüíèê íå ïîâûñèë çàðïëàòó ñèñòåìíîìó àäìèíèñòðàòîðó. Óâîëåííûé àäìèí îñòàâèë ïðîãðàììó - 'ïîäàðîê', êîòîðàÿ êîïèðóåò âèðòóëàëüíóþ ìàøèíó ñ áàçîé äàííûõ"
     Application.EnableEvents = False
     Sheets(4).Cells(11, 4).Formula = "äà"
Case 4
     Sheets(3).Cells(5, 18).Formula = "Õàêåð ïîäêóïàåò çíàêîìîãî, ðàáîòàþùåãî â Âàøåé ôèðìå, è òîò çàõîäèò íà ðàñøàðåííûå ðåñóðñû è êîïèðóåò áàçó äàííûõ"
     Application.EnableEvents = False
      Sheets(4).Cells(9, 4).Formula = "äà"
Case 5
     Sheets(3).Cells(6, 18).Formula = "Êîìïàíèÿ-ïðîèçâîäèòåëü DioNIS îáúÿâèëà î ðàçîðåíèè è äåëàåò ñêèäêó 30% íà ñâîþ ïðîäóêöèþ"
     Application.EnableEvents = False
Case 6
     Sheets(3).Cells(7, 18).Formula = "Õàêåðñêèå àòàêè ïîääåðæàëà êîìïàíèÿ-êîíêóðåíò. +120 íà ñ÷åò íàïàäåíèÿ."
     Application.EnableEvents = False
Case 7
     Sheets(3).Cells(8, 18).Formula = "Íà Âàøè êîìïüþòåðû íåèçâåñòíûì îáðàçîì ïîïàäàåò íîâûé âèðóñ, êîòîðûé ìåíÿåò ñóììû â ïëàòåæêàõ. Îò íîâîãî âèðóñà íåò ñïàñåíèÿ. Âñÿ çàùèòà, óñòàíîâëåííàÿ âî èçáåæàíèè äàííûõ ïðîáëåì, îêàçûâàåòñÿ áåñïîëåçíîé."
     Application.EnableEvents = False
     x = Range("G20").Value
     y = Range("H20").Value
     Sheets(3).Cells(20, 6).Formula = "íåò"
     Range("G20").Value = x
     Range("H20").Value = y
Case 8
     Sheets(3).Cells(9, 18).Formula = "Â îôèñ ÈÒ-îòäåëà ïî îøèáêå êóðüåðñêîé ïî÷òîé äîñòàâëÿþò öåëûé ÿùèê ïðîäóêöèè eToken. Êóðüåð íàñòàèâàåò ïðèíÿòü ïîñûëêó, ïîýòîìó âûáîðà íåò"
     Application.EnableEvents = False
     Sheets(3).Cells(7, 6).Formula = "äà"
Case 9
     Sheets(3).Cells(10, 18).Formula = "Æåëàÿ ñýêîíîìèòü íà ðàñõîäàõ íà÷àëüíèê íàíèìàåò îõðàíó ïî îáúÿâëåíèþ, êîòîðàÿ òùàòåëüíî 'îõðàíÿåò' òîëüêî òåëåâèçîð â ïîäñîáêå. Îáúÿâëÿåòñÿ íåäåëÿ áåíàêàçàííîãî ãðàáåæà, âñå âîðû è çëîóìûøëåííèêè ïîëó÷àþò +10 ê âåçåíèþ."
     Application.EnableEvents = False
     y = Range("H21").Value
     Sheets(3).Cells(21, 6).Formula = "íåò"
     x = Range("D21").Value
     Range("G21").Value = x
     Range("H21").Value = y
Case 10
     Sheets(3).Cells(11, 18).Formula = " êîìïàíèþ íà ïðàêòèêó ïðèõîäèò ìîëîäîé ñïåöèàëèñò ïî àíàëèçó ÈÁ. Çà ÷èñòî ñèìâîëè÷åñêîå âîçíàãðàæäåíèå îí ãîòîâ ïîìî÷ü âûñòðîèòü ãðàììîòíóþ ñèñòåìó ÈÁ."
     Application.EnableEvents = False
     If Range("F25").Value = "íåò" Then
     Sheets(3).Cells(25, 6).Formula = "äà"
     Sheets(3).Cells(25, 8).Formula = 0
     Sheets(3).Cells(25, 4).Formula = 90
     End If
End Select
[/vba]

получается что он в ячейке о2 перебрал все 10 цифр, а на каждую цифру у меня срабатывает какое то действие

а должно быть только одно событие на одно четное значение в ячейке h26

Автор - Nik12
Дата добавления - 27.05.2015 в 17:48
Manyasha Дата: Среда, 27.05.2015, 18:21 | Сообщение № 18
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Nik12, я в последнем сообщении показала Вам на примере функции dop_macro(не очень удачное название, ну не суть) куда правильно пихать код, который должен будет работать с полученным рандомным r. Не важно, вызовите Вы свой макрос по аналогии или запихнете все его содержимое в место вызова функции.
Вместо строчки dop_macro r в моем коде вставьте свой код.
Если не понятно
Цитата Manyasha, 26.05.2015 в 22:30, в сообщении № 6
Покажите полный текст макроса в файле

Если Вы все сделали правильно, но блок с селектами все равно работает не правильно, создавайте новую тему и спрашивайте уже конкретно про оператор Select...Case.
[p.s.]Чтобы код копировался нормально, без "сломанной" кодировки, перед копированием переведите раскладку на ПК на русскую.[/p.s.]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNik12, я в последнем сообщении показала Вам на примере функции dop_macro(не очень удачное название, ну не суть) куда правильно пихать код, который должен будет работать с полученным рандомным r. Не важно, вызовите Вы свой макрос по аналогии или запихнете все его содержимое в место вызова функции.
Вместо строчки dop_macro r в моем коде вставьте свой код.
Если не понятно
Цитата Manyasha, 26.05.2015 в 22:30, в сообщении № 6
Покажите полный текст макроса в файле

Если Вы все сделали правильно, но блок с селектами все равно работает не правильно, создавайте новую тему и спрашивайте уже конкретно про оператор Select...Case.
[p.s.]Чтобы код копировался нормально, без "сломанной" кодировки, перед копированием переведите раскладку на ПК на русскую.[/p.s.]

Автор - Manyasha
Дата добавления - 27.05.2015 в 18:21
KSV Дата: Среда, 27.05.2015, 19:21 | Сообщение № 19
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
В ячейке H26 - "левая" формула (замените на свою) просто, чтобы воспроизвести вашу ситуацию...
Меняйте числа в диапазоне H2:H25, и как только значение H26 станет четным - в ячейку O2 запишется случайное число и будет выполнено одно из 10 ваших "событий" (результаты действий "событий" запишутся на листы 3 и 4.)
[p.s.]"кракозябры" - скопировал из вашего поста[/p.s.]

[p.s.]просто, ваши путаные объяснения оч. сложно понять, и как результат - куча предложенных вам ПРАВИЛЬНЫХ вариантов, ни один из которых вас не устраивает...
если не устроит и этот, то напишите прямо по шагам: делаю "так" - хочу получить "это", делаю "эдак" - хочу получить "вот это".
а то может просто случится так, что терпение у помогающих вам закончится быстрее, чем будет предложен устраивающий вас вариант :) [/p.s.]
К сообщению приложен файл: 7403014.xlsm (24.5 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Среда, 27.05.2015, 19:31
 
Ответить
СообщениеВ ячейке H26 - "левая" формула (замените на свою) просто, чтобы воспроизвести вашу ситуацию...
Меняйте числа в диапазоне H2:H25, и как только значение H26 станет четным - в ячейку O2 запишется случайное число и будет выполнено одно из 10 ваших "событий" (результаты действий "событий" запишутся на листы 3 и 4.)
[p.s.]"кракозябры" - скопировал из вашего поста[/p.s.]

[p.s.]просто, ваши путаные объяснения оч. сложно понять, и как результат - куча предложенных вам ПРАВИЛЬНЫХ вариантов, ни один из которых вас не устраивает...
если не устроит и этот, то напишите прямо по шагам: делаю "так" - хочу получить "это", делаю "эдак" - хочу получить "вот это".
а то может просто случится так, что терпение у помогающих вам закончится быстрее, чем будет предложен устраивающий вас вариант :) [/p.s.]

Автор - KSV
Дата добавления - 27.05.2015 в 19:21
Nik12 Дата: Среда, 27.05.2015, 20:30 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
KSV,
спасибо, ваш код сработал
получилось именно то, что надо!
 
Ответить
СообщениеKSV,
спасибо, ваш код сработал
получилось именно то, что надо!

Автор - Nik12
Дата добавления - 27.05.2015 в 20:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Рандомные числа в VBA (Формулы/Formulas)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!