Excel VBA façon la plus Rapide pour trier un tableau de nombres dans l'ordre décroissant?
Quelle est la manière la plus rapide (en termes de temps de calcul) pour trier un tableau de nombres (1000-10000 numéros mais peut varier) dans l'ordre décroissant? Autant que je sache, Excel construire-dans des fonctions n'est pas vraiment efficace et en mémoire de tri doit être beaucoup plus rapide que les fonctions d'Excel.
Remarque que je ne peux pas créer quoi que ce soit sur la feuille de calcul, tout doit être rangés et classés dans la mémoire.
Tutoriel complet sur le Tri d'un Tableau. Ellis a donné de nombreuses options pour trier un tableau 🙂 faites votre choix. vbforums.com/showthread.php?t=473677
Voir le post " stackoverflow.com/a/11012529/797393.
Voir le post " stackoverflow.com/a/11012529/797393.
OriginalL'auteur AZhu | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
System.Les Collections.ArrayList
:Il utilise la fonction de Tri Rapide.
arr.sort
et n'arrive pas à aller au-delà de cette ligne.J'ai juste répété ce moment, et ça fonctionne très bien. Quelles sont les données que vous le tri? Quelle est la taille? Avez-vous essayé avec juste quelques valeurs? (Je viens de le faire maintenant, et il fonctionne très bien pour moi).
Je l'ai essayé avec un tableau rempli avec 46 valeurs Doubles. Ai-je besoin d'ajouter une référence? (Je sais que c'est à l'aide de la liaison tardive, mais ne peut pas comprendre pourquoi il serait juste sortir avec aucune erreur de débogage)
Non, vous n'avez pas besoin d'une référence. Le fait que vous pouvez créer l'objet et ajouter des valeurs à elle, montre que vous avez un fonctionnement
arr
objet. J'ai juste essayé avecFor i = 1 To 46: d = Rnd(): arr.Add d: Next
oùd
est de typeDouble
, et n'ai pas de problème. Peut-être que vous devriez demander de l'aide pour ce via une nouvelle question.Crois que j'ai trouvé pourquoi j'ai essayé de l'utiliser dans un UDF et je pense que c'est peut-être pas quelque chose qui est accessible quand vous le faites. Semble fonctionner à trouver dans un sous
OriginalL'auteur trincot
Juste pour que les gens n'ont pas de cliquer sur le lien que je viens de faire, ici, est l'un des exemples fantastiques de Siddharth commentaire.
OriginalL'auteur tannman357
J'ai utilisé la Coque algorithme de tri avec succès. S'exécute en un clin d'œil lorsqu'il est testé pour N=10000, à l'aide d'un tableau généré avec VBA fonction Rnd () - n'oubliez pas d'utiliser la fonction Randomize déclaration pour la génération de test de tableaux. Il a été facile à mettre en œuvre et à court et assez efficace pour le nombre d'éléments que j'avais. La référence est donnée dans les commentaires de code.
OriginalL'auteur jdrago
Je sais que l'OP spécifié non à l'aide de feuilles de calcul, mais il est intéressant de noter que la création d'une nouvelle Feuille de calcul, l'utiliser comme un bloc-notes pour faire le tri avec les fonctions de feuille de calcul, puis le nettoyage après la plus longue de moins d'un facteur de 2. Mais vous avez également l'ensemble de la souplesse par les paramètres de la Tri Fonction de Feuille de calcul.
Sur mon système, la différence était de 55 ms pour la très belle routine récursive par @tannman357 et 96 ms pour la méthode ci-dessous. Ceux sont des moyennes sur plusieurs pistes.
OriginalL'auteur Cool Blue
Si vous voulez algorithme efficace, alors jetez un oeil à Timsort. C'est l'adaptation de la fusion de sorte qu'il corrige les problèmes de l'.
Cependant 1k - 10k entrées de données sont bien trop peu de données pour vous de vous inquiéter construit à la recherche de l'efficacité.
Exemple : Si vous avez des données à partir de la colonne A à D et en-tête est à la ligne 2 et vous souhaitez trier par la colonne B.
OriginalL'auteur Margus
J'ai répondu à cette question moi-même il y a longtemps, ce qui signifie que je devais revenir à ma première VBA fichiers archivés.
J'ai donc trouvé ce vieux code, que j'ai pris d'un livre.
D'abord, il enregistre des valeurs (à partir de la sélection recoupé avec une colonne de table) à tableau ar(x), puis de les trier du plus petit au plus grand.
Pour trier il y a 2 bucles, le premier (Faire une Boucle Jusqu'à ce sw=0) et la seconde (Pour x=1 À n) compare la valeur de a(x) avec la valeur de a(x+1), en gardant à l'un(x) le plus grand nombre et dans l'ar(x+1) le plus petit nombre.
La première bucle se répète jusqu'à ce est triée forme plus petit au plus grand.
J'ai utilisé ce code à insérer des lignes au-dessus de chaque cellule sélectionnée dans une colonne budget (TblPpto[Descripcion]).
Espérons que cela aide!
OriginalL'auteur Jorge Jaime