Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Excel07] Προσαρμοσμένη ταξινόμηση (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/720-prosarmosmeni-taksinomisi.html)

mdragon 04-09-10 08:57

Προσαρμοσμένη ταξινόμηση
 
1 Συνημμένο(α)
Καλημέρα σε όλους,
το θεματάκι μου έχει ως εξής:
Καταχωρώ σε ένα excel προμηθευτές και τα τιμολόγια που τους χρωστάω, θα ήθελα λοιπόν η αρίθμηση στην στήλη Α να γίνεται με αύξοντα αριθμό και μόνο για κάθε νέα καταχώρηση στη στήλη των προμηθευτών.
Ανεβάζω συνημμένο για να καταλάβετε τι εννοώ.


Ευχαριστώ,
Μάρω

kapetang 04-09-10 10:04

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

Μάρω προτείνω μια απλή λύση (έναν απλό τύπο), που πιθανόν να μη σε βολεύει.
Στη λύση αυτή οι αριθμοί στη στήλη Α θεωρούνται σαν αριθμοί ταυτότητας των προμηθευτών.

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

kapetang 04-09-10 15:10

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

Μάρω το ξανακοίταξα και βρήκα καλύτερη λύση.
Στο αρχείο, που επισυνάπτω (.xls 2003), υπάρχει μία μακροεντολή (mcrCount) η οποία αν εκτελεστεί, αφού γίνουν οι καταχωρήσεις στη στήλη B, γεμίζει κατάλληλα τη στήλη A.
Στην access 2003, που έχω, μπορείς να τη δεις και να την εκτελέσεις με την επιλογή: Εργαλεία > Μακροεντολή > Μακροεντολές.
Μπορείς επίσης να την εκτελέσεις πατώντας το συνδυασμό πλήκτρων: Ctrl + m.
Ο κώδικας βασίζεται στη θέση των δεδομένων στο φύλλο1. Αν συνεπώς αλλάξει θα πρέπει να προσαρμοστεί.
Ειδικά ο κώδικας έχει μία δομή επανάληψης (Do Loop) που σταματά όταν το τελευταίο κελί στη στήλη B είναι κενό ή γράφει : ΣΥΝΟΛΑ.

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

mdragon 06-09-10 08:24

Γιώργο,
σε ευχαριστώ για το χρόνο σου. Προτίμησα την πρώτη εκδοχή χρησιμοποιώντας μορφοποίηση υπό όρους στην πρώτη στήλη. Είναι μέσο "Λαμίας" αλλά με την μακροεντολή μου κόλλησε.




Την καλημέρα μου,
Μάρω

kapetang 06-09-10 19:07

Καλησπέρα

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

Dim col As New Collection
Dim i As Integer
Dim intC As Integer

Range("B1:C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

On Error Resume Next
i = 2: intC = 0
With Worksheets("Φύλλο1")
Do Until .Cells(i, 2) = "ΣΥΝΟΛΑ" Or .Cells(i, 2) = ""
col.Add .Cells(i, 2), .Cells(i, 2)
If col.Count > intC Then
.Cells(i, 1) = col.Count
Else
.Cells(i, 1) = ""
End If
intC = col.Count
i = i + 1
Loop
End With
Set col = Nothing
Range("A1").Select
Α. Δημιουργία μακροεντολής
1. Μενού Εργαλεία > Μακροεντολή > Μακροεντολές
2. Στο παράθυρο Μακροεντολές γράφουμε το όνομα της μακροεντολής (πχ mcrCount) και πατούμε το κουμπί Δημιουργία.
3. Στο παράθυρο που ανοίγει επικολλούμε τον κώδικα ανάμεσα στις γραμμές Sub και End Sub και στο μενού επιλέγουμε Debung > Compile VBAProject. Κλείνουμε το παράθυρο του κώδικα.
4. Ανοίγουμε πάλι το παράθυρο Μακροεντολές (βήμα 1) και πατούμε το κουμπί Επιλογές και στο παράθυρο που εμφανίζεται επιλέγουμε ένα συνδυασμό πλήκτρων για την εκτέλεση της μακροεντολής (πχ ctrl+m).
Β. Χρήση της Μακροεντολής
1. Καταχωρούμε τους προμηθευτές και τα τιμολόγια (χωρίς τη γραμμή αθροίσματος).
2. Εκτελούμε τη μακροεντολή πατώντας τον κατάλληλο συνδυασμό πλήκτρων (ctrl+m). Η μακροεντολή θα ταξινομήσει τη λίστα με βάση τη στήλη B και θα απαριθμήσει τους διαφορετικούς προμηθευτές στη στήλη A.
3. Προσθέτουμε (χειροκίνητα) το άθροισμα στο τέλος.
Αν βρεις χρόνο και διάθεση, για να το δοκιμάσεις, σου εύχομαι καλή επιτυχία.

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

nisgia 07-09-10 09:38

Καλημέρα στη παρέα!

Μάρω, κάνε μια ακόμη δοκιμή αν θέλεις με τον παρακάτω τύπο στο κελί Α2
και συμπληρωμένο προς τα κάτω:

=IF(MATCH(B2;B:B;0)=ROW();COUNT($A$1:A1)+1;"")

Δεν χρειάζεται ταξινόμηση η λίστα αλλά το αποτέλεσμα θα είναι απλά ένας μεταβλητός
αύξων αριθμός για κάθε ξεχωριστό προμηθευτή και όχι μοναδικό αναγνωριστικό (ID).
Αν αυτό δεν σε πειράζει, νομίζω πως είναι η πιο απλή λύση.:worry:

Φιλικά,
Γιάννης.

mdragon 07-09-10 09:45

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


Γιάννη, με καλύπτει αρκετά, αν βρεις χρόνο πες μου πως μπορώ να το κάνω στα ενδιάμεσα κενά να μην μου βγάζει #Δ/Υ.


Ευχαριστώ πολύ για το χρόνο σας,
Μάρω

nisgia 07-09-10 10:23

Παράθεση:

Αρχική Δημοσίευση από mdragon (Μήνυμα 3543)
Γιάννη, με καλύπτει αρκετά, αν βρεις χρόνο πες μου πως μπορώ να το κάνω στα ενδιάμεσα κενά να μην μου βγάζει #Δ/Υ.

Ευχαριστώ πολύ για το χρόνο σας,
Μάρω

Απλά Μάρω, θα πρέπει να παρθεί άλλη μια απόφαση:

=IF(LEN(B2);IF(MATCH(B2;B:B;0)=ROW();COUNT($A$1:A1 )+1;"");"")

Χαίρομαι που σε καλύπτει!
Γιάννης

mdragon 07-09-10 11:40

Να σαι καλά βρε Γιάννη,




Ευχαριστώ,
Μάρω

Tasos 07-09-10 15:50

Καλησπέρα κι από μένα!

Αν χρειαστεί, για να δωθεί μοναδικό αναγνωριστικό (ID) στους προμηθευτές στη στήλη B,
μπορεί να χρησιμοποιηθεί:

Στο κελί A2 ο αριθμός 1

Στο κελί A3 (μπορεί να αντιγραφεί στα κελια κάτω από το A3):

Κώδικας:

=IF(B3="";"";IF(IFERROR(MATCH(B3;$B$2:B2;0);0)=0;MAX($A$2:A2)+1;INDEX($A$2:A2;MATCH(B3;$B$2:B2;0))))


Σημείωση:

  • Ο τύπος είναι φτιαγμένος για Excel > 2003
  • Τα δεδομένα της στήλης B θα πρέπει να είναι ταξινομημένα.
  • Η τιμή του "αναγνωριστικού" μπορεί να μεταβληθεί αν προστεθούν νέοι προμηθευτές!

Φιλικά

Τάσος


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

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


Search Engine Optimization by vBSEO 3.3.2