ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [VBA] Διαχωρισμός σε άλλες στήλες

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 14-05-18, 19:55
Όνομα: ΔΗΜΗΤΡΗΣ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-08-2011
Μηνύματα: 121
Προεπιλογή Διαχωρισμός σε άλλες στήλες

Ο κώδικας εκτελείται αλλά στο τέλος χτυπάει.
Ευχαριστώ.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm ΔΙΑΧΩΡΙΣΜΟΣ ΣΕ ΔΙΑΦΟΡΕΤΙΚΕΣ ΣΤΗΛΕΣ.xlsm (14,0 KB, 21 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 15-05-18, 08:21
Το 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 έως 7.
Επειδή έχεις δύο ονόματα στο παράδειγμα,
όταν τελειώσει με αυτά και δεν βρεί άλλα, φυσικό είναι να χτυπάει.

Αυτό διορθώνεται αν βάλουμε:
Κώδικας:
On Error Resume Next
Πριν από το For i....

Έχει όμως ένα μεγάλο σφάλμα στην διαχείριση των ονομάτων,
αν έχει πληκτρολογήσει ο χρήστης κενά (Space) εκ παραδρομής,
είτε στην αρχή είτε στο τέλος (πράγμα που διαπίστωσα ότι ισχύει)
Το ΔΗΜΗΤΡΗΣ, ΚΟΝΤΟΣ, ακολουθείται από κενό...

Θα πρότεινα να χρησιμοποιήσεις τον πιο κάτω κώδικα:
Κώδικας:
Sub SplitNames_Delimeter()
    Dim fName As String, iPos As Integer
    Dim Lrow As Long, i As Long
    Lrow = Sh1.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To Lrow
        fName = Trim(Cells(i, 1).Value)
        iPos = InStr(fName, ",")
        Cells(i, 2).Value = Left(fName, iPos - 1)
        Cells(i, 3).Value = Mid(fName, iPos + 2)
    Next i
End Sub
Παρατηρήσεις:
Όπου Sh1 το κωδικό όνομα φύλλου.

Ο κώδικας αυτός λειτουργεί σωστά αν:
1
Τα ονόματα είναι στην Α στήλη.
Αν αλλάξει αυτό, αλλάζουμε τον κόκκινο αριθμό, με τον αριθμό στήλης.
2
Η μεταφορά γίνεται στις B - C
Αν αλλάξει κάτι από αυτά, αλλάζουμε τους μπλε αριθμούς, με τους αριθμούς στηλών.
3
Διαχωριστικό είναι το ,
Αν αλλάξει, αλλάζουμε στην γραμμή
Κώδικας:
iPos = InStr(fName, ",")
με ότι θέλουμε.
Παράδειγμα για διαχωριστικό -
Κώδικας:
iPos = InStr(fName, "-")
4
Το διαχωριστικό ακολουθείται από ένα κενό (Space)
Αν αλλάξει αυτό, θα πρέπει να προσαρμοστούν τόσο το
Κώδικας:
iPos = InStr(fName, ",")
όσο και οι αριθμοί στο τέλος των φράσεων
Κώδικας:
        Cells(i, 2).Value = Left(fName, iPos - 1)
        Cells(i, 3).Value = Mid(fName, iPos + 2)
Παράδειγμα για κενό ανάμεσα σε όνομα επώνυμο, χωρίς διαχωριστικό.
Κώδικας:
        iPos = InStr(fName, " ")
        Cells(i, 2).Value = Left(fName, iPos - 1)
        Cells(i, 3).Value = Right(fName, iPos + 1)
5
Δεν υπάρχουν κενά ονόματα (γραμμές χωρίς δεδομένα)
Αν πρέπει να υπάρχουν (;;;) τότε να γίνει και πάλι η χρήση του On Error Resume Next
Τέλος...
Εφ' όσον έχουμε μόνο επώνυμο και όνομα (χωρίς πατρώνυμο)
η χρήση της Mid, μπορεί να αντικατασταθεί από την Right
Απάντηση με παράθεση
  #3  
Παλιά 15-05-18, 15:04
Όνομα: ΔΗΜΗΤΡΗΣ
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 01-08-2011
Μηνύματα: 121
Προεπιλογή

Ευχαριστώ πολύ!
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
Κύρια φόρμα με δεσμευμένο χώρο για άλλες δύο γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 1 30-04-14 16:59
[ Πίνακες ] Διαχωρισμός πίνακα gaz_manos Access - Ερωτήσεις / Απαντήσεις 12 05-06-13 07:52
[Γενικά] Αυτόματη εννημέρωση στήλης από άλλες xristos Excel - Ερωτήσεις / Απαντήσεις 7 15-02-12 22:27
[VBA] Δεδομένα σε άλλες στήλες sakplak Excel - Ερωτήσεις / Απαντήσεις 3 29-06-11 22:25
[ Εκθέσεις ] Διαχωρισμός ονοματεπώνυμου mgeorge Access - Ερωτήσεις / Απαντήσεις 6 08-05-11 00:45


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