Code Excel VBA sorte avec un ordre personnalisé et d'une valeur contenant des virgules
En VBA, Excel permet de trier les valeurs à l'aide de la CustomOrder paramètre pour choisir la séquence d'éléments sont commandés. Malheureusement, la séquence des éléments est délimité par des virgules et un de mes trier les éléments contient des virgules. Par exemple, je veux trier les données dans la première colonne par catégories dans la deuxième colonne. "L'Air, la Terre ou de la Mer" catégorie contient des virgules.
Data1 De L'Aérospatiale Data2 Le Cyberespace Data3 Le Cyberespace Data4 de l'Air, de la Terre ou de la Mer Data5 De L'Aérospatiale Data6 de l'Air, de la Terre ou de la Mer Data7 Le Cyberespace
Si vous enregistrez une macro VBA, le code créé ressemble à ceci:
MyWorksheet.Sort.SortFields.Add Key:=Range( _
"B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= "Cyberspace,Air,Land,or Sea,Aerospace", _
DataOption:=xlSortNormal
MyWorksheet.Sort.Apply
Donc, l'ordre de tri personnalisé doit être "Cyberespace", puis "l'Air, la Terre ou de la Mer", puis "Aérospatiale". Cependant, la deuxième catégorie est traitée comme trois catégories en raison de la virgule. Les lignes avec "l'Air, la Terre ou de la Mer" rentrer dans l'ordre vers le bas, car Excel ne trouve pas de tri personnalisé pour eux.
Est-il un moyen d'obtenir CustomOrder de travailler avec une catégorie qui contient des virgules?
J'ai essayé de mettre des guillemets autour de la catégorie et j'ai essayé de remplacer le séparateur des virgules par des points-virgules (dans l'espoir Excel n'accepte qu'un point-virgule au lieu d'une virgule). Ni travaillé.
OriginalL'auteur Dean Hill | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Il semble être à côté de la
Apply
. Pouvez-vous AjouterLe bon de commande que vous avez est un travail comme dans mon exemple.
MODIFIER mis à Jour en fonction de l'OP à jour question
Modifier la macro à la suite de l'utilisation d'un tableau pour le OrderCustom paramètre.
La colline de mise à Jour de ma réponse.
Cette solution a fonctionné parfaitement pour moi. Merci.
J'ai suivi cette solution qui fonctionne, sauf qu'il provoque Excel 2013 de plantage lors de l'enregistrement après l'exécution de la macro. La solution est d'ajouter la ligne:
ActiveSheet.Sort.Sortfields.Clear
Avant la ligne:Application.DeleteCustomList Application.CustomListCount
plus de Détails ici: answers.microsoft.com lienmerci pour cette, mon excel est encore de s'écraser après l'application de votre solution, toutes les autres solutions?
OriginalL'auteur Steve Mallory
OK...en s'appuyant sur la description mise à jour, quelle est la formule pour la colonne à côté de ce que vous êtes de tri.
Ainsi, si "l'Air, la Terre ou de la Mer" est dans la colonne B1, alors C1 aurait ceci:
Alors vous pourriez faire votre tri personnalisé comme suit:
Assurez-vous de régler la plage de façon appropriée.
De réponses mis à jour et nous espérons applicable
OriginalL'auteur ray