
У меня есть таблица 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:
- В столбце B примените формулу
=RAND()
- Скопируйте и вставьте полученные значения в столбец B, перезаписав формулу.
- В столбце C примените формулу
=RANK(B2, $B$2:$B$101)
. Это позволит вам присвоить каждому имени номер от 1 до 100 - Над сеткой 10x10 добавьте цифры от 1 до 10. Сделайте то же самое слева от сетки 10x10. Они будут служить заголовками строк и столбцов.
Теперь предположим, что заголовки строк E2:E11
и заголовки столбцов находятся в F1:O1
...
- Введите формулу
=INDEX($A$2:$A$101, MATCH(($E2-1)*10+F$1, $C$2:$C$101,0))
в ячейку F2 и перетащите ее по сетке 10x10.