Я хотел бы сгенерировать 5 случайных чисел от 1 до 49 и поместить их в диапазон строк, например A1:AA1, в 5 случайных позициях. Пустые ячейки должны получить значение 0.
Основная концепция — =RANDARRAY(1,27,1,49,TRUE). Это почти работает, но заполняет все 27 ячеек. Мне нужно каким-то образом заполнить только 5 случайно выбранных ячеек из 27 (например: A1, G1, L1, M1, X1).
Как это может быть сделано?


Попробуйте эту формулу:
=LET(values,RANDARRAY(1,27,1,49,TRUE),
random5, TAKE(SORTBY(SEQUENCE(27),RANDARRAY(27,,1,27,TRUE)),5),
MAP(values,SEQUENCE(1,27),LAMBDA(v,i,IF(ISNA(MATCH(i,random5,0)),0,v))))
Он удаляет из первоначальных 27 значений все, кроме 5, которые были созданы случайным образом.
random5: случайным образом сортирует последовательность из 27 значений и принимает 5 верхних значений.
Эти значения затем используются в качестве индекса сохраненных значений — все остальные значения возвращаются как 0.
Вот что я предлагаю использовать, о чем я также прокомментировал выше:
=BYCOL((TAKE(UNIQUE(MAP(SEQUENCE(27),LAMBDA(q,RANDBETWEEN(1,27)))),5)=SEQUENCE(,27))*
TAKE(UNIQUE(MAP(SEQUENCE(27),LAMBDA(q,INT(RAND()*100)))),5),SUM)
Это одно из решений:
=IF(SORTBY(SEQUENCE(,27),RANDARRAY(,27))>5,,RANDARRAY(1,27,1,49,1))
Это решение без повторяющихся значений:
=IF(SORTBY(SEQUENCE(,27),RANDARRAY(,27))>5,,TAKE(SORTBY(SEQUENCE(,49),RANDARRAY(,49)),,27))
=LET(bottom,1,top,49,size,27,sample,5,replacement,0,
c,top-bottom+1,
SORTBY(EXPAND(TAKE(SORTBY(SEQUENCE(,c,bottom),
RANDARRAY(,c)),,sample),,size,replacement),
RANDARRAY(,size)))