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/2739-sygkentrosi-dedomenon.html)

Flashgordon61 13-10-13 13:20

Συγκέντρωση δεδομένων
 
1 Συνημμένο(α)
Καλησπέρα σε όλους
Παρακαλώ την βοήθειά σας για το παρακάτω.
Ένα αρχείο (3500 γραμμών & 45 στηλών) αποστέλλεται σε 55 συναδέλφους.
Το αρχείο είναι ένα πελατολόγιο στο οποίο καταμετράτε ο χρόνος του κάθε συναδέλφου
στον κάθε πελάτη μηνιαίως .
Οι συνάδελφοι χωρίζονται σε 6 κατηγορίες και καλούνται να ενημερώσουν το αρχείο αναλόγως , (στις στήλες με την κίτρινη σκίαση).
Με βάση τα παραπάνω, (παίρνοντας 55 αρχεία Excel) , καλούμε να συγκεντρώσω τα στοιχεία , σε ένα αρχείο.

Καμιά ιδέα …………….

Παρακαλώ την βοήθειά σας , έχω πελαγώσει!!!!!!!!

Γιώργος.

Σημείωση : Το επισυναπτόμενο αρχείο είναι 100 γραμμών , γιατί ένα αρχείο (3500 γραμμών & 45 στηλών) θα ήταν σε μέγεθος , μεγαλύτερο από το επιτρεπτό όριο επισύναψης.

ChrisGT7 13-10-13 20:37

Έστω ότι η Ε κατηγορία περιέχει 10 συναδέλφους σου. Καθένας τους θα πρέπει να στείλει το αρχείο συμπληρωμένο με το όνομά του και το χρόνο που ήταν στον κάθε πελάτη αφού γράψει τα στοιχεία αυτά στην 5η τριάδα κίτρινων στηλών;

Δηλαδή θα έχεις 10 αρχεία από την Ε κατηγορία για να συγκεντρώσεις τα στοιχεία σ' ένα αρχείο; Έτσι γίνεται και για τις υπόλοιπες κατηγορίες συναδέλφων;

Flashgordon61 13-10-13 22:03

Παράθεση:

Αρχική Δημοσίευση από ChrisGT7 (Μήνυμα 15894)
Έστω ότι η Ε κατηγορία περιέχει 10 συναδέλφους σου. Καθένας τους θα πρέπει να στείλει το αρχείο συμπληρωμένο με το όνομά του και το χρόνο που ήταν στον κάθε πελάτη αφού γράψει τα στοιχεία αυτά στην 5η τριάδα κίτρινων στηλών;

Δηλαδή θα έχεις 10 αρχεία από την Ε κατηγορία για να συγκεντρώσεις τα στοιχεία σ' ένα αρχείο; Έτσι γίνεται και για τις υπόλοιπες κατηγορίες συναδέλφων;

Φίλε Χρήστο, είναι ακριβώς έτσι.

Τα 55 αρχεία που θα παραλάβω θα είναι όμοια εκτός από τις στήλες με την κίτρινη σκίαση.

Γιώργος

Tasos 14-10-13 01:56

1 Συνημμένο(α)
Γεια σας!
Στο συνημμένο παράδειγμα ο χρήστης επιλέγει μέσα από παράθυρο διαλόγου τα αρχεία *.xls* προς εισαγωγή.

Τα δεδομένα του φύλλου "Database" του καθενός αρχείου θα συγκεντρωθούν στο φύλλο "AllData" του συνημμένου.

Καλή συνέχεια!

Τάσος

Flashgordon61 14-10-13 11:34

1 Συνημμένο(α)
Τάσο , σ’ ευχαριστώ , αλλά αυτό δεν μου λύνει το πρόβλημα.
Αυτό ίσως συμβαίνει, από την μη σωστή διατύπωση του ζητούμενου από μέρους μου,
ίσως & και από λάθος στο τίτλο του θέματος (Ανανέωση & όχι Συγκέντρωση δεδομένων).
Το αρχείο που παίρνει κάθε συνάδελφος, έχει ήδη δεδομένα (παρελθόντος χρόνου) και καλείτε :
1) Να διαγράψει τα παλιά δεδομένα που το αφορούν.
2) Να καταγράψει τα νέα δεδομένα για τον εαυτό του (μόνο) , χωρίς να πειράξει τα δεδομένα των υπολοίπων.

Σημείωση: Ενδεχομένως κάποιοι συνάδελφοι να έχουν αλλάξει πελάτες.

Το αρχείο λοιπόν δεν θα έχει μόνα τα δικά του δεδομένα (διορθωμένα) αλλά & των υπολοίπων (του παρελθόντος χρόνου).
Το αρχείο στην στήλη Α έχει τον κωδικό του κάθε πελάτη.
Όπως ανέφερα οι κατηγορίες των συναδέλφων είναι έξι (6) και ο καθένας καταγράφει τα δεδομένα για τον εαυτό του αναλόγως στις στήλες με την κίτρινη σκίαση .
Επειδή ο κώδικας προτού αντιγράψει τα νέα δεδομένα, πρέπει να διαγράψει τα παλιά , πρόσθεσα μία γραμμή , που στην οποία , στα κελιά Β1 & D1 (πράσινη σκίαση) πρέπει να καταγράφεται η κατηγορία και το όνομα του καθενός .
Όπως το σκέφτομαι, το ζητούμενο είναι , κώδικας , που να διαγράφει τα παλιά δεδομένα με βάση τις τιμές των κελιών Β1 & D1 (πράσινη σκίαση) του κάθε αρχείου & 6 συνδυασμοί της συνάρτησης IF με κάποια συνάρτηση αναζήτησης & αναφοράς, σε VBA .
Αν αυτό δεν μπορεί να γίνει μαζικά (για όλα τα αρχεία), ίσως θα μπορούσε να γίνει με το κάθε αρχείο ξεχωριστά με λήψη εξωτερικών δεδομένων σε ένα νέο Φύλλο Εργασίας και κάνοντας τα παραπάνω.
Ελπίζοντας στην βοήθειά σου .:001_smile:
Και πάλι σ΄ευχαριστώ.:thanks::thanks::thanks:

Γιώργος

Tasos 14-10-13 14:53

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

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

Καλή συνέχεια!

Φιλικά

Τάσος

Flashgordon61 14-10-13 19:14

1 Συνημμένο(α)
Τάσο , χίλια ευχαριστώ!!!!!!!!!!!:thanks::thanks:
Βέβαια ο κώδικας διαγράφει ολόκληρες τις γραμμές και το ζητούμενο είναι η απαλοιφή των δεδομένων, και μόνο για τα κελιά στην τριάδα των στηλών (Όνομα , Χρόνος , Συχνότητα ανά μήνα) για τον κάθε υπάλληλο αναλόγως , αλά αλλάζοντας στον κώδικα το
Κώδικας:

rng(i).EntireRow.Delete
με το
Κώδικας:

rng(i).ClearContents
rng(i, 2).ClearContents
rng(i, 3).ClearContents

επιτυγχάνεται το ποθούμενο.

Τώρα ως αναφορά το δεύτερο σκέλος του ζητούμενου (Εισαγωγή νέων δεδομένων) ,
με βάση τα αναφερόμενα στο προηγούμενο μήνυμά μου , περιμένω & πάλι την βοήθειά σου.

Συγνώμη για το φόρτωμα ………….

Καλή συνέχεια.

Γιώργος

Tasos 14-10-13 20:33

Γιώργο, για να διαγράψεις τα περιεχόμενα τα κελιά στην τριάδα των στηλών αρκεί:

Κώδικας:

rng(i).Resize(1, 3).ClearContents
Δεν κατάλαβα το β΄μέρος του ζητούμενου.

Μπορείς να με βοηθήσεις;

Τάσος

ChrisGT7 15-10-13 07:32

Δεν θα ήταν πιο εύκολο αν οι συνάδελφοι επέστρεφαν ένα αρχείο που να περιέχει μόνον τις γραμμές (πελάτες) που ασχολήθηκαν εκείνη την περίοδο χωρίς τα στοιχεία του παρελθόντος χρόνου; Αφού γίνει καθαρισμός των στηλών της αντίστοιχης κατηγορίας, ύστερα με χρήση της VLOOKUP μέσω VBA ελέγχοντας τον κωδικό πελάτη θα αντιγράφονταν όλα τα απαραίτητα στοιχεία του συγκεκριμένου συναδέλφου στον αντίστοιχο πελάτη.

Θεωρώ ότι ένας πελάτης δεν τον "βλέπει" παρά μόνον ένας συνάδελφος της ίδιας κατηγορίας. Εκτός και αν συμβαίνει το αντίθετο, π.χ. 2 συνάδελφοι της κατηγορίας Β να αφιερώσουν χρόνο στον ίδιο πελάτη. Τότε με VLOOKUP δε θα βοηθούσε πολύ, νομίζω.

6 κατηγορίες = 6 κουμπιά. Πατώντας κάθε κουμπί θα εμφανίζει το παράθυρο διαλόγου επιλογής αρχείων της επιθυμητής κατηγορίας για την εισαγωγή τους στις αντίστοιχες στήλες.

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

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

Flashgordon61 15-10-13 15:44

1 Συνημμένο(α)
Καλησπέρα
Τάσο , αφού ζητήσω συγνώμη για την καθυστέρηση της απάντησης λόγω ειλημμένων
υποχρεώσεων & για να εξηγήσω το ζητούμενο , δημιούργησα μια μικρογραφία του αρχείου
το οποίο και επισυνάπτω.
Έστω ότι έχουμε τα δεδομένα του Employee(A)1 μαζί με δεδομένα άλλων συναδέλφων στην περιοχή Table2
του επισυναπτόμενου αρχείου.
Ο κώδικας επειδή χρησιμοποιεί μόνο την συνάρτηση VLOOKUP φέρνει και τα παλιά δεδομένα των υπολοίπων συναδέλφων.
Το ζητούμενο είναι , στον κώδικα η VLOOKUP να αντικατασταθεί με τον συνδυασμό των συναρτήσεων όπως φαίνεται στην
περιοχή H18:J29 του επισυναπτόμενου αρχείου , ούτως ώστε να μην αντικαθιστούνται τα δεδομένα των υπολοίπων.
Φίλε Χρήστο αυτό που αναφέρεις δεν μπορεί να γίνει , διότι στο πραγματικό αρχείο υπάρχουν και άλλες πληροφορίες που
οι συνάδελφοι τι χρειάζονται.

Καλή συνέχεια ……….

Γιωργος

Flashgordon61 15-10-13 16:27

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

Συγνώμη & καλή συνέχεια

Γιώργος

Flashgordon61 16-10-13 13:39

Καλημέρα σε όλους

Τάσο θα ήθελα να ρωτήσω κάτι σχετικά με το επισυναπτόμενο αρχείο σου Coverage_customer1.xlsm , στο 6ο μήνυμα του θέματος.

Στο κελί Ε1 χρησιμοποιείς την COUNTIF σε συνδυασμό με την GetEmployeeRange που δημιούργησες με VBA, η οποία μετρά και επιστρέφει το σύνολο των εγγραφών του χρήστη, πληροφορία που είναι χρησιμότατη.

Μια άλλη πληροφορία που θα ήταν χρήσιμη θα ήταν και το σύνολο του χρόνου του χρήστη ανά μήνα (Total time per month, 4η στήλη μετά το όνομα του χρήστη).

Ερώτηση / Ζητούμενο : Πως μπορούμε στο κελί Ε2 να χρησιμοποιήσουμε την SUMIF σε συνδυασμό με την GetEmployeeRange (αν γίνεται αυτό & δεν χρειάζεται άλλη συνάρτηση με VBA) ούτως ώστε να μας επιστρέφει το επιθυμητό αποτέλεσμα (Σύνολο χρόνου ανά μήνα).

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

Καλή συνέχεια σε όλους ...........

Γιώργος

Tasos 16-10-13 14:56

Καλησπέρα σε όλους!

Αγαπητέ Γιώργο, για τη στήλη Total time per month χρησιμοποίησε:
=SUMIF(GetEmployeeRange(P3:AO3;EmplCat);Employee;OFFSET(GetEmployeeRange(P3:AO3;EmplCat);;3))

Για την στήλη Rate per monthχρησιμοποίησε:
=SUMIF(GetEmployeeRange(P3:AO3;EmplCat);Employee;OFFSET(GetEmployeeRange(P3:AO3;EmplCat);;2))

Καλή συνέχεια!

Τάσος

Flashgordon61 16-10-13 16:32

:thanks::thanks:
Παράθεση:

Αρχική Δημοσίευση από Tasos (Μήνυμα 15946)
Καλησπέρα σε όλους!

Αγαπητέ Γιώργο, για τη στήλη Total time per month χρησιμοποίησε:
=SUMIF(GetEmployeeRange(P3:AO3;EmplCat);Employee;OFFSET(GetEmployeeRange(P3:AO3;EmplCat);;3))

Για την στήλη Rate per monthχρησιμοποίησε:
=SUMIF(GetEmployeeRange(P3:AO3;EmplCat);Employee;OFFSET(GetEmployeeRange(P3:AO3;EmplCat);;2))

Καλή συνέχεια!

Τάσος

Εξαιρετικό !!!!!!!!!:worthy:

Και πάλι Τάσο , χίλια ευχαριστώ.......:thanks::thanks:

Καλή συνέχεια

Γιώργος.

ChrisGT7 18-10-13 12:38

1 Συνημμένο(α)
Γιώργο, έκανα μια προσπάθεια για βοήθεια στο παρόν θέμα αλλά είμαι σίγουρος ότι υπάρχει πιο εύκολος και γρήγορος τρόπος ενημέρωσης (UPDATE table SET, ίσως).

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

Χρησιμοποιώντας την ιδέα του Τάσου με το Recordset, μεταφέρω στο βοηθητικό κρυφό φύλλο HelpSh όλους τους πελάτες που ενημερώθηκαν από τους συναδέλφους και με τη VLOOKUP μεταφέρονται στις αντίστοιχες κίτρινες στήλες, διατηρώντας τα παλιά δεδομένα. Επίσης, κάθε κατηγορία έχει το δικό της κουμπί για τη μεταφορά των δεδομένων.

Ελπίζω να βοήθησα κάπως!


Η ώρα είναι 19:00.

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


Search Engine Optimization by vBSEO 3.3.2