Excel samples - Χρήσιμα αρχεία & παραδείγματα Αρχεία Ms-Excel διαθέσιμα για τα μέλη του Forum.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 13-08-16, 18:03
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή Σύγκριση περιοχών

Δημιουργός: Γιώργος Καπετανόπουλος (Kapetang)
Ημερομηνία: 13/8/2016
-------------------------------------------------------------------------------------------

Σύγκριση περιοχών

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

Μια λύση στο παραπάνω πρόβλημα δίνεται, με κώδικα (VBA), στο συνημμένο αρχείο.

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

Συνεπώς μπορεί να έχουμε, με βάση τη μορφή των περιοχών, 9 συνδυασμούς.

Ο κώδικας αντιμετωπίζει και τις 9 περιπτώσεις.

Επίσης οι περιοχές μπορεί να είναι στο ίδιο ή σε διαφορετικά φύλλα.

Για τον ορισμό κάθε περιοχής ο χρήστης θα πρέπει να δώσει τα κελιά που την ορίζουν στη μορφή C2:L100 (προσοχή οι χαρακτήρες είναι αγγλικοί) και το όνομα του φύλλου που την περιέχει.

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

Τα παραπάνω στοιχεία συμπληρώνονται σε μια φόρμα χρήστη (User Form).

Στη φόρμα θα πρέπει να τσεκάρουμε ή να καθαρίσουμε ένα CheckBox, αν θέλουμε τα στοιχεία που ανήκουν στη βασική περιοχή ή αυτά που δεν ανήκουν.

Η μέθοδος, σε γενικές γραμμές, εκτελεί τα παρακάτω βήματα:

1) Αντιγράφει τα στοιχεία της βασικής περιοχής σε ένα μονοδιάστατο Array Z

2) Ταξινομεί τα στοιχεία του Array Z

3) Εκτελεί δυαδική αναζήτηση στο ταξινομημένο Array, για κάθε στοιχείο της προς σύγκριση περιοχής και δημιουργεί ένα Array X με τα στοιχεία που ικανοποιούν τους όρους αναζήτησης (ανήκουν ή δεν ανήκουν στη βασική περιοχή).

4) Εμφανίζει το αποτέλεσμα.

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

Σημειώνω ότι, στον υπολογιστή μου, για τη σύγκριση των στηλών που υπάρχουν στο φύλλο [Σύγκριση ...], χρειάζεται 0,5 δευτερόλεπτα, ενώ η προηγούμενη πρότασή μου και του Σπύρου, 14 και 74 δευτερόλεπτα αντίστοιχα.

Για τις προηγούμενες προτάσεις κλικ: http://www.ms-office.gr/forum/excel-...si-stilon.html
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm CompareRegions3.xlsm (600,5 KB, 80 εμφανίσεις)

Τελευταία επεξεργασία από το χρήστη kapetang : 14-08-16 στις 01:15. Αιτία: Αλλαγή συνημμένου (Πιο αξιόπιστη διάκριση αριθμών/ημερομηνιών)
Απάντηση με παράθεση
  #2  
Παλιά 14-08-16, 01:48
Το avatar του χρήστη 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.402
Προεπιλογή

Όταν «χτίζουμε» ένα κώδικα, μας απασχολούν πολλά πράγματα...
Ένα από αυτά είναι και η ταχύτητα...
Σημαντικό μεν, αλλά αυτό, είναι το τελευταίο που θα μας απασχολήσει
και θα το βελτιώσουμε στο τέλος...

Τι να το κάνω αν έχω έναν γρήγορο κώδικα,
αλλά να εξαρτώμαι, από το αν ο χρήστης κάνει λάθη;

Πρέπει λοιπόν, πριν απ' όλα να απαγορεύσω κάποια πράγματα στο χρήστη
και να τον διευκολύνω, σε κάποια άλλα, ώστε να «τρέξει» καλά ο κώδικάς μου.

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

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

Στο βιβλίο που ακολουθεί, υπάρχει ένα υπόδειγμα φόρμας, όπου ο χρήστης:
1. Δεν μπορεί, να πληκτρολογήσει περιοχή...
2. Δεν μπορεί, να τροποποιήσει περιοχή...

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

Περισσότερα στο βιβλίο.

Σημειώσεις:
1
Η εμφάνιση της φόρμας, γίνεται με διπλό κλικ στο a1 κελί κάθε φύλλου...
Αυτό είναι δική μου επιλογή.
Ο καθ' ένας, μπορεί να εμφανίζει την φόρμα, με όποιο τρόπο θέλει.
Σε ένα real έργο, θα το έβαζα στην κορδέλα, με xml.
2
Η φόρμα, «δείχνει» τρόπο εργασίας και δεν αποτελεί σε καμία περίπτωση τελικό project.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm Form SetUp.xlsm (32,8 KB, 42 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 14-08-16, 07:42
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

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

Χαίρομαι που η διασύνδεση χρήστη (User Form) προκάλεσε τόσο "ντόρο".

Πάντως βρίσκω εποικοδομητική την πρόταση του Σπύρου, για τη βελτίωση της φόρμας εισαγωγής στοιχείων (User Form) και ίσως τη χρησιμοποιήσω σε κάποια αναβάθμιση.
Απάντηση με παράθεση
  #4  
Παλιά 14-08-16, 14:55
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

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

Σημείωση:
Παρατήρησα στη φόρμα του Σπύρου, αν επιλέξουμε μια περιοχή και στη συνέχεια ενεργοποιήσουμε ένα άλλο φύλο (χωρίς να κάνουμε επιλογή), όταν μεταφέρουμε τα στοιχεία στη οριστική θέση θα καταχωρηθεί λάθος φύλλο.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm CompareRegions4.xlsm (723,1 KB, 67 εμφανίσεις)

Τελευταία επεξεργασία από το χρήστη kapetang : 14-08-16 στις 15:16.
Απάντηση με παράθεση
  #5  
Παλιά 14-08-16, 19:31
Το avatar του χρήστη 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.402
Προεπιλογή

Είπα...
«2
Η φόρμα, «δείχνει» τρόπο εργασίας και δεν αποτελεί σε καμία περίπτωση τελικό project.»

Χαίρομαι που υιοθετήθηκε...η ιδέα μου!
Απάντηση με παράθεση
  #6  
Παλιά 14-08-16, 22:07
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Έχω τη γνώμη ότι όποιος παρουσιάζει κάποιο θέμα στο φόρουμ έχει τη δυνατότητα αναβάθμισής του.

Συνεπώς, είναι αυτονόητο, οποιαδήποτε κριτική ή επισήμανση αφορά την τρέχουσα έκδοση του θέματος και όχι το άγνωστο τελικό προϊόν.
Απάντηση με παράθεση
  #7  
Παλιά 16-08-16, 15:03
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

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

Τώρα, για τους παρακάτω λόγους, διατηρώ πολλές επιφυλάξεις:

1. Οι φόρμες που επιτρέπουν την εισαγωγή με επιλογή, υλοποιούνται ως μη αποκλειστικές (όχι Modal).

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

Θα μπορούσε για παράδειγμα να διαγράψει φύλλα εργασίας.

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

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

2. H Microsoft, παρέχει για την εισαγωγή περιοχών, τη μέθοδο Application.InputBox(Type:=8).

Στη φόρμα εισαγωγής που εμφανίζεται, επιτρέπει εισαγωγή μόνο με πληκτρολόγηση στο σχετικό πλαίσιο κειμένου ή επιλογή με το ποντίκι.

Έκρινε, μάλλον, ότι μια μεγαλύτερη ελευθερία ήταν επικίνδυνη.
Απάντηση με παράθεση
  #8  
Παλιά 19-08-16, 10:53
Το avatar του χρήστη 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.402
Προεπιλογή

Η Microsoft, δεν δημιούργησε τα InputBoxes, ως μια πιο ασφαλή μέθοδο εισαγωγής.
Ο σκοπός είναι άλλος και φυσικά τα InputBoxes, έχουν πάρα πολλά «τρωτά» σημεία.

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

Οι μη αποκλειστικές φόρμες, παρ' όλο που επιτρέπουν στο χρήστη, να κάνει άλλες ενέργειες
παραμένουν ορατές στο παράθυρο...

Το σενάριο αυτό δεν υπάρχει...
Γιατί;
Έχω δεδομένα, σε τρία φύλλα για τους πελάτες μου, τους προμηθευτές και τα προϊόντα μου.
Κάθε φύλλο, έχει δεδομένα που τα «έφτιαξα» με κόπο και έχουν από 500 έως 2000 γραμμές
το καθένα και ανάλογες στήλες, πχ 10-20.

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

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

Το σίγουρο είναι, ότι θα αποφύγουμε τα πολλά και σοβαρά ελαττώματα, ενός InputBox,
(και στις δύο μορφές του) ανεξάρτητα από τις ιδιότητες ή την χρήση του...
Απάντηση με παράθεση
  #9  
Παλιά 19-08-16, 13:57
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Δεν είμαι οπαδός του InputBox, για εισαγωγή περιοχών, λόγω των περιορισμών που επιβάλει.

Ωστόσο, για μένα, το ερώτημα παραμένει. Γιατί η Microsoft επέβαλε τους αντιπαθείς περιορισμούς και δεν υλοποίησε το InputBox ως μη αποκλειστική φόρμα;

Οι ενέργειες των χρηστών μπορεί να είναι και τυχαίες…..

Οι προγραμματιστές, με κάποια χρόνια στη δουλειά, έχουν δει ενέργειες χρηστών που δεν τις φαντάζονταν. Τελείως παράλογες….

Γενικά, οι προγραμματιστές, θεωρούν τους χρήστες απρόβλεπτους και αναμένουν τα «χειρότερα».

Εδώ έρχεται ο κώδικας για να κλείσει τις "τρύπες" της διασύνδεσης….

Τελευταία επεξεργασία από το χρήστη kapetang : 20-08-16 στις 14:33. Αιτία: αντί τις => της
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι σε λειτουργία
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
Δημιουργία περιοχών με «εμφάνιση» πίνακα. Spirosgr Excel - Tips & Tricks 0 05-09-15 18:57
[Γενικά] Σύγκριση και μεταφορά GG10482 Excel - Ερωτήσεις / Απαντήσεις 7 22-05-15 13:38
[Συναρτήσεις] Σύγκριση Δεδομένων nvb Excel - Ερωτήσεις / Απαντήσεις 2 09-12-13 08:38
Σύγκριση πινάκων sakis Access - Ερωτήσεις / Απαντήσεις 6 11-03-13 22:32
[Συναρτήσεις] Σύγκριση Τιμών ΤΖΙΜΗΣ Excel - Ερωτήσεις / Απαντήσεις 3 16-09-12 20:34


Η ώρα είναι 03:01.