Θέμα: Συναρτήσεις Αυτόματη Ταξινόμηση

Εμφάνιση ενός μόνο μηνύματος
  #3  
Παλιά 25-04-15, 17:07
Το avatar του χρήστη Spirosgr
Spirosgr Ο χρήστης Spirosgr δεν είναι συνδεδεμένος
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Η λύση που είδες, (με τύπους) από τον Θανάση, είναι μια πάρα πολύ καλή τεκμηρίωση του θέματος, αλλά θα έλεγα,
ότι είναι περισσότερο ένα 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
Αυτά εξαρτώνται από το ποιες περιοχές θα ταξινομήσετε
αν έχετε κεφαλίδες, γραμμές πάνω από την περιοχή ταξινόμησης και πόσες κλπ.

*Ο πιο πάνω κώδικας, αφορά, το συγκεκριμένο έργο - παράδειγμα.

Τελευταία επεξεργασία από το χρήστη Spirosgr : 25-04-15 στις 17:23.
Απάντηση με παράθεση