2015-07-07 5 views
1

Я застрял с Excel/VBA:Как случайным образом распределить известную группу чисел в столбце с помощью Excel/VBA

У меня 10 строк х 30 столбцов пустой массив в Excel. Я пытаюсь распределить 10 целых чисел из известной группы из 10 (например, 1,1,1,1,1,1,3,5,7,9) в каждый столбец случайным образом, так что каждая строка столбца содержит один из group (и все члены группы используются один раз), и мне нужен второй столбец, чтобы содержать другое случайное распределение одной и той же группы и так далее.

Таким образом, я получаю 30 столбцов по 10 строк каждый, причем каждый столбец содержит различное случайное распределение из тех же 10 целых чисел. Я хочу иметь возможность изменять распределение в каждой строке, пересчитывая электронную таблицу.

Есть ли быстрый способ сделать это? За исключением упорядочения 30 различных отсортированных списков rand() и с помощью поисковых запросов, я не мог понять. Я недостаточно разбираюсь в VBA, чтобы уйти. Если кто-то может указать мне в правильном направлении, я буду вечно благодарен!

+0

Это домашнее задание? Застрял с какой частью кода VBA? Можете ли вы опубликовать его? – bonCodigo

ответ

0

Возможно Мне не хватает чего-то очевидного, хотя это, похоже, не так просто, используя формулы рабочей таблицы.

Если оригинал список значений в A1: A10, а затем, в B1:

=INDEX($A$1:$A$10,RANDBETWEEN(1,10))

и В2, формула массива **:

=INDEX($A$1:$A$10,INDEX(MODE.MULT(IF(COUNTIF($A$1:$A$10,$A$1:$A$10)-COUNTIF(B$1:B1,$A$1:$A$10),{1,1}*ROW($A$1:$A$10))),RANDBETWEEN(1,10-ROWS($1:1))))

Скопируйте приведенное выше значение в B10.

Затем вы можете скопировать формулы в B1: B10 вправо по желанию.

С уважением

** Формула массива не вводится таким же образом, как «стандартные» формулы.Вместо нажатия только ENTER, сначала удерживайте CTRL и SHIFT, а затем нажмите ENTER. Если вы сделали это правильно, вы заметите, что Excel помещает фигурные скобки {} вокруг формулы (хотя не пытайтесь вручную вставить их самостоятельно).

+1

@XOR_LX, хотя это будет устраивать 10 номеров в 10 ячейках, распределение будет искажено, например. с предлагаемыми числами - 1,1,1,1,1,1,3,5,7,9, повторное число (1) будет показано сначала (поскольку у него все еще есть 6x больше шансов нарисовать, даже как только некоторые из них появились) - не знаю, быстро исправить прямо сейчас ...... :( –

+0

@barryhoudini Ах, да. Очень хороший момент. И потенциально проблематично (по крайней мере, для «пуриста», такого как я: -)). Будет думать. –

+0

Спасибо за ввод. В конце я сделал то, что сказал выше, и перетасовал массив из 10 записей, затем зациклировал это 30 раз, чтобы получить требуемые 10 строк х 30 столбцов. Спасибо за помощь! –

0

Вы можете создать цикл, в котором вы создадите массив с 10 номерами. Затем запустите 30 столбцов, сначала добавив в ваш массив еще один столбец из 10 случайных чисел. См. this website on how to draw random numbers. Затем отсортируйте массив во втором столбце и разместите первый столбец.

Edit:

Как я прочитал в комментариях к другому ответу, решение пуриста будет:

  1. Присвоить каждый уникальный вариант значений случайной величина
  2. Сортировать эти случайные значения либо сверху вниз, либо снизу вверх, и выберите верхний.
  3. Поместите его в первую строку
  4. Повторите то же самое для второй строки, но отслеживайте сумму всех уникальных опций, чтобы исключить опцию, когда она максимизирует ее присутствие.

Edit2:

После того, как я просто нажал пост я думал, что это немного больше через и пришли к выводу, что последняя цифра будет Allmost всегда быть 1 в этом случае ....

+0

В конце я выбрал маршрут массива: перетасовал массив, выложил эти значения в столбец, зацикливаясь на требуемое количество раз, каждый раз используя новый столбец. Если кто-то застрял в аналогичной проблеме, вот ссылка на вопрос, который я задал] (http://stackoverflow.com/questions/31281934/how-to-show-entries-of-a-shuffled-array-in- vba-excel). –

+0

Очень приятно видеть, что проблема решена. Пожалуйста, примите здесь ответ, поэтому этот вопрос закрыт – Luuklag

Смежные вопросы