| Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
| |
|
#1
| |||
| |||
|
Καλησπέρα σε όλους με ένα καινούργιο κουίζ που έχω να παραθέσω στο πολύτιμο φόρουμ. Θέλεις να κάνεις merge δεδομένων από κάποιο φύλλο εργασίας από πολλά αρχεία. Τα αρχεία έχουν διαφορετική ονομασία, αλλά για να μπορείς να ξέρεις ποια είναι αυτά, έστω ότι τοποθετείς κάθε φορά αυτά που χρειάζεσαι (5 έως και 15 αρχεία κάθε φορά) σε προκαθορισμένο φάκελο που έχεις μόνο γι’ αυτό το σκοπό. Το συγκεκριμένο φύλλο μέσα στο κάθε αρχείο περιέχει στήλες με την ίδια διάταξη. Κάθε αρχείο εμπεριέχει ομοιογενή δεδομένα διαφορετικής εβδομάδας. Το πρόβλημα είναι ότι σε κάθε ένα βιβλίο το φύλλο δεν έχει την ίδια ονομασία έτσι ώστε μέσα σε ένα βρόγχο να ανοίγεις ένα – ένα το κάθε αρχείο και να αντιγράφεις τα δεδομένα από το ζητούμενο φύλλο. Αυτό που είναι κοινό είναι οι ονομασίες στις στήλες. Μπορεί να αποφύγει κανείς την προεργασία ( ας την πω έτσι ), να ανοίγεις πρώτα ένα – ένα το κάθε αρχείο, για να προβείς σε μετονομασία του κάθε φύλλου δίνοντας ένα κοινό όνομα, ώστε να μπορείς να κάνεις μία ρουτίνα που θα αντιγράψει όλα τα δεδομένα σε ένα νέο φύλλο ή μπορείς ενδεχομένως να εντοπίσεις ποιο φύλλο είναι «πηγή» δεδομένων αναζητώντας ανάμεσα στα φύλλα του κάθε αρχείου π.χ. το όνομα κάποιας στήλης, ώστε αυτή να σου «υποδείξει» τελικά το φύλλο που πρέπει να αντιγραφεί; Υπάρχει κανένας πιο έξυπνος τρόπος για τέτοια συγχώνευση ομοιογενών δεδομένων από πολλά φύλλα διαφορετικών αρχείων, όπου δεν τα διέπει η κοινή ονομασία; Φιλικά Δημήτρης |
|
#2
| |||
| |||
|
Τώρα μόλις έκανα έναν συνειρμό με ένα πρόσφατο ερώτημα που απεύθυνα στο φόρουμ σχετικά με «Ονόματα φύλλων εργασίας σε listbox» (βλ. http://www.ms-office.gr/forum/excel-...e-listbox.html), Όπου τα αρχεία όχι μόνο έρχονται στο listbox της φόρμας αλλά καταγράφεται ο κατάλογος όλων των αρχείων μαζί με τα ονόματα των φύλλων που περιέχουν. Άρα θα μπορούσε να υποδεικνύει ο χρήστης κάθε φορά ποιο είναι το φύλλο του κάθε αρχείου που πρέπει να ληφθεί υπ’ όψη, βάζοντας μία βοηθητική στήλη στο φύλλο – κατάλογος όπου θα κλικάρει ποιο είναι το ζητούμενο φύλλο εργασίας. Ή μήπως υπάρχει καλύτερος τρόπος; Φιλικά Δημήτρης |
|
#3
| |||
| |||
|
Στο συγκεκριμένο αρχείο που είχε δημιουργηθεί από τον Σπύρο (βλ. http://www.ms-office.gr/forum/excel-...e-listbox.html), προσπαθώ να επιτύχω στη φόρμα όπου εμφανίζονται τα αρχεία από ένα συγκεκριμένο φάκελο το εξής: Στο πρώτο listbox να μπορεί ο χρήστης να κάνει πολλαπλή επιλογή αρχείων, ενώ στο δεύτερο listbox να επιλέγει κάθε φορά μόνο ένα φύλλο, το οποίο θα υποδυκνείει ποιο είναι αυτό που περιέχει τα στοιχεία που θέλω στη συνέχεια να συγχωνεύσω από όλα τα επιλεγμένα φύλλα (τα οποία έχουν ίδια διάταξη) των επιλεγμένων αρχείων σε ένα νέο φύλλο εργασίας. Δυστυχώς δεν μπόρεσα να το καταφέρω. Μπορεί κάποιος να βοηθήσει; Ευχαριστώ. Φιλικά Δημήτρης |
|
#4
|
|
Καλημέρα Δημήτρη στο άρθρο στο οποίο αναφέρεσαι ο κώδικας κάνει μόνο αυτό για το οποίο δημιουργήθηκε. Αυτό που ζητάς είναι τελείως άλλο πράγμα και θέλει άλλο είδος κώδικα. Τώρα... «...φύλλο, το οποίο θα υποδυκνείει ποιο είναι αυτό που περιέχει τα στοιχεία που θέλω στη συνέχεια...» Για να γίνει αυτό (μετά από κάποια άλλα πράγματα) πρέπει ο κώδικας να "μάθει" τι θέλεις εσύ για να στο υποδείξει. Πρέπει να του «πεις» δηλαδή ... "Θέλω να συγχωνεύσω αυτό κι αυτό ... και ... με αυτόν τον τρόπο ... και ... με αυτά τα κριτήρια ... για να πάρω αυτό το συγκεκριμένο αποτέλεσμα" |
|
#5
| |||
| |||
|
Καλημέρα Μια λύση χωρίς τη χρήση UserForm. Με την αποσυμπίεση του συνημμένου αρχείου σε κάποιο φάκελο, θα δημιουργηθεί ο φάκελος MergeBooks με τα ακόλουθα αρχεία: 1) WBook1.xlsx , WBook2.xlsx, WBook3.xlsx Περιέχουν τα δεδομένα 2) MergeBooksAuto.xlsm Είναι το βιβλίο εργασίας που περιέχει τον κώδικα και στο οποίο θα γίνει η συγχώνευση. Για να λειτουργήσει το παράδειγμα θα πρέπει να συμπληρωθεί στο κελί F2 η διαδρομή του φακέλου που περιέχει τα αρχεία. Φιλικά/Γιώργος |
|
#6
| |||
| |||
|
Σπύρο και Γιώργο σας ευχαριστώ για την ανταπόκριση. Σπύρο σαφώς και μου είναι ξεκάθαρο, ότι ο κώδικας κάνει μόνο αυτό για το οποίο δημιουργήθηκε. Εγώ προσπάθησα να παρέμβω τροποποιώντας τον ώστε να επιτύχω αυτό που περιγράφω στο επισυναπτόμενο αρχείο. Γιώργο πιθανόν να είναι μία λύση για το ζητούμενο που θέλω να επιλύσω. Εάν κατάλαβα καλά εντοπίζεις το φύλλο που περιέχει τα δεδομένα από τις επικεφαλίδες των στηλών. Δεν ξέρω εάν αυτό είναι εφικτό στη συγκεκριμένη περίπτωση όπου υπάρχουν συγχωνευμένα κελιά στις επικεφαλίδες και ονομασίες με αναδίπλωση (alt + enter) ή πολύ μακρύ κείμενο. Από τα συνημμένα αρχεία πιστεύω θα σας γίνει ξεκάθαρο ποιος είναι ο στόχος μου και εάν έχετε κάτι να προτείνετε. Σας ευχαριστώ πολύ και τους δύο. Φιλικά Δημήτρης |
|
#7
| |||
| |||
|
Καλημέρα Η λύση που πρότεινα είναι απλή. Συγχωνεύει (ενώνει) τα δεδομένα πολλών βιβλίων εργασίας σε ένα. Προϋποθέσεις: 1) Τα βιβλία να είναι στον ίδιο φάκελο. 2) Να έχουν τα δεδομένα σε ένα φύλλο. 3) Τα δεδομένα να έχουν την ίδια δομή και η πρώτη γραμμή των φύλλων δεδομένων να έχει ακριβώς ίδιες ετικέτες για τις στήλες των δεδομένων. Η μη σωστή οργάνωση των δεδομένων οδηγεί σε πολλές επιλογές του χρήστη και σε περίπλοκο κώδικα. Φιλικά/Γιώργος |
|
#8
| |||
| |||
|
Καλησπέρα Γιώργο, Καταλαβαίνω αυτά που λες για τις προϋποθέσεις και πράγματι αυτές όλες ισχύουν. Δηλαδή στον ίδιο συγκεκριμένο φάκελο υπάρχουν όλα τα αρχεία που πιθανά θα χρειαστούν να συγχωνευθούν. Επίσης όλα τα αρχεία έχουν τα δεδομένα σε ένα φύλλο, στο οποίο η δομή τους είναι ίδια με ίδιες επικεφαλίδες. Δημιουργώντας έναν κατάλογο του φακέλου λαμβάνει κανείς π.χ. τα εξής αρχεία: DeliveryWeek 24-2014.xlsx DeliveryWeek 25-2014.xlsx DeliveryWeek 26-2014.xlsx DeliveryWeek 27-2014.xlsx DeliveryWeek 28-2014.xlsx DeliveryWeek 29-2014.xlsx DeliveryWeek 30-2014.xlsx Από αυτά τελικά χρειάζονται μόνο για τις εβδομάδες 25, 26, 27 & 28. Όπου σε κάθε ένα από αυτά τα αρχεία υπάρχει όντως ένα φύλλο με την ίδια δομή και τις ίδιες στήλες. Το θέμα είναι ότι δεν γνωρίζω να ορίσω ποιο είναι το όνομα του φύλλου από το κάθε αρχείο. Αντίστοιχα WSheets: Sheet3 Sheet5 Week 24-14 Σημειώσεις Notices Sheet3 Week 25-14 Notices Sheet3 Week 26-2014 Notices Sheet1 Week 27 Sheet4 Sheet3 Sheet5 Week 28-14 Σημειώσεις Sheet3 Sheet5 Week 29-2014 Σημειώσεις (2) Σημειώσεις Sheet3 Sheet5 Week 30 Σημειώσεις Γι’ αυτό αναρωτιέμαι εάν μπορεί να το υποδείξει ο χρήστης, όπως κάνει και στην προηγούμενη μάσκα του πρώτου import. Καταλαβαίνω ότι αυτό απαιτεί πιο περίπλοκο κώδικα. Η απορία μου είναι εάν μπορεί να κλικάρει ο χρήστης δίπλα από κάθε αρχείο το φύλλο που πρέπει να εισαχθεί και εάν εγώ μπορώ να το «καταλάβω» μέσα από τον κώδικα. Στη συνέχεια θα προσπαθήσω να αυτοσχεδιάσω. Σίγουρα οι πιο απλές λύσεις είναι πάντα οι καλύτερες, αλλά στην προκειμένη περίπτωση έτσι είναι τα αρχεία που χρησιμοποιούνται και προσπαθώ να βρω τρόπο να αποφύγει ο χρήστης να προβεί σε πρόσθετες ενέργειες, όπως π.χ. να κάνει μόνος του ένα ενιαίο αρχείο και στη συνέχεια θα μπορούσα με index / match να γεμίσω τις στήλες που υπολείπονται. Εάν δεν είναι εφικτός ο εντοπισμός του φύλλου κατόπιν υπόδειξης του χρήστη, θα πρέπει να βρω άλλο τρόπο. Σε ευχαριστώ για την ενασχόληση σου με το θέμα. Φιλικά Δημήτρης |
|
#9
| |||
| |||
|
Καλημέρα Δημήτρη, μάλλον δεν έγινα κατανοητός με τις προϋποθέσεις. Για να γίνει σωστά και εύκολα η συγχώνευση των δεδομένων θα πρέπει να είναι οργανωμένα όπως στους πίνακες της access και η πρώτη γραμμή του φύλλου να περιέχει τις ετικέτες (ονόματα πεδίων) των στηλών. Ο εντοπισμός του φύλλου μπορεί να γίνει από τον κώδικα και μάλιστα μπορεί να εμφανίζει μόνο αυτό το φύλλο. Στη ρουτίνα του Σπύρου, άλλαξε τον κώδικα που εντοπίζει τα φύλλα με τον ακόλουθο. Κώδικας: For Each AD_Table In AD_Catalog.Tables
If InStr(AD_Table.Columns(0), "Delivery") Then
TableName = AD_Table.Name
If Right(TableName, 1) = "$" Or Right(TableName, 2) = "$'" Then
If Left(TableName, 1) = "'" Then TableName = Mid(TableName, 2)
If Right(TableName, 1) = "'" Then
TableName = Left(TableName, Len(TableName) - 2)
Else
TableName = Left(TableName, Len(TableName) - 1)
End If
sh.Cells(LRow, i) = TableName
i = i + 1
End If
End If
Next
|
|
#10
|
|
Καλησπέρα Θα ήθελα να πω το εξής: Ο φίλος Δημήτρης, έχει βρει στο διαδίκτυο ένα πρόσθετο, το οποίο σε μια φόρμα, εισάγοντας όλες τις απαιτούμενες επιλογές, μπορεί ο χρήστης να συγχωνεύσει δεδομένα από διάφορα αρχεία excel. Η βοήθεια που προσφέρθηκε δίνει λύση σ' ένα μεγάλο κομμάτι αυτού του θέματος. Σε καμία περίπτωση όμως δεν μπορούμε να προχωρήσουμε και να "σπάσουμε" ουσιαστικά το Add-in της ExtendOffice, δημιουργώντας κάτι ανάλογο εδώ στο φόρουμ. Αν μελετήσεις Δημήτρη τα ήδη προσφερόμενα και δεις και στην βοήθεια της Microsoft, θέματα περί Consolidate, τότε "πάντρεψέ" τα όλα μαζί και θα έχεις ένα πολύ ικανοποιητικό αποτέλεσμα. |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [VBA] Μεταφορά δεδομένων από πολλά φύλλα | xristos | Excel - Ερωτήσεις / Απαντήσεις | 2 | 12-04-15 21:58 |
| [Excel07] Μεταφορά δεδομένων από πολλά βιβλία σε ένα | jimrenoir | Excel - Ερωτήσεις / Απαντήσεις | 5 | 18-01-14 15:47 |
| Σύνδεση και μεταφορά δεδομένων απο πολλά βιβλία εργασίας σε ένα βιβλίο εργασίας. | panos1978 | Excel - Ερωτήσεις / Απαντήσεις | 13 | 17-07-13 11:18 |
| [Συναρτήσεις] Επεξεργασία δεδομένων και συγχώνευση κελιών | treliaris | Excel - Ερωτήσεις / Απαντήσεις | 3 | 28-09-12 23:13 |
| [Γενικά] Αναζήτηση δεδομένων από μαζικά βιβλία. | kormos | Excel - Ερωτήσεις / Απαντήσεις | 6 | 12-04-11 21:46 |
Η ώρα είναι 16:16.


Υβριδικός τρόπος

