Comment puis-je trier un tableau dans la feuille 1 comme
A B C D E
3 7 3 6 5
dans une autre table de la feuille 2
A C E D B
3 3 5 6 7
en utilisant seulement la fonction?
Un moyen très simple de le faire serait simplement d’avoir un index de classement puis d’utiliser HLOOKUP pour trouver les valeurs correspondantes:
=RANK(A4,$A$4:$E$4,1)
=IF(COUNTIF($A$1:A$1,A1)>1,RANK(A4,$A$4:$E$4,1)+COUNTIF($A$1:A$1,A1)-1,RANK(A4,$A$4:$E$4,1))
=HLOOKUP(COLUMN(),$A$2:$E$4,2,FALSE)
=HLOOKUP(COLUMN(),$A$2:$E$4,3,FALSE)
Ok, voici la solution "une formule fait tout" sans colonnes temporaires supplémentaires:
Formule en A6:
= INDEX ($ A 2 $: E $ 2, MATCH (PETIT (A $ 3: E $ 3 $ + COLONNE (3 A $: 3 E $))/100000000, COLONNE ()), 3 A $: $ E $ 3 $ + COLONNE ($ A $ 3: E $ 3)/100000000,0))
Entrez-le sous forme de formule matricielle, c’est-à-dire appuyez sur Ctrl-Shift-Enter. Puis copiez-le dans les colonnes adjacentes.
Pour obtenir également le nombre, utilisez cette formule dans A7 (encore une fois sous forme de formule matricielle):
= ROUND (PETIT (3 $ A: 3 $ E + 3 $ DE COLONNE (3 $: 3 $ E))/100000000, COLONNE ()), 6)
Les deux formules sont un peu gonflées dans la mesure où elles doivent également gérer les doublons potentiels. La solution consiste simplement à ajouter une très petite fraction de la colonne avant d'appliquer le tri (fonction SMALL) - puis de la supprimer à nouveau ...
Bien que j'aie utilisé la technique "ajouter un petit nombre", je pense que c'est la plus élégante pour une ligne/colonne d'assistance:
=RANK(B4,$B$4:$F$4,0) + COUNTIF($B$4:$F$4,B4)-1
(copier dans la colonne de la ligne) RANK vous rapproche et la partie COUNTIF traite les doublons en comptant le nombre de doublons de la cellule jusqu'à ce point. Comme il y a toujours une correspondance (elle-même), vous soustrayez 1 pour le rang final. Cela "trie" les liens dans l'ordre d'apparition. Notez qu'une cellule vide générera # N/A et les données de caractères sous la forme #Values.
C'est faisable! :-)
Voici le fichier exemple .
Explication
Je suppose que vos données se trouvent dans la ligne 1 de la feuille Sheet1 et que vous souhaitez que les données soient triées en commençant par la colonne 1 d'une autre feuille. Si ce n'est pas le cas, ajustez en conséquence.
Placez cette formule dans la colonne 1 de la feuille cible, à la ligne 2:
= ROUND (SMALL (Sheet1! $ A $ 1: $ E $ 1 + COLONNE (Sheet1! $ A $ 1: $ E $ 1))/100000000, COLONNE ()), 6)
Vous devez entrer la formule sous forme de formule matricielle, c’est-à-dire appuyer sur Ctrl-Maj-Entrée.
Si vous le placez dans une autre colonne que la première, vous devez remplacer COLUMN()
par COLUMN()-COLUMN($A$2)+1
, où $A$2
doit être une référence à la cellule elle-même.
Cette formule vous renverra le nombre le plus bas de votre gamme - si vous la copiez dans les 4 prochaines colonnes, vous obtiendrez votre liste de commande.
Pour traduire ceci en numéro de colonne, nous devons effectuer 2 étapes:
= MATCH (PETIT (Sheet1! $ A $ 1: $ E $ 1 + COLONNE (Sheet1! $ A $ 1: $ E $ 1)/100000000, COLONNE ()), Sheet1! $ A $ 1: $ E 1 $ + 1 COLONNE ( Sheet1! $ A $ 1: $ E $ 1)/100000000,0)- à nouveau, à entrer comme formule matricielle. Si les données source ne commencent pas dans la colonne A, vous devez ajouter
+COLUMN(Sheet1!$A$1)-1
où $ A $ 1 doit être remplacé par la cellule la plus à gauche des données source.= LEFT (ADRESSE (1, A6,2), RECHERCHE ("$", ADRESSE (1, A6,2)) - 1)
Bien sûr, vous pouvez également combiner les étapes 1 et 2, cela donnera cette méga-formule:
= LEFT ( ADRESSE ( 1, MATCH ( PETIT (Fiche1! $ A $ 1: $ E $ 1 + COLONNE) (Feuille1! $ A $ 1: $ E $ 1)/100000000 , COLONNE ()), Sheet1! $ A $ 1: $ E $ 1 + COLONNE (Sheet1! $ A $ 1: $ E $ 1)/100000000, 0), 2), RECHERCHE ( "$", ADRESSE ( 1.... MATCH ( PETIT (Fiche1! $ A $ 1: $ E $ 1 + COLONNE (Fiche1! $ A $ 1: $ E $ 1)) /100000000,COLUMN()), Sheet1! $ A $ 1: $ E $ 1 + COLONNE (Sheet1! $ A $ 1: $ E $ 1)/100000000,0), 2) ) -1 )Encore une fois, à entrer comme formule matricielle.