Excel генератор случайных чисел в макросе

Генератор случайных чисел в VBA Excel. Функция Rnd, оператор Randomize, функция рабочего листа RandBetween. Синтаксис, параметры, примеры кода.

Rnd – это функция, которая возвращает значение типа Single, содержащее псевдослучайное число меньшее 1, но большее или равное нулю.

Псевдослучайное число отличается от случайного тем, что оно получено с помощью алгоритма, который, в любом случае, подчиняется какой-либо закономерности. Для решения большинства, а возможно и всех, задач в VBA Excel псевдослучайное число можно считать случайным.

Синтаксис

Rnd[(Число)]

Число – необязательный параметр, определяющий алгоритм вычисления псевдослучайного числа. Зависимость случайного числа от этого параметра:

Число Возвращаемое значение
Меньше нуля Одно и то же псевдослучайное число каждый раз, как результат использования параметра Число в качестве начального значения для алгоритма
Больше нуля Каждое следующее число в псевдослучайном порядке
Равно нулю Самое последнее псевдослучайное число, созданное функцией Rnd
По умолчанию Каждое следующее число в псевдослучайном порядке

Для любого параметра Число создается одна и та же последовательность чисел, так как каждый последующий вызов функции Rnd использует предыдущее значение в качестве начального для следующего псевдослучайного числа в последовательности.

Функция Rnd – это и есть простейший генератор случайных чисел в VBA Excel, возвращающий значения в интервале 0<=Rnd<1.

Чтобы повысить «случайность» псевдослучайных чисел, возвращаемых функцией Rnd, используется оператор Randomize.

Оператор Randomize

Randomize – это оператор, который инициализирует генератор случайных чисел функции Rnd, задавая начальное число для генерации первого псевдослучайного числа.

Синтаксис

Randomize[Число]

Число – необязательный параметр, задающий начальное число для генерации. Если параметр Число опущен, используется значение, возвращенное системным таймером.

При повторном использовании в VBA Excel оператора Randomize с тем же значением аргумента Число предыдущая последовательность не повторяется.

Для повторения предыдущей последовательности случайных чисел необходимо непосредственно перед оператором Randomize с тем же значением аргумента Число вызвать функцию Rnd с отрицательным аргументом.

WorksheetFunction.RandBetween

RandBetween – функция рабочего листа, возвращающая целое случайное число в пределах заданного диапазона значений.

Синтаксис

WorksheetFunction.RandBetween(Arg1, Arg2)

  • Arg1 – наименьшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр);
  • Arg2 – наибольшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр).

Примеры записи строк с WorksheetFunction.RandBetween в VBA Excel (присвоение случайного числа переменной):

a = WorksheetFunction.RandBetween(65, 15)

a = WorksheetFunction.RandBetween(5, 145)

Если данную функцию вставить в ячейку рабочего листа, например: =СЛУЧМЕЖДУ(25;55), случайное число будет обновляться при каждом пересчете листа.

Примеры с Rnd и Randomize

Пример 1
Запускаем генератор случайных чисел функции Rnd с разными параметрами и выводим результаты на рабочий лист Excel:

Sub Primer1()

Dim i As Byte

  Cells(1, 1) = «Rnd(-5)»

    For i = 2 To 5

      Cells(i, 1) = Rnd(5)

    Next

  Cells(1, 2) = «Rnd(3)»

    For i = 2 To 5

      Cells(i, 2) = Rnd(3)

    Next

  Cells(1, 3) = «Rnd(0)»

    For i = 2 To 5

      Cells(i, 3) = Rnd(0)

    Next

End Sub

Получаем следующий результат:

Случайные числа, возвращаемые функцией Rnd с разными аргументами

Пример 2
Повторное использование оператора Randomize с тем же значением аргумента Число:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Sub Primer2()

Dim i As Byte

  Cells(1, 1) = «Последовательность 1»

  Rnd (1)

  Randomize 4

    For i = 2 To 5

      Cells(i, 1) = Rnd

    Next

  Cells(1, 2) = «Последовательность 2»

  Randomize 4

    For i = 2 To 5

      Cells(i, 2) = Rnd

    Next

  Cells(1, 3) = «Последовательность 3»

  Rnd (1)

  Randomize 4

    For i = 2 To 5

      Cells(i, 3) = Rnd

    Next

End Sub

Строка кода Rnd (-1) обеспечивает генерацию последовательности случайных чисел сначала при повторных использованиях оператора Randomize.

Повторное использование оператора Randomize при генерации случайных чисел

Строка кода Randomize 4 перед заполнением второго столбца не влияет на работу функции Rnd, а заполнение последовательности для третьего столбца начинается заново благодаря строке Rnd (-1) перед оператором Randomize.

Пример 3
Создание генераторов случайных чисел для разных диапазонов. Исходим из того, что функция Rnd генерирует псевдослучайную последовательность из чисел меньше 1, но больше или равным 0.

Примеры с положительными случайными числами:

‘От 0 (включительно) до 10

  10 * Rnd

‘От 6 (включительно) до 7

  Rnd + 6

‘От 5 (включительно) до 10

  5 * Rnd + 5

Примеры с отрицательными случайными числами:

‘От -10 до 0 (включительно)

  10 * Rnd

‘От -10 до 10 (включительно)

  20 * Rnd + 10

‘От -10 до -5 (включительно)

  (5 * Rnd + 5)

Пример заполнения ячеек положительными и отрицательными случайными числами на листе Excel:

Sub Primer3()

Dim i As Byte

  Cells(1, 1) = «От 1 до 3»

    For i = 2 To 9

      Cells(i, 1) = 2 * Rnd + 1

    Next

  Cells(1, 2) = «От -5 до 5»

    For i = 2 To 9

      Cells(i, 2) = 10 * Rnd + 5

    Next

  Cells(1, 3) = «От -5 до -2»

    For i = 2 To 9

      Cells(i, 3) = 3 * Rnd 2

    Next

End Sub

Результат выполнения кода VBA Excel третьего примера:

Примеры положительных и отрицательных случайных чисел

Случайные числа без повторов

Постановка задачи

Предположим, что нам необходимо создать набор целых случайных чисел без повторов в заданном интервале значений. Примеры с ходу:

  • генерация уникальных случайных кодов для товаров или пользователей
  • назначение людей на задачи (каждому по случайной из списка)
  • перестановки слов в поисковом запросе (привет seo-шникам)
  • игра в лото и т.д.

Способ 1. Простой

Для начала рассмотрим простой вариант: нам необходимо получить случайный набор из 10 целых чисел от 1 до 10. Использование встроенной в Excel функции СЛУЧМЕЖДУ (RANDBETWEEN) уникальности не гарантирует. Если ввести ее в ячейку листа и скопировать вниз на 10 ячеек, то запросто могут случиться повторы:

random-unique3.png

Поэтому мы пойдем другим путем.

Во всех версиях Excel есть функция РАНГ (RANG), предназначенная для ранжирования или, другими словами, определения топовой позиции числа в наборе. Для самого большого числа в списке ранг=1, второе в топе имеет ранг=2 и т.д.

Введем в ячейку А2 функцию СЛЧИС (RAND) без аргументов и скопируем формулу вниз на 10 ячеек. Эта функция сгенерирует нам набор из 10 случайных дробных чисел от 0 до 1:

random-unique1.png

В соседний столбец введем функцию РАНГ, чтобы определить позицию в рейтинге для каждого полученного случайного числа:

random-unique2.png

Получим в столбце В то, что хотели — любое нужное количество неповторяющихся случайных целых чисел от 1 до 10.

Чисто теоретически, может возникнуть ситуация, когда СЛЧИС выдаст нам два одинаковых случайных числа в столбце А, их ранги совпадут и мы получим повтор в столбце В. Однако, вероятность такого сценария крайне мала, учитывая тот факт, что точность составляет 15 знаков после запятой.

Способ 2. Сложный

Этот способ чуть сложнее, но использует всего одну формулу массива. Допустим, нам нужно создать на листе список из 9 неповторяющихся случайных целых чисел в интервале от 1 до 50.

Введите в ячейку А2 следующую формулу, нажмите в конце Ctrl+Shift+Enter (чтобы ввести ее как формулу массива!) и скопируйте формулу вниз на требуемое количество ячеек:

random-unique4.png

Способ 3. Макрос

Ну и, конечно, можно решить задачу с помощью программирования на Visual Basic. В одной из старых статей про случайную выборку я уже приводил  макро-функцию массива Lotto, которая выдает требуемое количество случайных неповторяющихся чисел из заданного интервала.

Ссылки по теме

  • Как подсчитать количество уникальных значений в диапазоне
  • Случайная выборка элементов из списка

excel random numberGenerating random numbers in Excel can be useful for a number of applications, from statistical sampling to computer simulation.  Even gambling.   Sometimes an unpredictable result is exactly what you need.  In Excel, there are several ways to generate random numbers depending on your requirements and skill level.  The first thing we’ll look at is the RAND function and some of its variations.  Once we have that down, we’ll write a simple macro to generate random numbers, too.  Ultimately, macros will give you the most comprehensive power, and you can learn all about their amazing capabilities in this macro and VBA tutorial.

The most common random number generator (RNG) in Excel is the RAND function.  There are two ways to enter RAND.  Because it’s such a short function, typing it manually is arguably the quickest, and a general rule of thumb is to learn the long-hand version first, thereby making you worthy of the shortcut.  The RAND syntax is: =rand().  See?  It’s practically a shortcut already.  Note: in the newer versions of Excel, as you begin to type, you will be provided with a list of relevant functions to choose from:

Screen Shot 2013-12-12 at 5.37.51 PM

You can also use the Formula Builder to insert RAND.  Even if you decide to enter RAND manually, the Formula Builder is an invaluable tool to easily and reliably attach longer, more difficult formulas.  To locate the Formula Builder, click on the Formulas tab on your Ribbon bar (the Ribbon bar is the green (Excel 2011) bar with a Home tab on its extreme left side):

Screen Shot 2013-12-12 at 7.05.16 PM

Find and click on the Formula Builder button that appears below.  This will bring up a dialogue box:

Screen Shot 2013-12-12 at 7.06.56 PM

Type in “rand” in the search bar and hit enter.  Several options should appear, but the ones in which we are most interested are RAND and RANDBETWEEN.  For now, double-click RAND.  It will be entered into the cell you preselected.  Tab over and a number between 0 and 1 will be generated in the cell; this is what RAND does, every time.  You can drag the fill handle to the range that you want to contain this formula:

Screen Shot 2013-12-12 at 7.13.35 PM

For generating numbers between 0 and numbers greater or less than 1, modify the RAND syntax in the following way: =rand()*x, in which “x” is a number of your choosing.  To generate numbers between 0 and 50, your syntax should look like this: =rand()*50.

For generating random numbers in absolutely any range of your choosing, you will use the RANDBETWEEN function.  This can be found in your formula builder, or you can quickly enter it manually: =randbetween(x,y), in which “x” is the bottom number and “y” the top number.  You’re probably getting the picture by now, but if you want to generate numbers between 35 and 75, your function should look like this: =randbetween(35,75).  And again, simply drag the fill handle over your desired range.

Now, let’s look at something a little more advanced.  First, we have to locate the macro builder.

  • Click Excel on the title bar
  • Go to Preferences
  • Under Sharing and Privacy, click Ribbon
  • There will be a list: Tab or Group Titles.  Scroll down until you see Developer and select it.

Your Ribbon bar will now display a Developer tab, and this is where you will find Macros (second from the left):

Screen Shot 2013-12-12 at 7.16.01 PM

Click on Macros to launch the Macro dialogue box.  Name your macro GenerateRandom and click Create:

Screen Shot 2013-12-12 at 5.54.41 PM

This is the code you will write (or copy/paste) into the field:

Screen Shot 2013-12-12 at 5.51.56 PM

This one is pretty self-explanatory.  Once we run the macro, we can expect random numbers between 0 and 1 to generate in rows 1-100 in column A.

So.  To run the macro, exit the Macro dialogue box.  Now all you have to do is click Macros again, select GenerateRandom from your list, and hit Run:

Screen Shot 2013-12-12 at 8.11.26 PM

Every time you run the macro, the numbers will re-generate.  You can see how useful this would be if you wanted to generate, say, ten-thousand random numbers.  You can also see how, with a few small modifications, anyone can tailor a simple piece of code to accomplish a variety of tasks.  People have written millions of macros and proudly display them online for public use.  Have some fun Googling cool Excel macros and see what you discover.  Often you can just cut and paste someone else’s hard work and instantly own an awesome, complex piece of code.  Learning to write your own macros is time well spent, but you’re likely to need more than a Google search.

Macros have you stressed?  Become a Zen Master of data (yes, they actually exist) and bridge the gap between “data” and “insight.”

У нас есть последовательность чисел, состоящая из практически независимых элементов, которые подчиняются заданному распределению. Как правило, равномерному распределению.

Сгенерировать случайные числа в Excel можно разными путями и способами. Рассмотрим только лучше из них.

Функция случайного числа в Excel

  1. Функция СЛЧИС возвращает случайное равномерно распределенное вещественное число. Оно будет меньше 1, больше или равно 0.
  2. Функция СЛУЧМЕЖДУ возвращает случайное целое число.

Рассмотрим их использование на примерах.

Выборка случайных чисел с помощью СЛЧИС

Данная функция аргументов не требует (СЛЧИС()).

Чтобы сгенерировать случайное вещественное число в диапазоне от 1 до 5, например, применяем следующую формулу: =СЛЧИС()*(5-1)+1.

СЛЧИС.

Возвращаемое случайное число распределено равномерно на интервале [1,10].

При каждом вычислении листа или при изменении значения в любой ячейке листа возвращается новое случайное число. Если нужно сохранить сгенерированную совокупность, можно заменить формулу на ее значение.

  1. Щелкаем по ячейке со случайным числом.
  2. В строке формул выделяем формулу.
  3. Нажимаем F9. И ВВОД.

Проверим равномерность распределения случайных чисел из первой выборки с помощью гистограммы распределения.

  1. Сформируем «карманы». Диапазоны, в пределах которых будут находиться значения. Первый такой диапазон – 0-0,1. Для следующих – формула =C2+$C$2.
  2. Карманы.

  3. Определим частоту для случайных чисел в каждом диапазоне. Используем формулу массива {=ЧАСТОТА(A2:A201;C2:C11)}.
  4. ЧАСТОТА.

  5. Сформируем диапазоны с помощью знака «сцепления» (=»[0,0-«&C2&»]»).
  6. Диапазоны.

  7. Строим гистограмму распределения 200 значений, полученных с помощью функции СЛЧИС ().

Гистограмма.

Диапазон вертикальных значений – частота. Горизонтальных – «карманы».



Функция СЛУЧМЕЖДУ

Синтаксис функции СЛУЧМЕЖДУ – (нижняя граница; верхняя граница). Первый аргумент должен быть меньше второго. В противном случае функция выдаст ошибку. Предполагается, что границы – целые числа. Дробную часть формула отбрасывает.

Пример использования функции:

СЛУЧМЕЖДУ.

Случайные числа с точностью 0,1 и 0,01:

Случайные числа.

Как сделать генератор случайных чисел в Excel

Сделаем генератор случайных чисел с генерацией значения из определенного диапазона. Используем формулу вида: =ИНДЕКС(A1:A10;ЦЕЛОЕ(СЛЧИС()*10)+1).

ИНДЕКС.

Сделаем генератор случайных чисел в диапазоне от 0 до 100 с шагом 10.

Генератор.

Из списка текстовых значений нужно выбрать 2 случайных. С помощью функции СЛЧИС сопоставим текстовые значения в диапазоне А1:А7 со случайными числами.

Список.

Воспользуемся функцией ИНДЕКС для выбора двух случайных текстовых значений из исходного списка.

ИНДЕКС.

Чтобы выбрать одно случайное значение из списка, применим такую формулу: =ИНДЕКС(A1:A7;СЛУЧМЕЖДУ(1;СЧЁТЗ(A1:A7))).

Одно случайное значение.

Генератор случайных чисел нормального распределения

Функции СЛЧИС и СЛУЧМЕЖДУ выдают случайные числа с единым распределением. Любое значение с одинаковой долей вероятности может попасть в нижнюю границу запрашиваемого диапазона и в верхнюю. Получается огромный разброс от целевого значения.

Нормальное распределение подразумевает близкое положение большей части сгенерированных чисел к целевому. Подкорректируем формулу СЛУЧМЕЖДУ и создадим массив данных с нормальным распределением.

Себестоимость товара Х – 100 рублей. Вся произведенная партия подчиняется нормальному распределению. Случайная переменная тоже подчиняется нормальному распределению вероятностей.

При таких условиях среднее значение диапазона – 100 рублей. Сгенерируем массив и построим график с нормальным распределением при стандартном отклонении 1,5 рубля.

Используем функцию: =НОРМОБР(СЛЧИС();100;1,5).

НОРМОБР.

Программа Excel посчитала, какие значения находятся в диапазоне вероятностей. Так как вероятность производства товара с себестоимостью 100 рублей максимальная, формула показывает значения близкие к 100 чаще, чем остальные.

Перейдем к построению графика. Сначала нужно составить таблицу с категориями. Для этого разобьем массив на периоды:

  1. Определим минимальное и максимальное значение в диапазоне с помощью функций МИН и МАКС.
  2. Укажем величину каждого периода либо шаг. В нашем примере – 1.
  3. Количество категорий – 10.
  4. Таблица.

  5. Нижняя граница таблицы с категориями – округленное вниз ближайшее кратное число. В ячейку Н1 вводим формулу =ОКРВНИЗ(E1;E5).
  6. В ячейке Н2 и последующих формула будет выглядеть следующим образом: =ЕСЛИ(G2;H1+$E$5;»»). То есть каждое последующее значение будет увеличено на величину шага.
  7. ЕСЛИ.

  8. Посчитаем количество переменных в заданном промежутке. Используем функцию ЧАСТОТА. Формула будет выглядеть так:

Формула.

На основе полученных данных сможем сформировать диаграмму с нормальным распределением. Ось значений – число переменных в промежутке, ось категорий – периоды.

График.

График с нормальным распределением готов. Как и должно быть, по форме он напоминает колокол.

Сделать то же самое можно гораздо проще. С помощью пакета «Анализ данных». Выбираем «Генерацию случайных чисел».

Анализ данных.

О том как подключить стандартную настройку «Анализ данных» читайте здесь.

Заполняем параметры для генерации. Распределение – «нормальное».

Параметры.

Жмем ОК. Получаем набор случайных чисел. Снова вызываем инструмент «Анализ данных». Выбираем «Гистограмма». Настраиваем параметры. Обязательно ставим галочку «Вывод графика».

Вывод графика.

Получаем результат:

Скачать генератор случайных чисел в Excel

Пример.

График с нормальным распределением в Excel построен.

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

Markovich

Дата: Воскресенье, 13.12.2020, 22:35 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

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

К сообщению приложен файл:

0860032.xls
(47.5 Kb)

 

Ответить

Kuzmich

Дата: Воскресенье, 13.12.2020, 22:53 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
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]

 

Ответить

Markovich

Дата: Понедельник, 14.12.2020, 19:13 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

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

Сообщение отредактировал MarkovichПонедельник, 14.12.2020, 19:37

 

Ответить

Kuzmich

Дата: Понедельник, 14.12.2020, 20:13 |
Сообщение № 4

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Цитата

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

Правильно

Цитата

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

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

Цитата

в каком месте задается лист с исходными данными «service»

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

 

Ответить

Markovich

Дата: Понедельник, 14.12.2020, 23:03 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

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

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

 

Ответить

Kuzmich

Дата: Понедельник, 14.12.2020, 23:36 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Цитата

А возможно макрос привязать не к кнопке, она будет на третьем листе, а именно к листу «service»

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

Цитата

мне нужно оставаться на листе service (с кнопкой)

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

 

Ответить

Markovich

Дата: Вторник, 15.12.2020, 12:02 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

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

Дата: Вторник, 15.12.2020, 13:18 |
Сообщение № 8

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
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 по аналогии

 

Ответить

Markovich

Дата: Вторник, 15.12.2020, 13:55 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

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)

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

 

Ответить

Pelena

Дата: Вторник, 15.12.2020, 13:57 |
Сообщение № 10

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

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


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Markovich

Дата: Вторник, 15.12.2020, 14:01 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

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

 

Ответить

Kuzmich

Дата: Вторник, 15.12.2020, 14:05 |
Сообщение № 12

Группа: Проверенные

Ранг: Ветеран

Сообщений: 707


Репутация:

154

±

Замечаний:
0% ±


Excel 2003

Копировать и вставлять нужно при русской раскладке клавиатуры

Цитата

Что нужно сделать, чтобы остаться на листе с кнопкой?

Можно исправить в макросе так
[vba]

Код

‘.Activate
    ThisWorkbook.Worksheets(«Технические сведения»).Activate

[/vba]

 

Ответить

Markovich

Дата: Вторник, 15.12.2020, 14:11 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

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

 

Ответить

китин

Дата: Вторник, 15.12.2020, 14:45 |
Сообщение № 14

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

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


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel где хранится пароль
  • Excel где найти макрос
  • Excel где найти аргументы функции
  • Excel где найти автосохраненный файл excel
  • Excel где меню файл