Η λύση που είδες, (με τύπους) από τον Θανάση, είναι μια
πάρα πολύ καλή τεκμηρίωση του θέματος, αλλά θα έλεγα,
ότι είναι περισσότερο ένα post για εκπαίδευση, παρά για εφαρμογή σε κάποιο έργο (κατά την γνώμη μου) διότι έχει
κινδύνους,
για μη εξοικειωμένους με την Excel χρήστες.
Κατ' αρχήν,
δεν πρόσεξες, ότι ο Θανάσης δίνει λύση
και για ταξινόμηση
κειμένου.
Η
πρότασή μου λοιπόν είναι, να γίνει με
κώδικα.
Μετονόμασε το κωδικό όνομα φύλλου σε Sh1
Στο φύλλο βάλε τον παρακάτω κώδικα (συμβάν Change)
Κώδικας:
Option Explicit
Dim lRow As Long
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
If Target.Row < 2 Then Exit Sub
If Target.Rows.Count > 1 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub
Application.ScreenUpdating = False
Sh1.Sort.SortFields.Clear
Sh1.Sort.SortFields.Add Key:=Range("B2:B100"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
Sh1.Sort.SortFields.Add Key:=Range("A2:A100"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With Sh1.Sort
.SetRange Range("A2:C100")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
lRow = Sh1.Cells(Rows.Count, 1).End(xlUp).Row + 1
Sh1.Cells(lRow, 1).Activate
End Sub
Τα δεδομένα θα ταξινομηθούν πρώτα κατά Α.Μ.Κ.Α και μετά κατά Ονοματεπώνυμο,
αφού ολοκληρωθεί η καταχώρηση
και στις τρεις στήλες (a, b, c)
Σημείωση:
Τα σημεία
Range("B2:B100"), Range("A2:A100"), Range("A2:C100")
ενδεχομένως να χρειάζονται προσαρμογή στο έργο σας.
Καθώς και οι γραμμές:
If Target.Column <> 3 Then Exit Sub
If Target.Row < 2 Then Exit Sub
Αυτά εξαρτώνται από το ποιες περιοχές θα ταξινομήσετε
αν έχετε κεφαλίδες, γραμμές πάνω από την περιοχή ταξινόμησης και πόσες κλπ.
*Ο πιο πάνω κώδικας, αφορά, το συγκεκριμένο έργο - παράδειγμα.