Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Αυτόματη Ταξινόμηση (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/3659-aytomati-taksinomisi.html)

xristos 24-04-15 18:06

Αυτόματη Ταξινόμηση
 
1 Συνημμένο(α)
Φίλοι του Φόρουμ Καλησπέρα
Έχω ένα πρόβλημα όπως θα δείτε στο συνημμένο έγγραφο
στην στήλη Α γράφω ονόματα και στην στήλη Β γράφω τον ΑΜΚΑ
σε μορφή κειμένου λόγω του 0 και στην στήλη C την τράπεζα του καθενός.
Αυτό που θέλω είναι να ταξινομούνται αυτόματα βάση της στήλης Β (ΑΜΚΑ)
και οι τρεις στήλες συγχρόνως
κάθε φορά που περνάω νέα εγγραφή
χωρίς να πηγαίνω να το κάνω χειροκίνητα την ταξινόμηση.
Βρήκα στο φόρουμ κάτι ανάλογο του Θανάση
στον σύνδεσμο http://www.ms-office.gr/forum/excel-...nartiseis.html
αλλά είναι για μία στήλη.
Σας ευχαριστώ για τον χρόνο σας.

xristos 24-04-15 19:15

ψάχνοντας στις συναρτήσεις
βρήκα λύση με βοηθητικές στήλες
και με τις συναρτήσεις RANK και VLOOKUP
αλλά μόνο όταν είναι αριθμοί
μόλις βάζω τους αριθμούς σε μορφή κειμένου
δεν δουλεύει.
Γι' αυτό τον λόγο θα ήθελα την βοήθειά σας και αν γίνεται φυσικά
σε μορφή κειμένου γιατί υπάρχουν ΑΜΚΑ που ξεκινούν από 0.....
Σας ευχαριστώ

Spirosgr 25-04-15 17:07

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

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

xristos 25-04-15 20:36

1 Συνημμένο(α)
Φίλοι του Φόρουμ Καλησπέρα.
Σπύρο για άλλη μια φορά σε ευχαριστώ πολύ για τον χρόνο σου και την βοήθειά σου
αλλά όπως θα δεις στο συνημμένο έγγραφο
πρέπει να έκανα σωστά όσο μου είπες
αλλά το πρόγραμμα δεν δουλεύει
μήπως έχει σχέση με το πρόβλημα που έχει ο υπολογιστής μου
όπως αναφέρω στον σύνδεσμό : http://www.ms-office.gr/forum/excel-...anazitisi.html
στο οποίο δεν έχω πάρει ακόμα απάντηση.
Αν δεν το έχω κάνει σωστά πέσμου πως πρέπει να το κάνω
Σε ευχαριστώ πολύ και πάλι.

Spirosgr 25-04-15 22:00

Ο κώδικας έχει αντιγραφεί σωστά.
Δουλεύει κανονικά.

Αν στον υπολογιστή, κάτι δούλευε κανονικά και δεν έγιναν αλλαγές λογισμικού, ρυθμίσεων κλπ
τότε μια επαναφορά σε προηγούμενο σημείο πιθανό να έλυνε το πρόβλημα.

Θυμήσου τι έχεις κάνει στον υπολογιστή, από την τελευταία φορά που δούλεψε σωστά, μέχρι την πρώτη που δεν δούλεψε.

xristos 26-04-15 15:19

Σπύρο καλησπέρα και σε ευχαριστώ :thanks:
Παράθεση:

Αν στον υπολογιστή, κάτι δούλευε κανονικά και δεν έγιναν αλλαγές λογισμικού, ρυθμίσεων κλπ
τότε μια επαναφορά σε προηγούμενο σημείο πιθανό να έλυνε το πρόβλημα.
Δεν έχω κάνει αλλαγές λογισμικού. Τώρα στις ρυθμίσεις δεν γνωρίζω τι μπορεί να έχω κάνει εκτός από τις ρυθμίσεις μακροεντολών.
Θα ήθελα να με βοηθήσεις να κάνω
Παράθεση:

τότε μια επαναφορά σε προηγούμενο σημείο πιθανό να έλυνε το πρόβλημα.
πως μπορώ να το κάνω αυτό
γιατί μου έχει κόψει τα πόδια..............
Αυτή η βοήθειά σου πιστεύω θα είναι μία από τις μεγαλύτερες που
μου έχετε προσφέρει όλοι εσείς οι στυλοβάτες του φόρουμ

kapetang 26-04-15 16:41

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στο συνημμένο αρχείο έκανα κάποιες αλλαγές για να δίνει σωστά αποτελέσματα (δεν ταξινομούσε σωστά την 1η γραμμή των δεδομένων τη θεωρούσε ετκέτα).

Σημειώνω ότι ταξινόμηση γίνεται μόνο αν γίνουν αλλαγές στην 3η στήλη των δεδομένων.

Φιλικά/Γιώργος

Spirosgr 26-04-15 18:44

Γιώργο

Η διατύπωση:
«Στο συνημμένο αρχείο έκανα κάποιες αλλαγές για να δίνει σωστά αποτελέσματα (δεν ταξινομούσε σωστά την 1η γραμμή των δεδομένων τη θεωρούσε ετκέτα).»

«λέει» σε κάποιον, ότι ο κώδικάς μου, είναι λάθος και δίνει λάθος αποτελέσματα και
γράφεις τον σωστό και διορθωμένο εσύ.

Αν έκανες τον κόπο να διαβάσεις την Σημείωση:
----------------------------------------------------------------------
Σημείωση:

Τα σημεία
Range("B2:B100"), Range("A2:A100"), Range("A2:C100")

ενδεχομένως να χρειάζονται προσαρμογή στο έργο σας.

Καθώς και οι γραμμές:
If Target.Column <> 3 Then Exit Sub
If Target.Row < 2 Then Exit Sub

Αυτά εξαρτώνται από το ποιες περιοχές θα ταξινομήσετε
αν έχετε κεφαλίδες, γραμμές πάνω από την περιοχή ταξινόμησης και πόσες κλπ.

-----------------------------------------------------------------------------------------------------------------------------
δεν θα έπρεπε να απαντήσεις , με αυτήν την διατύπωση.

Οι αλλαγές σου δεν είναι τίποτε άλλο από το
Range("B2:B100") σε Range("B1")
Range("A2:A100") σε Range("A1") και
Range("A2:C100") σε Range("A1:C100")

που μνημονεύονται στην σημείωση.

Στην ουσία για το συγκεκριμένο έργο όπως το έχω θα αρκούσε το
.Header = xlNo αντί .Header = xlYes
για να μην ταλαιπωρείσαι περισσότερο.

Ακόμα το:
«Σημειώνω ότι ταξινόμηση γίνεται μόνο αν γίνουν αλλαγές στην 3η στήλη των δεδομένων.»

Το αναφέρω εδώ:
----------------------------------------------------------------------------------------------------------------------------
«Τα δεδομένα θα ταξινομηθούν πρώτα κατά Α.Μ.Κ.Α και μετά κατά Ονοματεπώνυμο,
αφού ολοκληρωθεί η καταχώρηση και στις τρεις στήλες (a, b, c)»

kapetang 26-04-15 18:49

Φίλε μου είσαι αρκετά εύθικτος.

Δεν είχα καμιά πρόθεση να σε υποτιμήσω.

Απλά ο κώδικάς σου δεν ήταν προσαρμοσμένος στο παράδειγμα που είχε επικεφαλίδες.

Spirosgr 26-04-15 19:00

Ο κώδικας, είναι παραδειγματικός.
Κάθε χρήστης, τον προσαρμόζει στο έργο του, αφού διαβάσει και τις σημειώσεις.
Γι' αυτό άλλωστε και δεν ήταν σε κάποιο συνημμένο, αλλά απ' ευθείας στο φόρουμ.

kapetang 26-04-15 19:40

Δηλαδή δεν έπρεπε να ενημερώσω το Χρήστο ότι δεν έκανε σωστή προσαρμογή;

Spirosgr 26-04-15 20:47

Ααα ναι Ok!
Μόνο που το πρόβλημα του Χρίστου, δεν είναι η προσαρμογή του κώδικα, αλλά ο υπολογιστής του...

kapetang 26-04-15 21:48

Η απάντησή σου στο μήνυμα #4 του Χρήστου είναι.

«Ο κώδικας έχει αντιγραφεί σωστά.
Δουλεύει κανονικά.».

Έτσι για να μη μείνει με την εντύπωση ότι προσάρμοσε σωστά τον κώδικα, σκέφτηκα να τον ενημερώσω.

Δεν καταλαβαίνω συνεπώς την ειρωνεία «Ααα ναι Ok!».

Για μένα το θέμα έκλεισε.Δε σκοπεύω να το συνεχίσω.

xristos 26-04-15 23:25

Φίλοι του Φόρουμ καλησπέρα και ευχαριστώ και τους δυό σας
για την βοήθειά σας, αλλά δεν μου δώσατε μία λύση
στο πρόβλημα που ανέφερα προηγουμένως δηλ.
Παράθεση:

Αν στον υπολογιστή, κάτι δούλευε κανονικά και δεν έγιναν αλλαγές λογισμικού, ρυθμίσεων κλπ
τότε μια επαναφορά σε προηγούμενο σημείο πιθανό να έλυνε το πρόβλημα
.
Δεν έχω κάνει αλλαγές λογισμικού. Τώρα στις ρυθμίσεις δεν γνωρίζω τι μπορεί να έχω κάνει εκτός από τις ρυθμίσεις μακροεντολών.
Θα ήθελα να με βοηθήσεις να κάνω
Παράθεση:

τότε μια επαναφορά σε προηγούμενο σημείο πιθανό να έλυνε το πρόβλημα
.
πως μπορώ να το κάνω αυτό
γιατί μου έχει κόψει τα πόδια..............
Αυτή η βοήθειά σου πιστεύω θα είναι μία από τις μεγαλύτερες που
μου έχετε προσφέρει όλοι εσείς οι στυλοβάτες του φόρουμ

Spirosgr 28-04-15 09:39

Χρίστο, αυτό το πρόβλημα, δεν λύνεται από μακριά
Πρέπει να τα πούμε, να συνδεθούμε και να δω τι γίνεται στην πράξη.

xristos 28-04-15 10:21

Φίλοι του φόρουμ Καλημέρα.
Σπύρο σε ευχαριστώ πολύ για άλλη μια φορά.
Το μεσημέρι που θα πάω στο σπίτι
θα προσπαθήσω να κάνω Επαναφορά συστήματος
και αν δεν λυθεί τότε ναι θα ήθελα να συνδεθούμε
μέσω του προγράμματος (δεν θυμάμαι πως λέγεται & πιστεύω ότι το έχω)
για να το δεις.
Αν σε περίπτωση δεν το διορθώσω
πως θέλεις να συνδεθούμε;;;; Να σε πάρω τηλ ή διαφορετικά
Γράψε μου στο email μου
Σε ευχαριστώ πολύ-πολύ


Η ώρα είναι 15:35.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2