Страницы: 1
RSS
Как из массива выбрать случайные числа
 
Здравствуйте. Подскажите пожалуйста, как решить задачу: в столбце М есть 44 числа. Необходимо выбрать из них 22 случайных числа и вывести их в столбец А. Файл прилагаю.
 
здравствуйте

пара вопросов
среди исх. чисел могут быть повторяющиеся?
в полученной выборке чисел могут быть повторяющиеся?
Изменено: ikki - 27.07.2013 17:52:04
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Нет. повторяющихся нет, но есть положительные и отрицательные и как следствие в полученной выборке повторяющихся тоже нет. Но числа необходимо брать именно из столбца М (они в диапазоне от (-22 по 21)
 
Вот формула:
Код
=ИНДЕКС($M$1:$M$44;СЛУЧМЕЖДУ(1;44))


Недостаток формулы в том, что значения могут повторяться.
С уважением,
Федор/Все_просто
 
Цитата
иванов иван пишет:
как следствие в полученной выборке повторяющихся тоже нет.
гм.
вообще-то "как следствие" - это вовсе необязательно.
ну, раз нет, так нет.

могу предложить решение макросом.
устроит?

пс. формулами - не знаю как. :(
Изменено: ikki - 27.07.2013 17:59:15
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А для меня как раз макросом проще). В сущности столбца М  может и не быть. Важно чтобы в столбец А выводились именно 22 числа из диапазона (-22 по 21) и главное, чтобы они не повторялись.
Изменено: иванов иван - 27.07.2013 18:01:34
 
В принципе, ничего невозможного нет. Если заморачиваться, можно устроить ветвление, используя функцию если, что позволит каждый раз исключать повторяющееся значение. Но намного проще использовать вба и циклы.
Изменено: Все_просто - 27.07.2013 18:05:48
С уважением,
Федор/Все_просто
 
можно как-то так...

Код
Sub test()
  Dim c As New Collection, i%, j%
  For i = 1 To 44
    c.Add CStr(Cells(i, "m").Value)
  Next
  For i = 1 To 22
    j = Rnd * c.Count + 1
    Cells(i, "a") = CDbl(c(j))
    c.Remove j
  Next
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Именно то что нужно :) ikki, большое вам человеческое спасибо :)
 
вариант поточнее плюс учтено отсутствие столбца М :
Код
Sub test()
  Dim c As New Collection, i%, j%
  For i = -22 To 21
    c.Add i
  Next
  For i = 1 To 22
    j = Int(Rnd * c.Count) + 1
    Cells(i, "a") = c(j)
    c.Remove j
  Next
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Всё безупречно заработало, большое спасибо :)
 
Формулой
Код
=НАИБОЛЬШИЙ(СТРОКА(A$1:A$44)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА(A$1:A$44)-23;$A$1:A1;));ОКРУГЛВВЕРХ(СЛЧИС()*(44-СЧЁТ($A$1:A1));0))-23

формула массива. Вводится одновременным нажатием Контрл Шифт Ентер
Изменено: _Boroda_ - 27.07.2013 18:27:20
Скажи мне, кудесник, любимец ба’гов...
 
Мне задача очень понравилась. Может кто-нибудь сможет сделать с помощью цикла в самом икселе, не в вба?
С уважением,
Федор/Все_просто
 
Цитата
Все_просто пишет:
с помощью цикла в самом икселе
это как?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Может Все_просто про итерации в настройках? ))
 
Без цикла и без VBA
Изменено: Михаил С. - 27.07.2013 19:21:57 (Перевложил файл)
 
Ну да, Михаил, я именно это и имею в виду, про итерации. Очень давно хочу что-нибудь такое применить вне вба, но как-то не получается.
С уважением,
Федор/Все_просто
 
Все_просто, я сразу не обратил внимание - у _Boroda_, в #12 посте тоже рабочая формула.
 
Цитата
Михаил, я именно это и имею в виду, про итерации
Вы нашли у Михаила С. итеративные вычисления?  :)
 
Викттур, нет, Вы не совсем правильно поняли, что я написал. Этой фразой я подтверждал догадки Михаила о том, что я хочу сделать.
С уважением,
Федор/Все_просто
 
Это у меня были догадки-подозрения))
 
у меня давно были догадки с подозрениями, что Михаил С и Юрий М - близнецы-братья.
и Викттур - их внебрачный сын.

а вот теперь всё просто подтвердилось  :D
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Читают тему
Наверх