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

Вход

Регистрация

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

 

= Мир MS Excel/Excel выборка случайных чисел - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Excel выборка случайных чисел
SSV Дата: Вторник, 28.05.2013, 22:03 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте!
Подскажите, пожалуйста, как сделать случайную выборку без повторений.Т.е в каждом варианте не должно быть одинаковых вопросов.
Прилагаю файл
К сообщению приложен файл: test.xls (67.5 Kb)
 
Ответить
СообщениеЗдравствуйте!
Подскажите, пожалуйста, как сделать случайную выборку без повторений.Т.е в каждом варианте не должно быть одинаковых вопросов.
Прилагаю файл

Автор - SSV
Дата добавления - 28.05.2013 в 22:03
Alex_ST Дата: Вторник, 28.05.2013, 22:32 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3214
Репутация: 615 ±
Замечаний: 0% ±

2003
Ну Вы бы хоть внутри файла объяснили что к чему в каком столбце...
Если предположить, что в жёлтом столбце у Вас номера вопросов, то яснее не становится, т.к. в варианте 1 вопрос 27 повторяется 2 раза, в варианте 2 вопросы 8, 13, 23 - по 2 раза, в варианте 3 вопрос 11 - 3 раза, 29 - 2 раза
Т.е. Ваш пример - это пример того, как не должно быть что ли?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу Вы бы хоть внутри файла объяснили что к чему в каком столбце...
Если предположить, что в жёлтом столбце у Вас номера вопросов, то яснее не становится, т.к. в варианте 1 вопрос 27 повторяется 2 раза, в варианте 2 вопросы 8, 13, 23 - по 2 раза, в варианте 3 вопрос 11 - 3 раза, 29 - 2 раза
Т.е. Ваш пример - это пример того, как не должно быть что ли?

Автор - Alex_ST
Дата добавления - 28.05.2013 в 22:32
SSV Дата: Вторник, 28.05.2013, 22:41 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

На листе "AI" перечень вопросов (всего 36) , в программе (макросом)я задаю, что надо сформировать 3 варианта по 15 вопросов.
эти 15 вопросов задаются случайной выборкой из 36 вопрсов. все работает как надо, только в каждом варианте попадаются одинаковые вопросы. Вопросы в разных вариантах могут повторяться, а в самом варианте не должно быть повторений....
 
Ответить
СообщениеНа листе "AI" перечень вопросов (всего 36) , в программе (макросом)я задаю, что надо сформировать 3 варианта по 15 вопросов.
эти 15 вопросов задаются случайной выборкой из 36 вопрсов. все работает как надо, только в каждом варианте попадаются одинаковые вопросы. Вопросы в разных вариантах могут повторяться, а в самом варианте не должно быть повторений....

Автор - SSV
Дата добавления - 28.05.2013 в 22:41
Alex_ST Дата: Среда, 29.05.2013, 21:40 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3214
Репутация: 615 ±
Замечаний: 0% ±

2003
К сожалению, сейчас жуткий завал на работе, да и все примеры у меня там на компе. А дома, уж извините, не до программирования.
Но я вспомнил, что здесь на форуме выкладывал пример, выводящий не повторяющийся случайный набор чисел.
Поискал. Нашёл здесь.
Так как код там без комментариев, повторю здесь, добавив комментарии:
[vba]
Код
Sub Uniq_Rnd()    ' вывести на лист случайный набор из не повторяющихся чисел
         Const nMin& = 1    ' минимальное число
         Const nMax& = 21    ' максимальное число
         Randomize
         With CreateObject("Scripting.Dictionary")    ' для получения уникальных значений используем словарь
             Do While .Count < (nMax - nMin + 1)    ' выведутся все числа от nMin до nMax. Но вполне можно задать и просто нужное фиксированное количество
                 .Item(Int((nMax - nMin + 1) * Rnd + nMin&)) = 0    ' добавляем записи со значениями 0 и ключами из заданного диапазона чисел.
                 ' Если такой ключ в словаре уже есть, то запись просто перезапишется. Если такого ключа ещё нет, то добавится новая запись
             Loop    ' повторять пока не достигнем заданного числа записей
             ActiveCell.Resize(UBound(.Keys) + 1).Value = Application.WorksheetFunction.Transpose(.Keys)
         End With
End Sub
[/vba]
Сможете сами адаптировать под свои нужды?
Если со словарями не знакомы, то подробно о работе со словарями я рассказывал в топике Dictionary и Collection - это совсем не сложно!



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 29.05.2013, 21:45
 
Ответить
СообщениеК сожалению, сейчас жуткий завал на работе, да и все примеры у меня там на компе. А дома, уж извините, не до программирования.
Но я вспомнил, что здесь на форуме выкладывал пример, выводящий не повторяющийся случайный набор чисел.
Поискал. Нашёл здесь.
Так как код там без комментариев, повторю здесь, добавив комментарии:
[vba]
Код
Sub Uniq_Rnd()    ' вывести на лист случайный набор из не повторяющихся чисел
         Const nMin& = 1    ' минимальное число
         Const nMax& = 21    ' максимальное число
         Randomize
         With CreateObject("Scripting.Dictionary")    ' для получения уникальных значений используем словарь
             Do While .Count < (nMax - nMin + 1)    ' выведутся все числа от nMin до nMax. Но вполне можно задать и просто нужное фиксированное количество
                 .Item(Int((nMax - nMin + 1) * Rnd + nMin&)) = 0    ' добавляем записи со значениями 0 и ключами из заданного диапазона чисел.
                 ' Если такой ключ в словаре уже есть, то запись просто перезапишется. Если такого ключа ещё нет, то добавится новая запись
             Loop    ' повторять пока не достигнем заданного числа записей
             ActiveCell.Resize(UBound(.Keys) + 1).Value = Application.WorksheetFunction.Transpose(.Keys)
         End With
End Sub
[/vba]
Сможете сами адаптировать под свои нужды?
Если со словарями не знакомы, то подробно о работе со словарями я рассказывал в топике Dictionary и Collection - это совсем не сложно!

Автор - Alex_ST
Дата добавления - 29.05.2013 в 21:40
SSV Дата: Четверг, 30.05.2013, 00:30 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Спасибо огромное, завтра буду разбираться)
 
Ответить
СообщениеСпасибо огромное, завтра буду разбираться)

Автор - SSV
Дата добавления - 30.05.2013 в 00:30
Poltava Дата: Четверг, 30.05.2013, 01:18 | Сообщение № 6
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Мой вариант использует коллекции. Но идея со словарями изяшней и непотребует отключать контроль ошибок.
К сообщению приложен файл: testkol.xls (68.0 Kb)
 
Ответить
СообщениеМой вариант использует коллекции. Но идея со словарями изяшней и непотребует отключать контроль ошибок.

Автор - Poltava
Дата добавления - 30.05.2013 в 01:18
SSV Дата: Четверг, 30.05.2013, 08:03 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Спасибо большое!
 
Ответить
СообщениеСпасибо большое!

Автор - SSV
Дата добавления - 30.05.2013 в 08:03
Формуляр Дата: Четверг, 30.05.2013, 10:13 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Цитата (Alex_ST)
вспомнил, что здесь на форуме выкладывал пример, выводящий не повторяющийся случайный набор чисел.

не повторяющийся случайный набор чисел можно получить и без макросов:
Код
= INT(1000000*RAND()) + ROW()/1000


Excel 2003 EN, 2013 EN
 
Ответить
Сообщение
Цитата (Alex_ST)
вспомнил, что здесь на форуме выкладывал пример, выводящий не повторяющийся случайный набор чисел.

не повторяющийся случайный набор чисел можно получить и без макросов:
Код
= INT(1000000*RAND()) + ROW()/1000

Автор - Формуляр
Дата добавления - 30.05.2013 в 10:13
Alex_ST Дата: Четверг, 30.05.2013, 11:59 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3214
Репутация: 615 ±
Замечаний: 0% ±

2003
Цитата (Формуляр)
не повторяющийся случайный набор чисел можно получить и без макросов:
= INT(1000000*RAND()) + ROW()/1000

Саш, разъясни макрописцу, почему формула
Код
=ЦЕЛОЕ(1000000*СЛЧИС()) + СТРОКА()/1000
вернёт уникальных значений?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Цитата (Формуляр)
не повторяющийся случайный набор чисел можно получить и без макросов:
= INT(1000000*RAND()) + ROW()/1000

Саш, разъясни макрописцу, почему формула
Код
=ЦЕЛОЕ(1000000*СЛЧИС()) + СТРОКА()/1000
вернёт уникальных значений?

Автор - Alex_ST
Дата добавления - 30.05.2013 в 11:59
Формуляр Дата: Четверг, 30.05.2013, 12:06 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Случайной будет только целая часть, а к ней добавляем уникальный десятичный довесок, полученный из номера строки (ну или столбца, как список расположен).


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеСлучайной будет только целая часть, а к ней добавляем уникальный десятичный довесок, полученный из номера строки (ну или столбца, как список расположен).

Автор - Формуляр
Дата добавления - 30.05.2013 в 12:06
MCH Дата: Четверг, 30.05.2013, 12:09 | Сообщение № 11
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Цитата (Alex_ST)
вернёт уникальных значений?

Думаю, что гарантии нет, в пределах 1000 подряд идущих ячеек совпадений не будет, т.к. в дробях ячейки отличаются на 0,001 между собой, а вот с шагом через тысячу ячеек совпадения могут быть
 
Ответить
Сообщение
Цитата (Alex_ST)
вернёт уникальных значений?

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

Автор - MCH
Дата добавления - 30.05.2013 в 12:09
Формуляр Дата: Четверг, 30.05.2013, 12:14 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Цитата (MCH)
а вот с шагом через тысячу ячеек совпадения могут быть
Безусловно могут. smile
Это вариант для списка в пределах 1000 строк. Я только принцип хотел изложить.
Нужно мильён - делим на мильён.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Четверг, 30.05.2013, 12:15
 
Ответить
Сообщение
Цитата (MCH)
а вот с шагом через тысячу ячеек совпадения могут быть
Безусловно могут. smile
Это вариант для списка в пределах 1000 строк. Я только принцип хотел изложить.
Нужно мильён - делим на мильён.

Автор - Формуляр
Дата добавления - 30.05.2013 в 12:14
MCH Дата: Четверг, 30.05.2013, 12:18 | Сообщение № 13
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Можно немного модернизировать формулу:
Код
=ЦЕЛОЕ(1000000*СЛЧИС())+1+SIN(СТРОКА())

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


Сообщение отредактировал MCH - Четверг, 30.05.2013, 12:22
 
Ответить
СообщениеМожно немного модернизировать формулу:
Код
=ЦЕЛОЕ(1000000*СЛЧИС())+1+SIN(СТРОКА())

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

Автор - MCH
Дата добавления - 30.05.2013 в 12:18
MCH Дата: Четверг, 30.05.2013, 12:21 | Сообщение № 14
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

А вообще, если не округлять СЛЧИС() то вероятность совпадения практически отсутствует
 
Ответить
СообщениеА вообще, если не округлять СЛЧИС() то вероятность совпадения практически отсутствует

Автор - MCH
Дата добавления - 30.05.2013 в 12:21
DON Дата: Пятница, 14.06.2013, 09:34 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Всем большое спасибо! Но у меня возникла еще одна трудность ...как найти в word последннюю заполненную строчку (необходимо прописать членов комиссии)
 
Ответить
СообщениеВсем большое спасибо! Но у меня возникла еще одна трудность ...как найти в word последннюю заполненную строчку (необходимо прописать членов комиссии)

Автор - DON
Дата добавления - 14.06.2013 в 09:34
Pelena Дата: Пятница, 14.06.2013, 09:51 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 19420
Репутация: 4567 ±
Замечаний: ±

Excel 365 & Mac Excel
DON, какое отношение имеет Ваш вопрос к данной теме?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеDON, какое отношение имеет Ваш вопрос к данной теме?

Автор - Pelena
Дата добавления - 14.06.2013 в 09:51
DON Дата: Пятница, 14.06.2013, 09:57 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Спасибо, все у меня получилось...
Просто эту тему я создавала...
 
Ответить
СообщениеСпасибо, все у меня получилось...
Просто эту тему я создавала...

Автор - DON
Дата добавления - 14.06.2013 в 09:57
wowik Дата: Воскресенье, 16.06.2013, 20:11 | Сообщение № 18
Группа: Пользователи
Ранг: Прохожий
Сообщений: 10
Репутация: 10 ±
Замечаний: 0% ±

Цитата
=ЦЕЛОЕ(1000000*СЛЧИС()) + СТРОКА()/1000


Как эту формулу можно применить к решению нашей задачи про 36 вопросов?
Было бы прикольно суметь решить задачку с помошью формул.
 
Ответить
Сообщение
Цитата
=ЦЕЛОЕ(1000000*СЛЧИС()) + СТРОКА()/1000


Как эту формулу можно применить к решению нашей задачи про 36 вопросов?
Было бы прикольно суметь решить задачку с помошью формул.

Автор - wowik
Дата добавления - 16.06.2013 в 20:11
wowik Дата: Воскресенье, 16.06.2013, 20:36 | Сообщение № 19
Группа: Пользователи
Ранг: Прохожий
Сообщений: 10
Репутация: 10 ±
Замечаний: 0% ±

Цитата
Что за задача? Почему в этой теме?


Ну задача от ТСа - она и есть. 36 - это число уникальных вопросов, которые существуют. И нам надо выбрать случайно 15 из них без повторений.
Интересно, можно ли без макроса умудриться решить?
 
Ответить
Сообщение
Цитата
Что за задача? Почему в этой теме?


Ну задача от ТСа - она и есть. 36 - это число уникальных вопросов, которые существуют. И нам надо выбрать случайно 15 из них без повторений.
Интересно, можно ли без макроса умудриться решить?

Автор - wowik
Дата добавления - 16.06.2013 в 20:36
Michael_S Дата: Воскресенье, 16.06.2013, 23:27 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Функция СЛЧИС() на миллион (а скорее всего и миллиард вариантов) не даст повторов. Там все таки 14 (или 15?) знаков после запятой. Вот случмежду() - другое дело.
Цитата (wowik)
Интересно, можно ли без макроса умудриться решить?
Можно. А нужно?
 
Ответить
СообщениеФункция СЛЧИС() на миллион (а скорее всего и миллиард вариантов) не даст повторов. Там все таки 14 (или 15?) знаков после запятой. Вот случмежду() - другое дело.
Цитата (wowik)
Интересно, можно ли без макроса умудриться решить?
Можно. А нужно?

Автор - Michael_S
Дата добавления - 16.06.2013 в 23:27
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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