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

Вход

Регистрация

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

 

= Мир MS Excel/Рандомизация чисел с ограничением повтора - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Рандомизация чисел с ограничением повтора
mv6677 Дата: Понедельник, 02.10.2017, 21:30 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
Добрый вечер всем.
Подскажите с решением непростого вопроса.

Есть определенный набор чисел: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15.
В ячейке C6 находится формула
Код
=СЛУЧМЕЖДУ(1;15)

В этой формуле - существует вероятность выпадания одного и того же числа подряд ( и вообще чем меньше диапазон чисел - тем больше такая вероятность).

Подскажите как формулой - выводить случайные числа в диапазоне 1-15, с условием, что одно число - не должно выпасть два раза подряд ?
(То есть не должно быть ситуации, когда после выпадания числа 3, при следующем пересчете - выпадет снова 3).
К сообщению приложен файл: 23532697.xls (26.0 Kb)
 
Ответить
СообщениеДобрый вечер всем.
Подскажите с решением непростого вопроса.

Есть определенный набор чисел: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15.
В ячейке C6 находится формула
Код
=СЛУЧМЕЖДУ(1;15)

В этой формуле - существует вероятность выпадания одного и того же числа подряд ( и вообще чем меньше диапазон чисел - тем больше такая вероятность).

Подскажите как формулой - выводить случайные числа в диапазоне 1-15, с условием, что одно число - не должно выпасть два раза подряд ?
(То есть не должно быть ситуации, когда после выпадания числа 3, при следующем пересчете - выпадет снова 3).

Автор - mv6677
Дата добавления - 02.10.2017 в 21:30
_Boroda_ Дата: Понедельник, 02.10.2017, 21:41 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16881
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А после 15 пересчетов что тогда должно быть?
Посмотрите вот этот ответ http://www.excelworld.ru/forum/2-94-1247-16-1288102057 (как давно это было - за него я получил свой первый плюсик в карму на этом форуме)
Файл оттуда приложил
Если так не подойдет, то придется макросом
К сообщению приложен файл: 10__.xls (34.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА после 15 пересчетов что тогда должно быть?
Посмотрите вот этот ответ http://www.excelworld.ru/forum/2-94-1247-16-1288102057 (как давно это было - за него я получил свой первый плюсик в карму на этом форуме)
Файл оттуда приложил
Если так не подойдет, то придется макросом

Автор - _Boroda_
Дата добавления - 02.10.2017 в 21:41
mv6677 Дата: Понедельник, 02.10.2017, 22:14 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, посмотрел на ваш файл. Интересно конечно.
Как я понял в диапазоне A2:A11 - выпадает комбинация чисел, которые не повторяются.

Но там же в нем - может выпасть в одной ячейке - два раза подряд - одно и то же число.

Вот в вашем файле - как запретить ячейке A11 - выдавать одно и то же число - подряд (вразнобой можно, но не подряд) ?
Чтобы невозможна была ситуация - когда при пересчете листа - там (в ячейке A11) могло повторится одно и то же число.
 
Ответить
Сообщение_Boroda_, посмотрел на ваш файл. Интересно конечно.
Как я понял в диапазоне A2:A11 - выпадает комбинация чисел, которые не повторяются.

Но там же в нем - может выпасть в одной ячейке - два раза подряд - одно и то же число.

Вот в вашем файле - как запретить ячейке A11 - выдавать одно и то же число - подряд (вразнобой можно, но не подряд) ?
Чтобы невозможна была ситуация - когда при пересчете листа - там (в ячейке A11) могло повторится одно и то же число.

Автор - mv6677
Дата добавления - 02.10.2017 в 22:14
_Boroda_ Дата: Понедельник, 02.10.2017, 22:17 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16881
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Если так не подойдет, то придется макросом

и
А после 15 пересчетов что тогда должно быть?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Если так не подойдет, то придется макросом

и
А после 15 пересчетов что тогда должно быть?

Автор - _Boroda_
Дата добавления - 02.10.2017 в 22:17
mv6677 Дата: Понедельник, 02.10.2017, 22:29 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
Если так не подойдет, то придется макросом

Так подойдет-то что ?
В вашем файле - каждая ячейка в диапазоне - имеет возможность повтора одного и того же числа - два раза подряд.
Я спрашивал про отсутствие повторов - для хотя бы одной ячейки.
(Повтор - два раза подряд)

А после 15 пересчетов что тогда должно быть?

Не совсем понял этот вопрос.
Формула
Код
=СЛУЧМЕЖДУ(1;15)
может пересчитывать случайное число - не то что 15 раз, а вообще бесконечное количество раз.
После 15-го пересчета - будет такой же пересчет, что и обычно (лишь бы последнее число - не повторялось бы 2 раза подряд).
 
Ответить
Сообщение
Если так не подойдет, то придется макросом

Так подойдет-то что ?
В вашем файле - каждая ячейка в диапазоне - имеет возможность повтора одного и того же числа - два раза подряд.
Я спрашивал про отсутствие повторов - для хотя бы одной ячейки.
(Повтор - два раза подряд)

А после 15 пересчетов что тогда должно быть?

Не совсем понял этот вопрос.
Формула
Код
=СЛУЧМЕЖДУ(1;15)
может пересчитывать случайное число - не то что 15 раз, а вообще бесконечное количество раз.
После 15-го пересчета - будет такой же пересчет, что и обычно (лишь бы последнее число - не повторялось бы 2 раза подряд).

Автор - mv6677
Дата добавления - 02.10.2017 в 22:29
Nic70y Дата: Вторник, 03.10.2017, 08:11 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 9126
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
вариант с "вредными" итеративными вычислениями
Код
=ИНДЕКС(НАИМЕНЬШИЙ(ЕСЛИ(C6<>СТРОКА(1:15);СТРОКА(1:15));СТРОКА(1:15));СЛУЧМЕЖДУ(1;14))

файл заменил, 1-ку забыл
К сообщению приложен файл: 7740555.xls (26.0 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Вторник, 03.10.2017, 08:16
 
Ответить
Сообщениевариант с "вредными" итеративными вычислениями
Код
=ИНДЕКС(НАИМЕНЬШИЙ(ЕСЛИ(C6<>СТРОКА(1:15);СТРОКА(1:15));СТРОКА(1:15));СЛУЧМЕЖДУ(1;14))

файл заменил, 1-ку забыл

Автор - Nic70y
Дата добавления - 03.10.2017 в 08:11
vikttur Дата: Вторник, 03.10.2017, 15:40 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

[vba]
Код
Sub NoDupl()
Const lMin As Long = 1
Const lMax As Long = 15
Dim i As Long, lTemp As Long
    i = [C6]
    Randomize: lTemp = Int(lMax * Rnd + lMin)
    
    If i = lTemp Then
        i = i + 1: If i > lMax Then i = Int((lMax - 1) * Rnd + lMin)
    Else
        i = lTemp
    End If
    
    [C6] = i
End Sub
[/vba]
При совпадении выводится i + 1. Но если совпало максимальное, то выводится любое из диапазона, за исключением максимального
К сообщению приложен файл: rnd.xlsm (13.9 Kb)


Сообщение отредактировал vikttur - Вторник, 03.10.2017, 16:15
 
Ответить
Сообщение[vba]
Код
Sub NoDupl()
Const lMin As Long = 1
Const lMax As Long = 15
Dim i As Long, lTemp As Long
    i = [C6]
    Randomize: lTemp = Int(lMax * Rnd + lMin)
    
    If i = lTemp Then
        i = i + 1: If i > lMax Then i = Int((lMax - 1) * Rnd + lMin)
    Else
        i = lTemp
    End If
    
    [C6] = i
End Sub
[/vba]
При совпадении выводится i + 1. Но если совпало максимальное, то выводится любое из диапазона, за исключением максимального

Автор - vikttur
Дата добавления - 03.10.2017 в 15:40
MCH Дата: Вторник, 03.10.2017, 17:21 | Сообщение № 8
Группа: Админы
Ранг: Старожил
Сообщений: 2008
Репутация: 752 ±
Замечаний: ±

При совпадении выводится i + 1.

немного изменил, чтобы выводилось случайное при любом совпадении
[vba]
Код
Sub NoDupl()
    Const lMin As Long = 1
    Const lMax As Long = 15
    Dim i As Long, lTemp As Long
    Randomize
    lTemp = [C6]
    Do
        i = Int(Rnd * (lMax - lMin + 1) + lMin)
    Loop While i = lTemp
    [C6] = i
End Sub
[/vba]
К сообщению приложен файл: rnd2.xlsm (13.7 Kb)
 
Ответить
Сообщение
При совпадении выводится i + 1.

немного изменил, чтобы выводилось случайное при любом совпадении
[vba]
Код
Sub NoDupl()
    Const lMin As Long = 1
    Const lMax As Long = 15
    Dim i As Long, lTemp As Long
    Randomize
    lTemp = [C6]
    Do
        i = Int(Rnd * (lMax - lMin + 1) + lMin)
    Loop While i = lTemp
    [C6] = i
End Sub
[/vba]

Автор - MCH
Дата добавления - 03.10.2017 в 17:21
MCH Дата: Вторник, 03.10.2017, 17:26 | Сообщение № 9
Группа: Админы
Ранг: Старожил
Сообщений: 2008
Репутация: 752 ±
Замечаний: ±

вариант с "вредными" итеративными вычислениями

с итерациями можно так:
Код
=ОСТАТ(C6+СЛУЧМЕЖДУ(0;13);15)+1


Соответственно макрос из предыдущего сообщения можно переписать:
[vba]
Код
Sub NoDupl()
    Const lMin As Long = 1, lMax As Long = 15
    Randomize
    [C6] = ([C6] - lMin + Int(Rnd * (lMax - lMin) + 1)) Mod (lMax - lMin + 1) + lMin
End Sub
[/vba]
К сообщению приложен файл: rnd3.xlsm (13.7 Kb)
 
Ответить
Сообщение
вариант с "вредными" итеративными вычислениями

с итерациями можно так:
Код
=ОСТАТ(C6+СЛУЧМЕЖДУ(0;13);15)+1


Соответственно макрос из предыдущего сообщения можно переписать:
[vba]
Код
Sub NoDupl()
    Const lMin As Long = 1, lMax As Long = 15
    Randomize
    [C6] = ([C6] - lMin + Int(Rnd * (lMax - lMin) + 1)) Mod (lMax - lMin + 1) + lMin
End Sub
[/vba]

Автор - MCH
Дата добавления - 03.10.2017 в 17:26
mv6677 Дата: Вторник, 03.10.2017, 20:16 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
Nic70y, не работает.
Повторы все-таки случаются
 
Ответить
СообщениеNic70y, не работает.
Повторы все-таки случаются

Автор - mv6677
Дата добавления - 03.10.2017 в 20:16
mv6677 Дата: Вторник, 03.10.2017, 20:22 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
MCH,
с итерациями можно так:

=ОСТАТ(C6+СЛУЧМЕЖДУ(0;13);15)+1

Не работает.
Повторы периодически возникают.
Это, кстати легко проверить - уменьшив диапазон
Код
=ОСТАТ(C6+СЛУЧМЕЖДУ(0;3);5)+1
 
Ответить
СообщениеMCH,
с итерациями можно так:

=ОСТАТ(C6+СЛУЧМЕЖДУ(0;13);15)+1

Не работает.
Повторы периодически возникают.
Это, кстати легко проверить - уменьшив диапазон
Код
=ОСТАТ(C6+СЛУЧМЕЖДУ(0;3);5)+1

Автор - mv6677
Дата добавления - 03.10.2017 в 20:22
Nic70y Дата: Вторник, 03.10.2017, 20:25 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 9126
Репутация: 2415 ±
Замечаний: 0% ±

Excel 2010
1-ку забыл
Вы не забыли?


ЮMoney 41001841029809
 
Ответить
Сообщение
1-ку забыл
Вы не забыли?

Автор - Nic70y
Дата добавления - 03.10.2017 в 20:25
mv6677 Дата: Вторник, 03.10.2017, 21:08 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
Nic70y, признаюсь я не очень силен в формулах.
Подскажите пожалуйста, что означает термин "1-ку" в вашем послании ?

(я запускал формулу из вашего файла, итерации включены)
 
Ответить
СообщениеNic70y, признаюсь я не очень силен в формулах.
Подскажите пожалуйста, что означает термин "1-ку" в вашем послании ?

(я запускал формулу из вашего файла, итерации включены)

Автор - mv6677
Дата добавления - 03.10.2017 в 21:08
MCH Дата: Вторник, 03.10.2017, 22:27 | Сообщение № 14
Группа: Админы
Ранг: Старожил
Сообщений: 2008
Репутация: 752 ±
Замечаний: ±

Сделал небольшой файл-тест
Математически формула не должна давать повторения (можно запустить пересчет формулы 1000 раз)

Повторения скорее всего связаны, с тем, что случмежду() может пересчитываться не один раз, а несколько, по какому нибудь событию.

Если в макросе удалить Application.Calculation = xlCalculationManual, то формула даст повтор.
Поэтому гарантированное решение - только макросом
 
Ответить
СообщениеСделал небольшой файл-тест
Математически формула не должна давать повторения (можно запустить пересчет формулы 1000 раз)

Повторения скорее всего связаны, с тем, что случмежду() может пересчитываться не один раз, а несколько, по какому нибудь событию.

Если в макросе удалить Application.Calculation = xlCalculationManual, то формула даст повтор.
Поэтому гарантированное решение - только макросом

Автор - MCH
Дата добавления - 03.10.2017 в 22:27
MCH Дата: Вторник, 03.10.2017, 22:35 | Сообщение № 15
Группа: Админы
Ранг: Старожил
Сообщений: 2008
Репутация: 752 ±
Замечаний: ±

случмежду() может пересчитываться не один раз, а несколько, по какому нибудь событию

Нашел причину, нужно указать: "Предельное число итераций" = 1
тогда повторы не возникают
К сообщению приложен файл: rngcalc2.xlsm (22.3 Kb)
 
Ответить
Сообщение
случмежду() может пересчитываться не один раз, а несколько, по какому нибудь событию

Нашел причину, нужно указать: "Предельное число итераций" = 1
тогда повторы не возникают

Автор - MCH
Дата добавления - 03.10.2017 в 22:35
mv6677 Дата: Вторник, 03.10.2017, 22:44 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 3 ±
Замечаний: 0% ±

Excel 2013
MCH, да точно. число итераций = 1.
Теперь все работает.

Всем спасибо за ответы.
 
Ответить
СообщениеMCH, да точно. число итераций = 1.
Теперь все работает.

Всем спасибо за ответы.

Автор - mv6677
Дата добавления - 03.10.2017 в 22:44
  • Страница 1 из 1
  • 1
Поиск:

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