人をランダムにペアにしてユニークなペアにします。
2つの列があります。1つはRand()
を介して作成された値を支援するもので、もう1つはこれらの値を
=INDEX($A$2:$A$164,RANK(S2,$S$2:$S$164))
ただし、これにより、2つのペアに多くの重複と円が生じます。
私が欲しいのは:
私は2つのグループを簡単に半分にすることができましたが、これは最善の解決策ではないようで、手動で行うと実際にはランダムではありません。
何か案は?
モリッツ。すぐに、範囲に奇数のアイテムが含まれていることに気づきました($ A $ 2:$ A $ 164には163個のセルが含まれています)。だから誰もが誰かとペアになるわけではありません。どんな解決策でも、すべての名前を含めるには、範囲に常に偶数のセルがあることを確認する必要があります。この場合、1つmore人数よりも多い(つまり、$ A $ 2:$ A $ 165)。
また、ファイル>スプレッドシートの設定>計算設定が「変更時」に設定されていることを確認する必要があります。そうしないと、他の設定に応じて、リストが1分ごとまたは1時間ごとに自動的に再生成されます。現在選択されています。
つまり、列Aの名前以外に設定した列は無視して、ゼロから始めます。これを実際の設定に適用できます。
配列数式の準備として、列Bを完全にクリアします。これは、必要に応じて後で非表示にできる「ヘルパーカラム」になります。
次の式をB2に入れます。
=ArrayFormula(QUERY({A2:A165,RANDBETWEEN(0 * ROW(A2:A165), 100000000000000)/100000000000000},"Select Col1 Order By Col2"))
=ArrayFormula({QUERY({ROW(B2:B165)-1,B2:B165},"Select Col2 Where Col1 <= "&ROWS(B2:B165)/2),QUERY({ROW(B2:B165)-1,B2:B165},"Select Col2 Where Col1 > "&ROWS(B2:B165)/2)})
列Bの数式は、ランダム化された重複しない名前のリストを提供します。
列Cの数式は、リストの上半分を受け取り、下半分とペアにします。
これを(私の知る限り)1つの数式にマージすることはできません。ランダム化関数は長い数式内の各サブ数式によってトリガーされるため、重複が発生するためです。 Rand()を使用して単一のヘルパー列を作成することにより、他の数式を使用してreferしながら、重複を取得することはできません。
=QUERY(ARRAY_CONSTRAIN(SORT({
{QUERY(UNIQUE(ARRAYFORMULA(RANDBETWEEN(ROW(INDIRECT("A2:A"&COUNTA(A2:A)*100))^0,
COUNTA(A2:A)*COUNTA(A2:A)-COUNTA(A2:A)))), "limit "&
COUNTA(A2:A)*COUNTA(A2:A)-COUNTA(A2:A))},
{ARRAYFORMULA(QUERY(SPLIT(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A2:A&CHAR(9)), COUNTA(A2:A)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A2:A&CHAR(9), COUNTA(A2:A))), CHAR(9)))," "),
"select Col1 where Col1<>Col2", 0)&" - "&QUERY(SPLIT(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A2:A&CHAR(9)), COUNTA(A2:A)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A2:A&CHAR(9), COUNTA(A2:A))), CHAR(9)))," "),
"select Col2 where Col1<>Col2", 0))}}, 1, 1), 4, 2), "select Col2", 0)
4
を目的の数に「自分の列の各ペア名」モードにする場合は、次のようにします。
=ARRAYFORMULA(SPLIT(QUERY(ARRAY_CONSTRAIN(SORT({
{QUERY(UNIQUE(ARRAYFORMULA(RANDBETWEEN(ROW(INDIRECT("A2:A"&COUNTA(A2:A)*100))^0,
COUNTA(A2:A)*COUNTA(A2:A)-COUNTA(A2:A)))), "limit "&
COUNTA(A2:A)*COUNTA(A2:A)-COUNTA(A2:A))},
{ARRAYFORMULA(QUERY(SPLIT(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A2:A&CHAR(9)), COUNTA(A2:A)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A2:A&CHAR(9), COUNTA(A2:A))), CHAR(9)))," "),
"select Col1 where Col1<>Col2", 0)&" - "&QUERY(SPLIT(
TRANSPOSE(SPLIT(REPT(CONCATENATE(A2:A&CHAR(9)), COUNTA(A2:A)), CHAR(9)))&" "&
TRANSPOSE(SPLIT(CONCATENATE(REPT(A2:A&CHAR(9), COUNTA(A2:A))), CHAR(9)))," "),
"select Col2 where Col1<>Col2", 0))}}, 1, 1), 4, 2), "select Col2", 0), " - "))