Доброго времени суток, уважаемые форумчане! Пользуюсь простейшим макросом ГСЧ с изменяемым диапазоном генерирования. Возникла необходимость его доработать, но не хватает знаний по VBA. Нужно, чтобы случайные числа генерировались на другой лист (service1) c изменяемым диапазоном ячеек, т.е. генерация в ячейки, начиная с B11 до ячейки B(n), n-берется из ячейки A3 листа service. Буду благодарен за любую помощь в решении задачи.
Доброго времени суток, уважаемые форумчане! Пользуюсь простейшим макросом ГСЧ с изменяемым диапазоном генерирования. Возникла необходимость его доработать, но не хватает знаний по VBA. Нужно, чтобы случайные числа генерировались на другой лист (service1) c изменяемым диапазоном ячеек, т.е. генерация в ячейки, начиная с B11 до ячейки B(n), n-берется из ячейки A3 листа service. Буду благодарен за любую помощь в решении задачи.Markovich
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
Работает как надо. Мир не без добрых людей. Kuzmich, большое Вам спасибо!!! Не сочтите за наглость, есть у меня есть несколько вопросов: после выполнения макроса мне нужно оставаться на листе service (с кнопкой), для этого я удалил строку .Activate, вроде работает. Так правильно поступить или это некорректное действие? И еще... таких аналогичных генераторов мне нужно три (с разными конечно адресами). Как правильно их склеить в один макрос, или лучше три разных макроса прописать в четвертом и его выполнять? В каком случае они отработают быстрее, если будут работать одновременно или последовательно один за другим? И еще вопрос возник, а в каком месте задается лист с исходными данными "service", вот целевой "service1" видно где? Макрос буду интегрировать в таблицу с множеством листов, и кнопка будет находиться на третьем листе, Может где то нужно вписать название листа "service"?
Работает как надо. Мир не без добрых людей. Kuzmich, большое Вам спасибо!!! Не сочтите за наглость, есть у меня есть несколько вопросов: после выполнения макроса мне нужно оставаться на листе service (с кнопкой), для этого я удалил строку .Activate, вроде работает. Так правильно поступить или это некорректное действие? И еще... таких аналогичных генераторов мне нужно три (с разными конечно адресами). Как правильно их склеить в один макрос, или лучше три разных макроса прописать в четвертом и его выполнять? В каком случае они отработают быстрее, если будут работать одновременно или последовательно один за другим? И еще вопрос возник, а в каком месте задается лист с исходными данными "service", вот целевой "service1" видно где? Макрос буду интегрировать в таблицу с множеством листов, и кнопка будет находиться на третьем листе, Может где то нужно вписать название листа "service"?Markovich
Сообщение отредактировал Markovich - Понедельник, 14.12.2020, 19:37
У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса
А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"? Смысл в том что данные у меня вводятся на одном листе, там же и кнопка расположена, а их обработка происходит на других листах. сделано так, чтобы не сбивались формулы при добавлении/удалении строк и не лист не был перегружен множеством формул
У вас макрос привязан к кнопке на листе "service", поэтому он будет активным при запуске макроса
А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу "service"? Смысл в том что данные у меня вводятся на одном листе, там же и кнопка расположена, а их обработка происходит на других листах. сделано так, чтобы не сбивались формулы при добавлении/удалении строк и не лист не был перегружен множеством формулMarkovich
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
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 и вторая на листе "данные" для генератора4Markovich
одна кнопка на листе "Технические сведения" для генераторов 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
Здорово! То что нужно! Только еще есть пара вопросов... Что нужно сделать, чтобы остаться на листе с кнопкой? Если убираю .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)
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]
[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
Как оперативно Вы отвечаете! Пока тупил с кодировкой, Вы уже ответили. Еще раз большое Вам спасибо, с наступающими праздниками и "сбычи мечт"!
Как оперативно Вы отвечаете! Пока тупил с кодировкой, Вы уже ответили. Еще раз большое Вам спасибо, с наступающими праздниками и "сбычи мечт"!Markovich