J'essaie de jumeler des gens au hasard en paires uniques.
J'ai deux colonnes, l'une avec les valeurs d'aide créées via Rand()
et l'autre qui se classe sur ces valeurs avec
=INDEX($A$2:$A$164,RANK(S2,$S$2:$S$164))
Cependant, cela se traduit par de nombreux doublons et cercles dans les deux paires:
Ce que je veux c'est:
Je pourrais facilement la moitié des deux groupes mais cela ne semble pas être la meilleure solution et pas vraiment aléatoire si je le fais manuellement.
Des idées?
Moritz. Immédiatement, je remarque que votre gamme contient un nombre impair d'articles ($ A $ 2: $ A $ 164 contient 163 cellules); donc tout le monde ne sera pas jumelé avec quelqu'un. Dans toute solution, alors, pour inclure tous les noms, vous devez vous assurer que votre plage a toujours un nombre pair de cellules, dans ce cas une de plus que le nombre de personnes (c.-à-d. $ A $ 2: $ A $ 165).
De plus, vous voudrez être certain que votre paramètre Fichier> Paramètres de la feuille de calcul> Calcul est défini sur "en cas de modification" ou votre liste sera régénérée automatiquement toutes les minutes ou toutes les heures, en fonction de l'autre paramètre est actuellement sélectionné.
Cela dit, je vais recommencer à zéro, en ignorant toutes les colonnes que vous avez configurées à part les noms de la colonne A. Ensuite, vous pouvez appliquer cela à votre configuration réelle:
Effacez la colonne B entièrement en préparation d'une formule matricielle. Ce sera une "colonne d'aide" qui peut se cacher plus tard si vous le souhaitez.
Placez la formule suivante dans 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)})
La formule de la colonne B fournira une liste aléatoire et sans duplication de vos noms.
La formule de la colonne C prendra la moitié supérieure de cette liste et l'associera à la moitié inférieure.
Vous ne pouvez pas (à ma connaissance) fusionner cela en une seule formule, car les fonctions de randomisation sont déclenchées par chaque sous-formule dans une formule plus longue, vous vous retrouveriez donc avec des doublons. En créant une seule colonne d'aide avec Rand (), nous pouvons y faire référence avec l'autre formule sans obtenir de doublons.
=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
au nombre souhaitési vous voulez qu'il soit en mode "chaque nom de paire dans sa propre colonne", alors:
=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), " - "))