ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [Συναρτήσεις] Διάσπαση περιεχομένου κελιού σε άλλα.

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 26-06-11, 18:41
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 245
Προεπιλογή Διάσπαση περιεχομένου κελιού σε άλλα.

Καλησπέρα σε όλους τους φίλους.Ανεβάζω ένα θέμα που αφορά τη διάσπαση του περιεχομένου ενός κελιού σε άλλα κελιά.Χρησιμοποίησα τη συνάρτηση TRIM για απαλοιφή τυχόν κενών, τη συνάρτηση FIND για να δούμε που βρίσκεται το κενό, τη συνάρτηση LEN για μέτρημα των γραμμάτων και του κενού και στο τέλος τις συναρτήσεις LEFT & RIGHT.
Το ερώτημα μου είναι, ενώ μου κάνει την πρώτη διάσπαση δε μπορώ να βρώ πως θα κάνουμε και τις επόμενες διασπάσεις.
Θα ήθελα μια βοήθεια με τις συγκεκριμένες συναρτήσεις και όχι με τον κλασικό τρόπο από ΔΕΔΟΜΕΝΑ-ΚΕΙΜΕΝΟ ΣΕ ΣΤΗΛΕΣ μιας και είναι μια χρονοβάρα διαδικασία και έχω μια λίστα 500 ατόμων σε διαφορετικά φύλλα.
Ευχαριστώ
Συνημμένα Αρχεία
Τύπος Αρχείου: xls PRD.xls (16,5 KB, 39 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 26-06-11, 19:46
Το avatar του χρήστη manolis
Όνομα: Μανώλης
Έκδοση λογισμικού Office: Ms-Office 2013, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-10-2009
Περιοχή: Ηλιούπολη
Μηνύματα: 280
Προεπιλογή

Καλησπέρα

Τζίμη σε μια παρόμοια ερώτηση μου παλιότερα , ο Τάσος μου πρότεινε την λύση που είναι στο συνημμένο .

Βέβαια δεν την κατάλαβα πως δουλευει αλλα δουλευει

Φιλικά
Συνημμένα Αρχεία
Τύπος Αρχείου: xls PRD_1.xls (28,0 KB, 85 εμφανίσεις)
__________________
Μανώλης Γαβαλάς
Σηκώστε το κεφάλι ψηλά ! ;)
Απάντηση με παράθεση
  #3  
Παλιά 27-06-11, 10:05
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.250
Προεπιλογή

Καλημέρα σε όλους!
Η λύση με χρήση τύπων είναι αυτή που πρότεινε ο Μανώλης.

Επειδή όμως πρόκειται για αναδιπλωμένο κείμενο που περιέχει τον χαρακτήρα 10 (= line feed, στην Excel= Char(10) , στην VB = vbLF ή Chr(10) ) ,
θα είχαμε πιο ακριβή αποτελέσματα αν στο κελί B1 τροποποιούσαμε τον τύπο ως εξής:

=TRIM(SUBSTITUTE(SUBSTITUTE(A1;CHAR(10);" ");" ";" "))

Χρησιμοποιώντας τον παραπάνω τύπο και μετατρέποντας το αποτέλεσμα του σε τιμή (Αντιγραφή > Ειδική επικόλληση>Τιμές),
μπορούμε με τη μέθοδο "Κείμενο σε στήλες" και με τη βοήθεια του οδηγού να διασπάσουμε το
περιεχόμενο του κελιού σε περισσότερες στήλες.

Αυτό θα μπορούσε να γίνει και με VBA πχ:

Κώδικας:
Sub Text2Columns_1()
    Range("B1:B100").TextToColumns _
            Destination:=Range("C1"), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            ConsecutiveDelimiter:=True, _
            Tab:=False, _
            Semicolon:=False, _
            Comma:=False, _
            Space:=True, _
            Other:=False
End Sub
Εγώ προσωπικά θα χρησιμοποιούσα τον παρακάτω κώδικα που παίρνει δεδομένα κατευθείαν από τη στήλη A χωρίς τη διαδικασία με τύπους.
Κώδικας:
Sub Text2Columns_2()
    Dim x As Variant, c As Range
    For Each c In Range("A1:A100")
        If Not IsEmpty(c) Then
            With c
            x = Replace(Replace(.Value, vbLf, " "), "  ", " ")
                x = Split(x)
                .Offset(, 1).Resize(, UBound(x) + 1).Value = x
            End With
        End If
    Next
End Sub
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 27-06-11 στις 10:23.
Απάντηση με παράθεση
  #4  
Παλιά 27-06-11, 11:28
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

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

Τάσο μου, επειδή ξέρω ότι δεν αφήνεις τίποτα στην τύχη σίγουρα θα έχεις κάποιο λόγο που χρησιμοποιείς τη συνάρτηση «SUBSTITUTE» δύο φορές.
Προσπάθησα να τον βρω, αλλά κόλλησα.
Δεν μπόρεσα να εξηγήσω τη χρησιμότητα της εξωτερικής «SUBSTITUTE» αφού το μόνο που κάνει είναι η αντικατάσταση των (δύο;) διαστημάτων, στο αποτέλεσμα που επιστρέφει η εσωτερική «SUBSTITUTE», με ένα διάστημα.
Αυτό όμως το κάνει η συνάρτηση TRIM που αφαιρεί τα αρχικά και τελικά διαστήματα και όλα τα επιπλέον ενδιάμεσα.
Θα μπορούσε δηλαδή, κατά τη γνώμη μου, να χρησιμοποιηθεί ο τύπος =TRIM(SUBSTITUTE(A1;CHAR(10);" "))

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #5  
Παλιά 27-06-11, 11:48
Όνομα: ΤΖΙΜΗΣ
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 11-02-2011
Περιοχή: Πύργος Ηλείας
Μηνύματα: 245
Προεπιλογή

Μανώλη Γιώργο ευχαριστώ πολύ για τις απαντήσεις σας..
Όσο για σένα Τάσο τι να πούμε .Κάθε σχολιασμός είναι περιττός.Απαντήσεις που απαιτούν μεγάλη οξυδέρκεια και γνώση.Παίρνουμε καθημερινά μαθήματα.
Ένα μεγάλο ευχαριστώ.
Απάντηση με παράθεση
  #6  
Παλιά 27-06-11, 13:44
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.250
Προεπιλογή

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

Γιώργο μου, παίρνουμε για παράδειγμα το περιεχόμενο του κελιού A1 στο συνημμένο του Τζίμη:

Πέτρος Γεωργίου του ΧρήστουChar(10)
Char(32)με ΑΦΜ 7777777777


Ο τύπος είναι: =TRIM(SUBSTITUTE(SUBSTITUTE(A1;CHAR(10);" ");" ";" "))

Ξεκινάμε με την συνάρτησηπου εκτελείται πρώτη (τη μεσαία)SUBSTITUTE(A1;CHAR(10);" ")
Aντικαθιστά τυχόν συμβολο της αναδιπλωσης CHAR(10)του κελιού A1 με κενό CHAR(32).

Το αποτέλεσμα θα είναι: Πέτρος Γεωργίου του ΧρήστουChar(32)Char(32)με ΑΦΜ 7777777777
δηλαδή έχουμε δημιουργήσει 2 κενά που θα προκαλέσουν πρόβλημα στη διάσπαση του περιεχομένου του κελιού (αφήνει κενά κελιά).

Αυτό με ώθησε να περικλείσω την πρώτη SUBSTITUTE() στην εξωτερική SUBSTITUTE()
Η εξωτερική SUBSTITUTE() αντικαθιστά τα δυο διαστήματα της πρώτης με ένα διάστημα.

Έτσι είμαι σίγουρος ότι δεν θα ανάμεσα στις λέξεις υπάρχει μόνο ένα διάστημα.

Επειδή τέτοιου είδους δεδομένα έρχονται συνήθως από εξωτερικές πηγές δεδομένων
ή με αντιγραφή επικόλληση από το χρήστη,
καλό είναι το αποτέλεσμα της SUBSTITUTE(SUBSTITUTE(...)) να το ελέγξουμε με την TRIM() για τυχόν διαστήματα στην αρχή ή στο τέλος.

Τα λέμε!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #7  
Παλιά 27-06-11, 15:56
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Καλησπέρα στην παρέα

Τάσο μου, σ’ ευχαριστώ για την άμεση και αναλυτική ενημέρωση.
Με την ευκαιρία θα ήθελα να ξεκαθαρίσω μια σημαντική διαφορά ανάμεσα στη συνάρτηση TRIM της VBA και στην TRIM του excel:
1. H TRIM της VBA αφαιρεί από το κείμενο τα αρχικά και τελικά διαστήματα (Chr(32)), αλλά δεν επηρεάζει τα διαστήματα που υπάρχουν ανάμεσα στις λέξεις του κειμένου.
2. H TRIM του excel είναι πιο ισχυρή. Αφαιρεί από το κείμενο τα αρχικά και τελικά διαστήματα (Chr(32)), αλλά και όλα τα πάνω από ένα διαστήματα που υπάρχουν ανάμεσα στις λέξεις του κειμένου (αφήνει μόνο ένα).
Έτσι, αν το ζητούμενο είναι η αφαίρεση των ακραίων διαστημάτων και των επιπλέον ενδιάμεσων από ένα κείμενο, η χρήση της TRIM του excel (Application.WorksheetFunction.Trim στον κώδικα) είναι η καλύτερη λύση.

Φιλικά/Γιώργος
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] Εμφάνιση περιεχόμενου ενεργού κελιού σε άλλο φύλλο ggatzos Excel - Ερωτήσεις / Απαντήσεις 7 16-01-14 10:38
[Συναρτήσεις] Διάσπαση κειμένου σε αλλα κελιά Ρούλα Excel - Ερωτήσεις / Απαντήσεις 6 07-04-13 18:52
[VBA] Μετατροπή περιεχομένου κελιού σε hyperlink για άλλο κελί ΓιάννηςΔ Excel - Ερωτήσεις / Απαντήσεις 3 10-10-12 16:34
[Access - VBA] Αντιγραφή περιεχομένου κελιού σε άλλο κελί Meteora Visual Basic for Applications (VBA) 4 09-09-10 15:31
[Access - VBA] Διάβασμα περιεχόμενου κελιού excel απο την Access Meteora Visual Basic for Applications (VBA) 4 08-06-10 23:07


Η ώρα είναι 16:08.