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

Вход

Регистрация

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

 

= Мир MS Excel/макрос генерирования случайных чисел в n-количество ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос генерирования случайных чисел в n-количество ячеек (Макросы/Sub)
макрос генерирования случайных чисел в n-количество ячеек
Markovich Дата: Воскресенье, 13.12.2020, 22:35 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Доброго времени суток, уважаемые форумчане! Пользуюсь простейшим макросом ГСЧ с изменяемым диапазоном генерирования. Возникла необходимость его доработать, но не хватает знаний по VBA. Нужно, чтобы случайные числа генерировались на другой лист (service1) c изменяемым диапазоном ячеек, т.е. генерация в ячейки, начиная с B11 до ячейки B(n), n-берется из ячейки A3 листа service. Буду благодарен за любую помощь в решении задачи.
К сообщению приложен файл: 0860032.xls (47.5 Kb)
 
Ответить
СообщениеДоброго времени суток, уважаемые форумчане! Пользуюсь простейшим макросом ГСЧ с изменяемым диапазоном генерирования. Возникла необходимость его доработать, но не хватает знаний по VBA. Нужно, чтобы случайные числа генерировались на другой лист (service1) c изменяемым диапазоном ячеек, т.е. генерация в ячейки, начиная с B11 до ячейки B(n), n-берется из ячейки A3 листа service. Буду благодарен за любую помощь в решении задачи.

Автор - Markovich
Дата добавления - 13.12.2020 в 22:35
Kuzmich Дата: Воскресенье, 13.12.2020, 22:53 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Sub random_service_Генератор_()
Dim Srv1 As Worksheet
Dim i As Long
  Set Srv1 = ThisWorkbook.Worksheets("service1")
  With Srv1
    For i = 11 To Range("A3")
      Randomize
      'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
      .Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
    Next
    .Activate
  End With
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub random_service_Генератор_()
Dim Srv1 As Worksheet
Dim i As Long
  Set Srv1 = ThisWorkbook.Worksheets("service1")
  With Srv1
    For i = 11 To Range("A3")
      Randomize
      'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
      .Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
    Next
    .Activate
  End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 13.12.2020 в 22:53
Markovich Дата: Понедельник, 14.12.2020, 19:13 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Работает как надо. Мир не без добрых людей. Kuzmich, большое Вам спасибо!!! Не сочтите за наглость, есть у меня есть несколько вопросов: после выполнения макроса мне нужно оставаться на листе service (с кнопкой), для этого я удалил строку .Activate, вроде работает. Так правильно поступить или это некорректное действие? И еще... таких аналогичных генераторов мне нужно три (с разными конечно адресами). Как правильно их склеить в один макрос, или лучше три разных макроса прописать в четвертом и его выполнять? В каком случае они отработают быстрее, если будут работать одновременно или последовательно один за другим? И еще вопрос возник, а в каком месте задается лист с исходными данными "service", вот целевой "service1" видно где? Макрос буду интегрировать в таблицу с множеством листов, и кнопка будет находиться на третьем листе, Может где то нужно вписать название листа "service"?


Сообщение отредактировал Markovich - Понедельник, 14.12.2020, 19:37
 
Ответить
СообщениеРаботает как надо. Мир не без добрых людей. Kuzmich, большое Вам спасибо!!! Не сочтите за наглость, есть у меня есть несколько вопросов: после выполнения макроса мне нужно оставаться на листе service (с кнопкой), для этого я удалил строку .Activate, вроде работает. Так правильно поступить или это некорректное действие? И еще... таких аналогичных генераторов мне нужно три (с разными конечно адресами). Как правильно их склеить в один макрос, или лучше три разных макроса прописать в четвертом и его выполнять? В каком случае они отработают быстрее, если будут работать одновременно или последовательно один за другим? И еще вопрос возник, а в каком месте задается лист с исходными данными "service", вот целевой "service1" видно где? Макрос буду интегрировать в таблицу с множеством листов, и кнопка будет находиться на третьем листе, Может где то нужно вписать название листа "service"?

Автор - Markovich
Дата добавления - 14.12.2020 в 19:13
Kuzmich Дата: Понедельник, 14.12.2020, 20:13 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
мне нужно оставаться на листе service (с кнопкой)
для этого я удалил строку .Activate

Правильно
Цитата
таких аналогичных генераторов мне нужно три

Покажите в примере, где границы для каждого генератора и куда заносить случайный диапазон чисел
Цитата
в каком месте задается лист с исходными данными "service"

У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса
 
Ответить
Сообщение
Цитата
мне нужно оставаться на листе service (с кнопкой)
для этого я удалил строку .Activate

Правильно
Цитата
таких аналогичных генераторов мне нужно три

Покажите в примере, где границы для каждого генератора и куда заносить случайный диапазон чисел
Цитата
в каком месте задается лист с исходными данными "service"

У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса

Автор - Kuzmich
Дата добавления - 14.12.2020 в 20:13
Markovich Дата: Понедельник, 14.12.2020, 23:03 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса


А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"? Смысл в том что данные у меня вводятся на одном листе, там же и кнопка расположена, а их обработка происходит на других листах. сделано так, чтобы не сбивались формулы при добавлении/удалении строк и не лист не был перегружен множеством формул
 
Ответить
Сообщение
У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса


А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"? Смысл в том что данные у меня вводятся на одном листе, там же и кнопка расположена, а их обработка происходит на других листах. сделано так, чтобы не сбивались формулы при добавлении/удалении строк и не лист не был перегружен множеством формул

Автор - Markovich
Дата добавления - 14.12.2020 в 23:03
Kuzmich Дата: Понедельник, 14.12.2020, 23:36 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"

Можно, но макрос тогда надо запускать из меню Сервис -> Макрос при активном листе "service"
Хотя вы писали
Цитата
мне нужно оставаться на листе service (с кнопкой)

Так где же будет кнопка?
 
Ответить
Сообщение
Цитата
А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"

Можно, но макрос тогда надо запускать из меню Сервис -> Макрос при активном листе "service"
Хотя вы писали
Цитата
мне нужно оставаться на листе service (с кнопкой)

Так где же будет кнопка?

Автор - Kuzmich
Дата добавления - 14.12.2020 в 23:36
Markovich Дата: Вторник, 15.12.2020, 12:02 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Покажите в примере, где границы для каждого генератора и куда заносить случайный диапазон чисел

Так где же будет кнопка?

Kuzmich, извиняюсь за неполное объяснение того как должен в идеале работать макрос генератора. Честно говоря, надеялся самостоятельно доработать полученный от Вас макрос до требуемых результатов, но переоценил свои возможности, к сожалению не хватает знаний VBA. Приходится всецело уповать на помощь. Во вложении образец как в итоге хотелось бы, чтобы работали генераторы. Пояснения к вложению:
- генератор1. границы берутся из столбцов G и H листа "service" и генерируются в столбец B листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка находится на листе "Технические сведения";
- генератор2. границы берутся только от J11 до K11 листа "service" и генерируются в столбец D листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка та же что и для генератора1,3 на листе "Технические сведения";
- генератор3. границы константа (например от 100 до 200) и генерируются в столбец F листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка та же что и для генератора1,2 на листе "Технические сведения";
- генератор4. границы константа (например от 50 до 100) и генерируются в столбец H листа "service1", начиная со строки 11 до строки с номером из ячейки A5 листа "service2". Кнопка находится на листе "данные"
Получается одна кнопка на листе "Технические сведения" для генераторов 1,2,3 и вторая на листе "данные" для генератора4
К сообщению приложен файл: 2889060.xls (51.0 Kb)
 
Ответить
Сообщение
Покажите в примере, где границы для каждого генератора и куда заносить случайный диапазон чисел

Так где же будет кнопка?

Kuzmich, извиняюсь за неполное объяснение того как должен в идеале работать макрос генератора. Честно говоря, надеялся самостоятельно доработать полученный от Вас макрос до требуемых результатов, но переоценил свои возможности, к сожалению не хватает знаний VBA. Приходится всецело уповать на помощь. Во вложении образец как в итоге хотелось бы, чтобы работали генераторы. Пояснения к вложению:
- генератор1. границы берутся из столбцов G и H листа "service" и генерируются в столбец B листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка находится на листе "Технические сведения";
- генератор2. границы берутся только от J11 до K11 листа "service" и генерируются в столбец D листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка та же что и для генератора1,3 на листе "Технические сведения";
- генератор3. границы константа (например от 100 до 200) и генерируются в столбец F листа "service1", начиная со строки 11 до строки с номером из ячейки A3 листа "service". Кнопка та же что и для генератора1,2 на листе "Технические сведения";
- генератор4. границы константа (например от 50 до 100) и генерируются в столбец H листа "service1", начиная со строки 11 до строки с номером из ячейки A5 листа "service2". Кнопка находится на листе "данные"
Получается одна кнопка на листе "Технические сведения" для генераторов 1,2,3 и вторая на листе "данные" для генератора4

Автор - Markovich
Дата добавления - 15.12.2020 в 12:02
Kuzmich Дата: Вторник, 15.12.2020, 13:18 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
одна кнопка на листе "Технические сведения" для генераторов 1,2,3

Макрос для этой кнопки
[vba]
Код
Sub random_service_Генератор_()
Dim Srv As Worksheet
Dim Srv1 As Worksheet
Dim i As Long
Set Srv = ThisWorkbook.Worksheets("service")
Set Srv1 = ThisWorkbook.Worksheets("service1")
  Srv.Activate
With Srv1
  For i = 11 To Range("A3")
    Randomize
    'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
    .Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
    .Cells(i, "D") = Int((Cells(11, "K") - Cells(11, "J") + 1) * Rnd + Cells(11, "J"))
    .Cells(i, "F") = Int((100 - 50 + 1) * Rnd + 50)
  Next
    .Activate
End With
End Sub
[/vba]
Для Генератора4 по аналогии
 
Ответить
Сообщение
Цитата
одна кнопка на листе "Технические сведения" для генераторов 1,2,3

Макрос для этой кнопки
[vba]
Код
Sub random_service_Генератор_()
Dim Srv As Worksheet
Dim Srv1 As Worksheet
Dim i As Long
Set Srv = ThisWorkbook.Worksheets("service")
Set Srv1 = ThisWorkbook.Worksheets("service1")
  Srv.Activate
With Srv1
  For i = 11 To Range("A3")
    Randomize
    'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
    .Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
    .Cells(i, "D") = Int((Cells(11, "K") - Cells(11, "J") + 1) * Rnd + Cells(11, "J"))
    .Cells(i, "F") = Int((100 - 50 + 1) * Rnd + 50)
  Next
    .Activate
End With
End Sub
[/vba]
Для Генератора4 по аналогии

Автор - Kuzmich
Дата добавления - 15.12.2020 в 13:18
Markovich Дата: Вторник, 15.12.2020, 13:55 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Здорово! То что нужно! Только еще есть пара вопросов... Что нужно сделать, чтобы остаться на листе с кнопкой? Если убираю .Activate, то переходит на лист service. и не очень понятен синтаксис:
.Cells(i, "F") = Int((100 - 50 + 1) * Rnd + 50)
т.е, если мне нужен диапазон от 20 до 30, то строка будет такого вида:
.Cells(i, "F") = Int((30 - 20 + 1) * Rnd + 20)

Огромное Вам спасибо за помощь!
 
Ответить
СообщениеЗдорово! То что нужно! Только еще есть пара вопросов... Что нужно сделать, чтобы остаться на листе с кнопкой? Если убираю .Activate, то переходит на лист service. и не очень понятен синтаксис:
.Cells(i, "F") = Int((100 - 50 + 1) * Rnd + 50)
т.е, если мне нужен диапазон от 20 до 30, то строка будет такого вида:
.Cells(i, "F") = Int((30 - 20 + 1) * Rnd + 20)

Огромное Вам спасибо за помощь!

Автор - Markovich
Дата добавления - 15.12.2020 в 13:55
Pelena Дата: Вторник, 15.12.2020, 13:57 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19165
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Markovich, оформите строчки кода тегами, для этого в режиме правки поста выделите и нажмите кнопку #


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеMarkovich, оформите строчки кода тегами, для этого в режиме правки поста выделите и нажмите кнопку #

Автор - Pelena
Дата добавления - 15.12.2020 в 13:57
Markovich Дата: Вторник, 15.12.2020, 14:01 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
[vba]
Код
Sub random_service_Генератор_()
Dim Srv As Worksheet
Dim Srv1 As Worksheet
Dim i As Long
Set Srv = ThisWorkbook.Worksheets("service")
Set Srv1 = ThisWorkbook.Worksheets("service1")
Set tech = ThisWorkbook.Worksheets("Технические сведения")
Srv.Activate
With Srv1
For i = 11 To Range("A3")
Randomize
'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
.Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
.Cells(i, "D") = Int((Cells(11, "K") - Cells(11, "J") + 1) * Rnd + Cells(11, "J"))
.Cells(i, "F") = Int((30 - 20 + 1) * Rnd + 20)
Next
tech.Activate
End With
End Sub
[/vba]


Сообщение отредактировал Markovich - Вторник, 15.12.2020, 15:06
 
Ответить
Сообщение[vba]
Код
Sub random_service_Генератор_()
Dim Srv As Worksheet
Dim Srv1 As Worksheet
Dim i As Long
Set Srv = ThisWorkbook.Worksheets("service")
Set Srv1 = ThisWorkbook.Worksheets("service1")
Set tech = ThisWorkbook.Worksheets("Технические сведения")
Srv.Activate
With Srv1
For i = 11 To Range("A3")
Randomize
'СЛУЧ_МЕЖДУ = Int((верх_граница - нижн_граница + 1) * Rnd + нижн_граница)
.Cells(i, "B") = Int((Cells(i, "H") - Cells(i, "G") + 1) * Rnd + Cells(i, "G"))
.Cells(i, "D") = Int((Cells(11, "K") - Cells(11, "J") + 1) * Rnd + Cells(11, "J"))
.Cells(i, "F") = Int((30 - 20 + 1) * Rnd + 20)
Next
tech.Activate
End With
End Sub
[/vba]

Автор - Markovich
Дата добавления - 15.12.2020 в 14:01
Kuzmich Дата: Вторник, 15.12.2020, 14:05 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Копировать и вставлять нужно при русской раскладке клавиатуры
Цитата
Что нужно сделать, чтобы остаться на листе с кнопкой?

Можно исправить в макросе так
[vba]
Код
'.Activate
    ThisWorkbook.Worksheets("Технические сведения").Activate
[/vba]
 
Ответить
СообщениеКопировать и вставлять нужно при русской раскладке клавиатуры
Цитата
Что нужно сделать, чтобы остаться на листе с кнопкой?

Можно исправить в макросе так
[vba]
Код
'.Activate
    ThisWorkbook.Worksheets("Технические сведения").Activate
[/vba]

Автор - Kuzmich
Дата добавления - 15.12.2020 в 14:05
Markovich Дата: Вторник, 15.12.2020, 14:11 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Как оперативно Вы отвечаете! Пока тупил с кодировкой, Вы уже ответили. Еще раз большое Вам спасибо, с наступающими праздниками и "сбычи мечт"!
 
Ответить
СообщениеКак оперативно Вы отвечаете! Пока тупил с кодировкой, Вы уже ответили. Еще раз большое Вам спасибо, с наступающими праздниками и "сбычи мечт"!

Автор - Markovich
Дата добавления - 15.12.2020 в 14:11
китин Дата: Вторник, 15.12.2020, 14:45 | Сообщение № 14
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Markovich, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеMarkovich, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - китин
Дата добавления - 15.12.2020 в 14:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос генерирования случайных чисел в n-количество ячеек (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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