web-dev-qa-db-fra.com

Comment trier un tableau en utilisant uniquement une fonction/équation

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?

9
Season

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)

Example 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))

Example 2

=HLOOKUP(COLUMN(),$A$2:$E$4,2,FALSE)

Example 3

=HLOOKUP(COLUMN(),$A$2:$E$4,3,FALSE)

Example 4

11
Stepan1010

Ok, voici la solution "une formule fait tout" sans colonnes temporaires supplémentaires:

enter image description here

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 ...

11
Peter Albert

Je pense qu'une solution plus simple consiste à utiliser la fonction "Large":  Excel screenshot

Les fonctions de colonne ne sont qu'un moyen facile de compter de 5 à 1, mais une colonne d'assistance peut être encore plus facile.

Vous pouvez avoir une réponse similaire en utilisant également la fonction "Petite".

1
Eliyahu

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.

1
DaveM

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:

  1. Déterminez le numéro de colonne:
    Cela peut être fait avec cette formule:
     = 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.
  2. Convertissez le numéro de colonne en une lettre:
    En supposant que votre numéro de colonne de l'étape 1 se trouve dans la cellule A6, cette formule fera l'affaire:
 = 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.

0
Peter Albert