Προηγουμένως στο Podcast 2093, έδειξα ένα απλό είδος VBA που λειτουργεί αν δεν ταξινομείτε ανά χρώμα. Σήμερα, η Neeta ζητά από το VBA να ταξινομήσει τα δεδομένα του Excel ανά χρώμα.
Το πιο δύσκολο πράγμα για την ταξινόμηση κατά VBA είναι να μάθετε ποιοι χρωματικοί κωδικοί RGB χρησιμοποιείτε. Στο 99% των περιπτώσεων, δεν επιλέξατε χρώμα εισάγοντας τιμές RGB. Επιλέξατε ένα χρώμα χρησιμοποιώντας αυτό το αναπτυσσόμενο μενού στο Excel.

Και, ενώ θα μπορούσατε να χρησιμοποιήσετε το Fill, More Colors, Custom για να μάθετε ότι το επιλεγμένο χρώμα είναι RGB (112,48,160), αυτό είναι μια ταλαιπωρία εάν έχετε πολλά χρώματα.

Λοιπόν - Προτιμώ να ενεργοποιήσω τη συσκευή εγγραφής μακροεντολών και να αφήσω τη μακροεντολή εγγραφής να βρει τον κωδικό. Ο κώδικας που δημιουργείται από τη συσκευή εγγραφής μακροεντολής δεν είναι ποτέ τέλειος. Εδώ είναι το βίντεο που δείχνει πώς να χρησιμοποιήσετε τη συσκευή εγγραφής μακροεντολής κατά την ταξινόμηση κατά χρώμα.
Μεταγραφή βίντεο
Μάθετε το Excel από το Podcast, Episode 2186: VBA Ταξινόμηση κατά χρώμα.
Γεια σας, καλώς ήλθατε πίσω στο netcast, είμαι ο Bill Jelen. Η σημερινή ερώτηση, στάλθηκε στο YouTube. Είχα ένα βίντεο εκεί έξω για το πώς να ταξινομήσω με το VBA, και ήθελαν να ταξινομήσουν ανά χρώμα με το VBA, το οποίο είναι πολύ πιο περίπλοκο. Είπα, "Γιατί δεν ενεργοποιείτε απλώς τη συσκευή εγγραφής μακροεντολών και βλέπετε τι συμβαίνει;" Και, δυστυχώς, η μακροφωνική συσκευή εγγραφής, μας ξέρει, μας φέρνει κοντά αλλά δεν μας φτάνει μέχρι εκεί.
Έτσι Προβολή, Μακροεντολές, Εγγραφή μακροεντολής, "HowToSortByColor", Αποθήκευση μακροεντολής σε αυτό το βιβλίο εργασίας - τέλειο. Κάντε κλικ στο OK. Εντάξει, οπότε τώρα εκτελείται η εγγραφή μακροεντολών, θα έρθουμε εδώ στην καρτέλα Δεδομένα και θα πούμε Ταξινόμηση. Θα χρησιμοποιήσουμε ένα πλαίσιο διαλόγου Ταξινόμηση και θα το φτιάξουμε, εντάξει; Λοιπόν, θα πούμε ότι θέλουμε να προσθέσουμε ένα επίπεδο, Ταξινόμηση στο Cherry, αλλά όχι Ταξινόμηση στις τιμές κυττάρων. πρόκειται να ταξινομήσουμε το χρώμα χρώματος κυττάρων - το χρώμα χρώματος κυψέλης είναι εκεί - και θέλουμε να βάλουμε το κόκκινο στην κορυφή και στη συνέχεια να αντιγράψουμε αυτό το επίπεδο και να βάλουμε κίτρινο δεύτερο. και στη συνέχεια θα προσθέσουμε ένα νέο επίπεδο - θα πάμε στη στήλη Δ, στη στήλη ημερομηνίας - Ταξινόμηση στο χρώμα του κελιού, κόκκινο πρώτα, αντιγραφή αυτού του επιπέδου, κίτρινο και στη συνέχεια εδώ. ένα τότε, εδώ στο Elderberry, στήλη Ε, υπάρχει λίγη μπλε γραμματοσειρά που δεν θέλω να δω πώς ήτανοπότε θα το προσθέσουμε ως χρώμα Ταξινόμηση στη γραμματοσειρά με μπλε στην κορυφή. και μετά εάν όλα αυτά είναι ισοπαλία χωρίς καθόλου χρώματα, θα προσθέσουμε ένα τελικό επίπεδο μόνο στη στήλη Α - Τιμές κυψέλης, Μεγαλύτερη έως μικρότερη. και κάντε κλικ στο OK.
Εντάξει, τώρα, μερικά πράγματα - μην παραλείψετε αυτό το επόμενο βήμα - το αρχείο σας, αυτή τη στιγμή, σας εγγυώμαι ότι έχετε αποθηκευτεί ως xlsx. Αυτή είναι η κατάλληλη στιγμή για να κάνετε File, Save As και να το αποθηκεύσετε ως xlsm ή xlsb. Εάν δεν το κάνετε αυτό, όλη η εργασία σας σε αυτό το σημείο θα χαθεί όταν αποθηκεύσετε αυτό το αρχείο. Θα διαγράψουν τις μακροεντολές οτιδήποτε είναι αποθηκευμένο στο xlsx. Καλώς?
Σταματήσαμε λοιπόν να ηχογραφούμε εκεί και μετά θέλουμε να δούμε τις μακροεντολές μας. Έτσι, μπορείτε να το κάνετε με το View, Macros-- View, Macros - και να βρείτε τη μακροεντολή που μόλις καταγράψαμε - HowToSortByColor - και κάντε κλικ στο Edit. Εντάξει, λοιπόν, εδώ είναι η μακροεντολή μας, και όπως το βλέπω αυτό, το πρόβλημα που έχουμε είναι, σήμερα τυχαίνει να έχουμε 25 σειρές συν μια επικεφαλίδα. Συνεπώς, πηγαίνει στη σειρά 26. Και έχουν σκληρό κώδικα ότι πάντοτε θα κοιτάζουν προς τα κάτω στις σειρές 26.
Αλλά καθώς το σκέφτομαι, ειδικά σε σύγκριση με το παλιό VBA για ταξινόμηση, δεν χρειάζεται να καθορίσουμε ολόκληρο το εύρος - μόνο ένα κελί στη στήλη. Οπουδήποτε κι αν έχουν τη στήλη C26, θα την μειώσω για να πω απλώς, "Γεια, όχι, κοιτάξτε το πρώτο κελί σε αυτήν τη στήλη." Λοιπόν, Ε2, και μετά, εδώ, Α2. Στην περίπτωσή μου, είχα 1, 2, 3, 4, 5, 6, επίπεδα ταξινόμησης - 6 πράγματα που πρέπει να αλλάξω.
Και τότε αυτό είναι το κομμάτι που παίρνει η μακροφωνική συσκευή εγγραφής, πολύ άσχημα, είναι ότι θα ταξινομούν μόνο στις σειρές 26 όλη την ώρα. Έτσι θα το αλλάξω αυτό. Θα πω, "Κοιτάξτε, ξεκινήστε στο εύρος Α21 και επεκτείνετε το .CurrentRegion." Ας ρίξουμε μια ματιά στο Excel και να δούμε τι κάνει. Επομένως, αν θα επιλέξατε μόνο ένα κελί - A1 ή οτιδήποτε άλλο - και πατήστε Ctrl + *, επιλέγει την τρέχουσα περιοχή. Εντάξει, ας το κάνουμε. Εδώ, από τη μέση, Ctrl + *, και τι κάνει, επεκτείνεται προς όλες τις κατευθύνσεις έως ότου φτάσει στην άκρη του υπολογιστικού φύλλου, πάνω από το υπολογιστικό φύλλο, ή στη δεξιά άκρη των δεδομένων ή στο κάτω άκρο των δεδομένων . Έτσι, λέγοντας A1 .CurrentRegion, είναι σαν να πηγαίνεις στο A1 και πατώντας Ctrl + *. Καλώς? Λοιπόν, εδώ πρέπει να αλλάξετε αυτό το πράγμα. Τώρα όλα τα άλλα στη μακροεντολή είναι καλά. το'όλα θα δουλέψουν. Πήραν τα SortOnCellColor και SortOnFontColor και xlSortOn. Δεν χρειάζεται να ανησυχώ για κάτι τέτοιο. Το μόνο που πρέπει να κάνω είναι να κοιτάξω εδώ και να δω ότι κωδικοποίησαν την περιοχή που επρόκειτο να χρησιμοποιήσουν για το εύρος, σκληρά κωδικοποιημένο πόσο μακριά πήγαν και δεν χρειάζεται να είναι κωδικοποιημένο. Και με αυτό το απλό βήμα, αλλάζοντας αυτά τα έξι αντικείμενα και το έβδομο στοιχείο, έχουμε κάτι που πρέπει να λειτουργήσει.
Τώρα, ας κάνουμε το τεστ. Ας επιστρέψουμε εδώ στο Excel και θα προσθέσουμε μερικές νέες σειρές στο κάτω μέρος. Θα βάλω μόλις 11 δευτερόλεπτα εκεί, και θα προσθέσουμε μερικά κόκκινα - ένα κόκκινο, ένα κίτρινο και στη συνέχεια εδώ ένα μπλε. Καλώς. Αν λοιπόν εκτελέσουμε αυτόν τον κώδικα - εκτελέστε αυτόν τον κωδικό, οπότε κάνω κλικ εδώ και κάντε κλικ στο κουμπί Εκτέλεση - και στη συνέχεια επιστρέψτε, θα πρέπει να δούμε ότι το 11 έγινε το κορυφαίο στοιχείο με κόκκινο χρώμα, εμφανίστηκε εκεί στο κίτρινα, και εμφανίζεται στα μπλε, έτσι όλα λειτουργούν τέλεια. Γιατί πήγε στην κορυφή; Επειδή συνέβη ότι το τελευταίο είδος είναι η στήλη Α και έτσι όταν υπάρχει ισοπαλία, φαίνεται στη στήλη Α ως το tiebreaker. Λοιπόν αυτός ο κώδικας λειτουργεί.
Για να μάθω πώς να γράφω VBA, εγώ, μαζί με την Tracy Syrstad, έγραψα μια σειρά βιβλίων, Excel VBA και MACROS. Υπήρξε μια έκδοση τώρα για τα 2003, 2007, 2010, 2013 και 2016. σύντομα το 2019. Εντάξει, λοιπόν, βρείτε την έκδοση που ταιριάζει με την έκδοση του Excel και αυτό θα σας ανεβάσει την καμπύλη εκμάθησης.
Συμπλήρωση: Το σημερινό επεισόδιο είναι, πώς να χρησιμοποιήσετε το VBA για ταξινόμηση κατά χρώμα. Ο ευκολότερος τρόπος για να το κάνετε αυτό, ειδικά επειδή δεν ξέρετε ποιοι κωδικοί RGB χρησιμοποιήθηκαν για καθένα από τα χρώματα - απλά επιλέξατε κόκκινο, δεν ξέρετε τι είναι ο κωδικός RGB και δεν θέλετε να κοιτάξετε επάνω - ενεργοποιήστε τη συσκευή εγγραφής μακροεντολών χρησιμοποιώντας το View, Macros, Record New Macro. Αφού ολοκληρώσετε το είδος, κάντε κλικ στο Διακοπή εγγραφής - βρίσκεται στην κάτω αριστερή γωνία - Alt + F8 για να δείτε μια λίστα μακροεντολών ή Προβολή, Μακροεντολές, Προβολή μακροεντολής - την καρτέλα Προβολή, Μακροεντολές και και στη συνέχεια Προβολή μακροεντολών - αυτό προκαλεί σύγχυση. Επιλέξτε τη μακροεντολή σας και κάντε κλικ στο Επεξεργασία και όποτε βλέπετε το C2 σε ορισμένους αριθμούς εύρους, απλώς αλλάξτε το στο σημείο 2. Στη συνέχεια, όπου καθορίζουν το εύρος προς ταξινόμηση, το εύρος ("A1"), το CurrentRegion, θα επεκταθεί. Καλώς.
Λοιπόν, γεια, θέλω να σας ευχαριστήσω που σταματήσατε, θα σας δω την επόμενη φορά για άλλο netcast από.
Στο βίντεο, έχω δημιουργήσει ένα είδος έξι επιπέδων. Το τελικό παράθυρο διαλόγου εμφανίζεται εδώ:

Την ημέρα που έτυχε να εγγράψω τη μακροεντολή, είχα 23 σειρές δεδομένων συν μια επικεφαλίδα. Υπήρχαν επτά θέσεις στη μακροεντολή που κωδικοποίησαν τον αριθμό των σειρών. Αυτά πρέπει να προσαρμοστούν.
Για κάθε επίπεδο ταξινόμησης, υπάρχει κωδικός ως εξής:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
Αυτό είναι ανόητο που η συσκευή εγγραφής μακροεντολών καθορίζει C2: C24. Πρέπει να καθορίσετε μόνο ένα κελί στη στήλη, επομένως αλλάξτε την πρώτη γραμμή παραπάνω σε:
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _
Κάντε μια παρόμοια αλλαγή για καθένα από τα επίπεδα ταξινόμησης.
Κοντά στο τέλος της καταγεγραμμένης μακροεντολής, έχετε τον καταγεγραμμένο κώδικα για να κάνετε την ταξινόμηση. Ξεκινά ως εξής:
With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
Αντί να ταξινομήσετε μόνο A1: E24, αλλάξτε τον κωδικό για να ξεκινήσετε στο A1 και επεκτείνετε στην τρέχουσα περιοχή. (Η τρέχουσα περιοχή είναι αυτό που λαμβάνετε εάν πατήσετε Ctrl + * από ένα κελί).
.SetRange Range("A1").CurrentRegion
Ο τελικός κωδικός που εμφανίζεται στο βίντεο είναι:
Sub HowToSortByColor() HowToSortByColor Macro ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ' Sort column C by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort Column C by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column D by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort column D by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column E by blue font ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("E2"), _ xlSortOnFontColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(0, 176, 240) ' Sort Column A by Values descending ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, _ Order:=xlDescending, _ DataOption:=xlSortNormal ' Perform the Sort With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Σημείωση
Είναι πιθανό ότι το βιβλίο εργασίας σας αποθηκεύεται με επέκταση XLSX. Κάντε ένα Save As για να αλλάξετε σε επέκταση XLSM ή XLSB. Οι μακροεντολές που αποθηκεύονται στο XLSX διαγράφονται.
Excel Thought Of the Day
Ζήτησα από τους φίλους μου στο Excel Master τις συμβουλές τους σχετικά με το Excel. Η σημερινή σκέψη να σκεφτούμε:
"Μια Apple την ημέρα κρατά το VBA μακριά."
Τομ Ουρτίς