MS Excel: Перетасовать столбец строк в сетку строк

MS Excel: Перетасовать столбец строк в сетку строк

У меня есть таблица MS Excel со 100 именами в одном столбце.

На другом листе у меня есть сетка 10 x 10 ячеек, в которой я хочу случайным образом присвоить имя столбцу.

Есть ли относительно простой способ добиться этого или это потребует работы на VBA?

решение1

Это можно сделать с помощью вспомогательного столбца, который создает случайный порядковый номер от 1 до 100. С вашими именами в A2:A101. В B2 введите:

=AGGREGATE(15,7,ROW($1:$100)/(COUNTIFS($B$1:B1,ROW($1:$100))=0),RANDBETWEEN(1,100-COUNT($B$1:B1)))

И скопируйте вниз.

Это случайным образом выберет число от 1 до 100 с k, в AGGREGATE равным RANDBETWEEN(1,100-COUNT($B$1:B1)). В то время как COUNTIFS($B$1:B1,ROW($1:$100))=0гарантирует, что мы не получим дубликатов.

введите описание изображения здесь

Затем мы используем ИНДЕКС/ПОИСКПОЗ для поиска значения. Поместите это в правый верхний угол сетки:

=INDEX($A:$A,MATCH((ROW($A1)-1)*10+COLUMN(A$1),$B:$B,0))

Так как это наркотик сверху вниз, он ищет 1-10 в первой строке и 11-20 во второй и т. д. И поскольку столбец поиска рандомизирован, он будет случайным.

Затем скопируйте выше 10 и ниже 10:

введите описание изображения здесь


Если у вас есть Office 365 Excel, то ИНДЕКС/ПОИСКПОЗ можно заменить этой динамической версией, которая автоматически разнесет 10x10:

=INDEX(A:A,MATCH(SEQUENCE(10,10),B:B,0))

решение2

Предположим, что имена хранятся в столбце A:

  1. В столбце B примените формулу=RAND()
  2. Скопируйте и вставьте полученные значения в столбец B, перезаписав формулу.
  3. В столбце C примените формулу =RANK(B2, $B$2:$B$101). Это позволит вам присвоить каждому имени номер от 1 до 100
  4. Над сеткой 10x10 добавьте цифры от 1 до 10. Сделайте то же самое слева от сетки 10x10. Они будут служить заголовками строк и столбцов.

Теперь предположим, что заголовки строк E2:E11и заголовки столбцов находятся в F1:O1...

  1. Введите формулу =INDEX($A$2:$A$101, MATCH(($E2-1)*10+F$1, $C$2:$C$101,0))в ячейку F2 и перетащите ее по сетке 10x10.

Пример решения

решение3

Попробуйте эту формулу массива и закончите с помощьюShift+ Ctrl + Enter:

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

введите описание изображения здесь

Связанный контент