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/2989-aytomati-taksinomisi.html)

xristos 07-02-14 21:32

Αυτόματη Ταξινόμηση
 
1 Συνημμένο(α)
Φίλοι του φόρουμ Καλησπέρα.
Πριν γράφω το πρόβλημά μου
κοίτα αν υπάρχει κάποιο θέμα στο φόρουμ
και βρήκα αρκετά, αλλά όλα ήταν διαφορετικά από το δικό μου.
Όπως θα δείτε και στο συνημμένο
στο φύλλο Ευρετήριο έρχονται τα δεδομένα με σύνδεση
Θα ήθελα αν π.χ πάω στο φύλλο 22 και γράψω ένα όνομα
να ταξινομηθεί αυτόματα μαζί με τα άλλα δεδομένα του φύλλου.
Πιστεύω να μην σας μπέρδεψα.
Σας ευχαριστώ για τον χρόνο σας.

GeorgeK 08-02-14 03:11

Αυτόματη Ταξινόμηση
 
1 Συνημμένο(α)
Καλημέρα Χρήστο

Σε κάθε φύλο αντέγραψε τον παρακάτω κώδικα

Κώδικας:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("f4:f39")) Is Nothing Then
    Range("range1").Sort key1:=Range("b5"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End If
End Sub

όπου range("range1") η περιοχή Α4:F39. Μπορείς βέβαια να ονομάσεις τις περιοχές σου όπως σε βολεύει ή να μην τις ονομάσεις καθόλου.
Καταχωρείς τις εγγραφές σου και προχωράς στο επόμενο κελί με tab. Μόλις καταχωρήσεις το ποσό στη στήλη ΠΙΣΤΩΣΗ και πατήσεις tab θα γίνει η ταξινόμηση αυτόματα με κριτήριο το ΟΝΟΜΑΤΕΠΩΝΥΜΟ ( key1:=Range("b5")) Αν θέλεις να γίνει ως προς άλλη στήλη άλλαξε το b5
Στο συνημμένο ο κώδικας είναι στο πρώτο φύλο
Προσοχή: 1) Δεν μπορείς να κάνεις undo. 2) Αν δε φτάσεις μέχρι τη στήλη F δε θα γίνει ταξινόμηση 3) Έχω προσθέσει μια ενδιάμεση γραμμή για να γίνετε η ταξινόμηση επειδή η πρώτη γραμμή είναι merged

Γιώργος

Spirosgr 08-02-14 10:58

Καλημέρα
Φίλε Χρήστο δεν έχω καταλάβει τι θέλεις να κάνεις με αυτό το project που στήνεις.
Μήπως πρέπει να το ξανασκεφτείς τώρα που είναι αρχή ακόμα;
Έχεις καρτέλες τιμολογίων χωρίς να υπάρχει πουθενά στήλη με τα στοιχεία τιμολογίων.
Αν έρθει πελάτης 31 και του φτιάξεις καρτέλα που θα είναι το όνομα του στο ευρετήριο
αν λέγετε Βαγγέλης ... στον πάτο της λίστας;
Τι ρόλο παίζει η στήλη πελάτη σε κάθε καρτέλα αν κάθε πελάτης έχει δική του καρτέλα;
Πάντα οι αρνητικές τιμές τιμές σε καρτέλα δείχνουν πιστωτικό υπόλοιπο.
Εδώ θέλεις να είναι αρνητικό αυτό που σου χρωστάνε....(χρεωστικό)
Γιατί πρέπει να επαναλαμβάνεται το τελευταίο υπόλοιπο;
Τι θα γράψεις και που αν κάποιος πελάτης επιστρέψει κάτι και πρέπει να εκδοθεί πιστωτικό τιμολόγιο;
Και τεχνικά δύο πράγματα που έχουμε κατ' επανάληψιν πει είναι
1. Μην βάζετε συγχωνευμένα (επέλεξε μου την Β στήλη μιας καρτέλας)
2. Μην ονομάζετε καρτέλες με αριθμούς 1,2...κλπ
Συγνώμη για τις "παρατηρήσεις" αλλά αν έχω καταλάβει θέλεις να φτιάξεις κάτι που να διαχειρίζεται
πελάτες, εισαγωγή εξαγωγή προϊόντος, και τιμολόγια και υπόλοιπα πελατών
Φίλε Χρήστο αυτό δεν θα σου κάνει την δουλειά...

xristos 08-02-14 16:14

1 Συνημμένο(α)
Φίλοι του φόρουμ Καλησπέρα.
Φίλοι Γιώργο & Σπύρο σας ευχαριστώ για τον χρόνο σας και την βοήθειά σας.
Πρώτα θέλω να σας πω ένα μεγάλο ΣΥΓΝΩΜΗ γιατί σας έστειλα λάθος συνημμένο,
το οποίο δεν απέχει πολύ από το σωστό.
Φίλε Γιώργο θα απευθυνθώ πρώτα σε σένα.
Σε ευχαριστώ για το κωδικό και θα το χρησιμοποιήσω όταν το χρειαστώ,
αλλά εγώ ήθελα να γίνεται η αυτόματη ταξινόμηση στο φύλο ΕΥΡΕΤΗΡΙΟ
και φυσικά να ταξινομείται κάθε εγγραφή όλη μαζί μαζί με τα ποσά.
Δηλ. όταν πάω στο φύλλο 25 και γράψω όνομα Βήτα και τα ποσά στο φύλλο ΕΥΡΕΤΗΡΙΟ
να ταξινομείται με τα ποσά μαζί.
Τώρα φίλε Σπύρο να σου απαντήσω στα ερωτήματά σου
Παράθεση:

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

Αν έρθει πελάτης 31 και του φτιάξεις καρτέλα που θα είναι το όνομα του στο ευρετήριο
αν λέγετε Βαγγέλης ... στον πάτο της λίστας;
αυτό ζητάω και εγώ όταν πάω στην καρτέλα 31 και γράψω να πηγαίνει μετά στο φύλλο ΕΥΡΕΤΗΡΙΟ και να ταξινομείται αυτόματα
Παράθεση:

Τι ρόλο παίζει η στήλη πελάτη σε κάθε καρτέλα αν κάθε πελάτης έχει δική του καρτέλα;
έχω βάλει το όνομα στην καρτέλα για να πηγαίνει αυτόματα στο φύλλο ΕΥΡΕΤΗΡΙΟ. (Όλες οι καρτέλες καταλήγουν στο ΕΥΡΕΤΗΡΙΟ)
Παράθεση:

Γιατί πρέπει να επαναλαμβάνεται το τελευταίο υπόλοιπο;
γιατί υπάρχει τύπος και θα πρέπει να υπάρχει σε όλα τα κελιά
Παράθεση:

2. Μην ονομάζετε καρτέλες με αριθμούς 1,2...κλπ
τα ονόμασα έτσι για ευκολία και συντομία.
Παράθεση:

Συγνώμη για τις "παρατηρήσεις" αλλά αν έχω καταλάβει θέλεις να φτιάξεις κάτι που να διαχειρίζεται
πελάτες, εισαγωγή εξαγωγή προϊόντος, και τιμολόγια και υπόλοιπα πελατών
Φίλε Χρήστο αυτό δεν θα σου κάνει την δουλειά...
Αυτό που πρέπει να ζητάει ΣΥΓΝΩΜΗ είμαι εγώ που σας ταλαιπωρώ. Όσο αφορά τις καρτέλες αυτές είναι βοηθητικές όπως προανέφερα, απλά να γνωρίζει ο φίλος μου ποιός του χρωστάει πόσα δεν κόβει τιμολόγια.
Έγραψα πολλά αλλά είμαι της άποψης ότι όσα περισσότερα γράφεις τόσο το
καλύτερο γιατί μπορεί να βγει κάτι καινούργιο.
Θέλω να σας πω και πάλι ΣΥΓΝΩΜΗ για το λάθος συνημμένο αλλά όπως θα δείτε
δεν διαφέρει πολύ στο ότι θέλω να γίνεται η αυτόματη ταξινόμηση στο φύλλο ΕΥΡΕΤΗΡΙΟ
Σας ευχαριστώ και πάλι

xristos 08-02-14 16:52

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

xristos 08-02-14 17:04

1 Συνημμένο(α)
Σας στέλνω το συνημμένο που ξέχασα

GeorgeK 08-02-14 17:25

Αυτόματη Ταξινόμηση
 
Καλησπέρα Χρήστο

Θα πρέπει να βάλεις τον κώδικα στο Worksheet_SelectionChange event για να λειτουργήσει. Όχι σε ένα module.

Στο παράθυρο του κώδικα επέλεξε από τις αναπτυσσόμενες λίστες Worksheet στο αριστερό βελάκι και Selection Change στο δεξί.

Θα πρέπει:
1) όλα τα φύλα να έχουν την ίδια μορφή που έχει το φύλο 1 που έχει τον κώδικα. Δηλαδή η τρίτη γραμμή κενή και ο πίνακας με τα στοιχεία σου να ξεκινάει από τη γραμμή 4.
2) να ονομάσεις τον πίνακα με τα δεδομένα σου range1 όπως το έχω βάλει. Αν δε θες να τον ονομάσεις, πρέπει να ορίσεις εσύ την περιοχή ταξινόμησης. Σε κάθε φύλο να έχεις διαφορετικό όνομα περιοχής range1, range2 κοκ
3) ο πίνακας σε όλα τα φύλα να έχει τις ίδιες διαστάσεις (μέχρι τη γραμμή 39)

Αν υπάρχει περίπτωση να αλλάξουν οι πίνακες δομή θα χρειαστεί κάτι πιο δυναμικό και ερχόμαστε σε αυτό που σωστά παρατήρησε ο Σπύρος. Τη δομή που θέλεις να έχεις

Για την ταξινόμηση στο πρώτο φύλο θα επανέρθω

Ελπίζω να σε βοήθησα
Γιώργος

xristos 08-02-14 18:04

1 Συνημμένο(α)
Φίλε Γιώργο σε ευχαριστώ για την αμεσότητά σου
βλέπω και οι δύο ήμαστε μπροστά στον Η/Υ :048:
Λοιπόν έκανα ότι είπες
Παράθεση:

1) όλα τα φύλα να έχουν την ίδια μορφή που έχει το φύλο 1 που έχει τον κώδικα
έκανα αντιγραφή επικόλληση για να είναι ίδιο
Παράθεση:

Θα πρέπει να βάλεις τον κώδικα στο Worksheet_SelectionChange event για να λειτουργήσει.
Παράθεση:

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



ΥΣ: Σου υπενθυμίζω ότι την ταξινόμηση στο καινούργιο συνημμένο που έστειλα πριν την απάντησή σου είναι στο φύλλο ΕΥΡΕΤΗΡΙΟ

GeorgeK 08-02-14 18:11

1 Συνημμένο(α)
Χρήστο,

Είχες ξεχάσει να ορίσεις την περιοχή που χαρακτηρίζεται σαν range2.
Στο συνημμένο στο διόρθωσα. Αριστερά από τη formula bar, στο πλαίσιο που έχει και αφού πρώτα έχεις επιλέξει μια περιοχή κελιών, πληκτρολογείς το όνομα που θες και πατάς enter. Η περιοχή που επέλεξες αποθηκεύεται με το όνομα που της έδωσες.

Γιώργος

GeorgeK 08-02-14 18:27

Για την ταξινόμηση στο φύλο Ευρετήριο βάλε την παρακάτω macro στο event Worksheet Activate.

Κώδικας:

Private Sub Worksheet_Activate()
 Range("A1:C31").Select
    ActiveWorkbook.Worksheets("Ευρετήριο").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ευρετήριο").Sort.SortFields.Add Key:=Range( _
        "B2:B31"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Ευρετήριο").Sort
        .SetRange Range("A1:C31")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Γιώργος


Η ώρα είναι 11:30.

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


Search Engine Optimization by vBSEO 3.3.2