Здравствуйте! Подскажите, пожалуйста, как сделать случайную выборку без повторений.Т.е в каждом варианте не должно быть одинаковых вопросов. Прилагаю файл
Здравствуйте! Подскажите, пожалуйста, как сделать случайную выборку без повторений.Т.е в каждом варианте не должно быть одинаковых вопросов. Прилагаю файлSSV
Ну Вы бы хоть внутри файла объяснили что к чему в каком столбце... Если предположить, что в жёлтом столбце у Вас номера вопросов, то яснее не становится, т.к. в варианте 1 вопрос 27 повторяется 2 раза, в варианте 2 вопросы 8, 13, 23 - по 2 раза, в варианте 3 вопрос 11 - 3 раза, 29 - 2 раза Т.е. Ваш пример - это пример того, как не должно быть что ли?
Ну Вы бы хоть внутри файла объяснили что к чему в каком столбце... Если предположить, что в жёлтом столбце у Вас номера вопросов, то яснее не становится, т.к. в варианте 1 вопрос 27 повторяется 2 раза, в варианте 2 вопросы 8, 13, 23 - по 2 раза, в варианте 3 вопрос 11 - 3 раза, 29 - 2 раза Т.е. Ваш пример - это пример того, как не должно быть что ли?Alex_ST
На листе "AI" перечень вопросов (всего 36) , в программе (макросом)я задаю, что надо сформировать 3 варианта по 15 вопросов. эти 15 вопросов задаются случайной выборкой из 36 вопрсов. все работает как надо, только в каждом варианте попадаются одинаковые вопросы. Вопросы в разных вариантах могут повторяться, а в самом варианте не должно быть повторений....
На листе "AI" перечень вопросов (всего 36) , в программе (макросом)я задаю, что надо сформировать 3 варианта по 15 вопросов. эти 15 вопросов задаются случайной выборкой из 36 вопрсов. все работает как надо, только в каждом варианте попадаются одинаковые вопросы. Вопросы в разных вариантах могут повторяться, а в самом варианте не должно быть повторений....SSV
К сожалению, сейчас жуткий завал на работе, да и все примеры у меня там на компе. А дома, уж извините, не до программирования. Но я вспомнил, что здесь на форуме выкладывал пример, выводящий не повторяющийся случайный набор чисел. Поискал. Нашёл здесь. Так как код там без комментариев, повторю здесь, добавив комментарии: [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]
Код
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
Случайной будет только целая часть, а к ней добавляем уникальный десятичный довесок, полученный из номера строки (ну или столбца, как список расположен).
Случайной будет только целая часть, а к ней добавляем уникальный десятичный довесок, полученный из номера строки (ну или столбца, как список расположен).Формуляр
Думаю, что гарантии нет, в пределах 1000 подряд идущих ячеек совпадений не будет, т.к. в дробях ячейки отличаются на 0,001 между собой, а вот с шагом через тысячу ячеек совпадения могут быть
Цитата (Alex_ST)
вернёт уникальных значений?
Думаю, что гарантии нет, в пределах 1000 подряд идущих ячеек совпадений не будет, т.к. в дробях ячейки отличаются на 0,001 между собой, а вот с шагом через тысячу ячеек совпадения могут бытьMCH
В данном случае гарантирована уникальность дробной части, т.к. переодичность тригонометрических функций не совпадает с целочисленным счетом Кроме того, не возникает приоритетности вышестоящих чисел над нижестоящимии при равности целой части, сгенерированной через СЛЧИС()
Можно немного модернизировать формулу:
Код
=ЦЕЛОЕ(1000000*СЛЧИС())+1+SIN(СТРОКА())
В данном случае гарантирована уникальность дробной части, т.к. переодичность тригонометрических функций не совпадает с целочисленным счетом Кроме того, не возникает приоритетности вышестоящих чисел над нижестоящимии при равности целой части, сгенерированной через СЛЧИС()MCH
Сообщение отредактировал MCH - Четверг, 30.05.2013, 12:22
Всем большое спасибо! Но у меня возникла еще одна трудность ...как найти в word последннюю заполненную строчку (необходимо прописать членов комиссии)
Всем большое спасибо! Но у меня возникла еще одна трудность ...как найти в word последннюю заполненную строчку (необходимо прописать членов комиссии)DON
Ну задача от ТСа - она и есть. 36 - это число уникальных вопросов, которые существуют. И нам надо выбрать случайно 15 из них без повторений. Интересно, можно ли без макроса умудриться решить?
Цитата
Что за задача? Почему в этой теме?
Ну задача от ТСа - она и есть. 36 - это число уникальных вопросов, которые существуют. И нам надо выбрать случайно 15 из них без повторений. Интересно, можно ли без макроса умудриться решить?wowik
Функция СЛЧИС() на миллион (а скорее всего и миллиард вариантов) не даст повторов. Там все таки 14 (или 15?) знаков после запятой. Вот случмежду() - другое дело.
Цитата (wowik)
Интересно, можно ли без макроса умудриться решить?
Можно. А нужно?
Функция СЛЧИС() на миллион (а скорее всего и миллиард вариантов) не даст повторов. Там все таки 14 (или 15?) знаков после запятой. Вот случмежду() - другое дело.
Цитата (wowik)
Интересно, можно ли без макроса умудриться решить?