Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] VBA - Αντιγραφή πολλών κελιών σε ένα. (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/3474-visual-basic-applications-antigrafi-pollon-kelion-se-ena.html)

spavlos 16-12-14 14:18

VBA - Αντιγραφή πολλών κελιών σε ένα.
 
Καλησπέρα,
Παρακαλώ τη βοήθειά σας στο εξής:
Σε κώδικα VBA πως μπορώ να αντιγράψω τα στοιχεία 3ων κελιών σε ένα, δηλαδή:
Α1=4
Β1=go
C1=768
να αντιγραφούν στο D1, δηλαδή:

D1=4go768

Αυτό να γίνει για ολόκληρη τη στήλη, δηλαδή D2, D3, D4, κλπ.

Ευχαριστώ.

Spirosgr 16-12-14 14:25

Γιατί με VBA και όχι με Concatenate ή τελεστή εμπορικό &
Βάλε στο D1 και «τράβηξε» κάτω όσο χρειάζεται.
=CONCATENATE(A1;B1;C1) ή
=A1&B1&C1

spavlos 19-12-14 11:25

Αποτελεί μερος μιας μεγαλης αυτοματοποιησης ενος αρχειου excel.
Γιαυτο το θελω σε vba.
Επισης, θελω οταν εχω π.χ. Α1=575 , Α2=67 να ερχεται στο Β1 , Β2 σταθερα με 6 ψηφια και τα πρωτα να ειναι μηδενικα, δηλαδη 000575, 000067 και αυτο να γινεται για ολη τη στηλη Α.

Ευχαριστώ.

Spirosgr 19-12-14 14:11

Ο πιο κάτω κώδικας ...

Κώδικας:

Sub test()
    Dim i As Long, lastrow As Long
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastrow
        Cells(i, 4).Value = Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value
    Next i
End Sub

... κάνει ακριβώς αυτό που ζητήθηκε στο 1ο ερώτημα.

Δεν ελέγχει όμως αν :

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

Σημείωση:

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

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

spavlos 19-12-14 14:40

Δυστυχώς δεν δουλευει ο κωδικας.
Τον ετρεξα μονο του αλλα δεν δουλευει.
Ευχαριστω πολυ πάντως.

Spirosgr 19-12-14 14:55

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

Η απόδειξη για το αν δουλεύει στο βιβλίο και τα λόγια περιττά...

spavlos 19-12-14 22:27

ok, δικό μου λάθος.
Σε ευχαριστώ και πάλι.

Spirosgr 20-12-14 00:27

2 Συνημμένο(α)
Ορίστε λοιπόν η λύση ολοκληρωμένη με βάση και την δεύτερη περιγραφή.

Έστω στήλη A (δεδομένα) αριθμοί με 2 ή 3 ψηφία.
Έστω στήλη B (κενά κελιά) στα οποία θα έρθει η αξία των Α και μπροστά τα ανάλογα 0 (μηδέν).
Η στήλη Β να γίνει μορφοποίηση κείμενο.
Έστω στήλη C (δεδομένα) οτιδήποτε.
Έστω στήλη D (κενά κελιά) στα οποία θα έρθει η συνένωση των A,B,C.

Κώδικας:

Sub test()
    Dim i As Long, lastrow As Long
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lastrow
        If Len(Cells(i, 1)) = 2 Then Cells(i, 2).Value = "0000" & Cells(i, 1).Value
        If Len(Cells(i, 1)) = 3 Then Cells(i, 2).Value = "000" & Cells(i, 1).Value
        Cells(i, 4).Value = Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value
    Next i
End Sub

Αντιγράψτε τον κώδικα σε μια module και τρέξτε τον.
Το αποτέλεσμα θα είναι όπως στις εικόνες.
Εικόνα 1 πριν, εικόνα 2 μετά.

kapetang 20-12-14 09:16

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

Θα πρότεινα την ακόλουθη απλοποίηση και γενίκευση στον κώδικα του Σπύρου:

Κώδικας:

Sub test()
    Dim i As Long, lastrow As Long
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lastrow
        Cells(i, 2) = Format(Cells(i, 1), "'000000")
        Cells(i, 4) = Cells(i, 1) & Cells(i, 2) & Cells(i, 3)
    Next i
End Sub

Φιλικά/Γιώργος

Spirosgr 20-12-14 10:52

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

Κατ' αρχήν:
Ο Παύλος, χωρίς να μας δώσει λεπτομέρειες, για το τι περιμένει (ως αποτέλεσμα) από αυτόν τον κώδικα που ζήτησε, θέλει να τον ενσωματώσει, σε κάποιον άλλο μεγαλύτερο.

Μπορεί λοιπόν το αποτέλεσμα πχ 000088 να είναι αριθμός με απόστροφο ή κείμενο.

Παρατήρηση:(*Υποστήριξη Microsoft >>> γιατί πρέπει να διορθώνουμε αριθμούς με απόστροφο)
Σε ορισμένες περιπτώσεις ο τρόπος εμφάνισης ενός αριθμού σε κάποιο κελί,
που έχει μορφοποιηθεί και αποθηκευτεί ως κείμενο (όχι καθαρό κείμενο, όχι καθαρός αριθμός), ενδέχεται να προκαλέσει προβλήματα στους υπολογισμούς ή να δημιουργήσει παράλογες σειρές ταξινόμησης.

Τώρα:
Θα μπορούσε λοιπόν κανείς, να προτείνει (όπως ο Γιώργος) έναν κώδικα, με αποτέλεσμα αριθμό με απόστροφο, που μπορεί να πάρουμε το 000155 για παράδειγμα και να το επεξεργαστούμε περαιτέρω...
πχ 000155*2=310 με ότι αυτό συνεπάγεται από την πιο πάνω παρατήρηση.

Τελικά:
Από την άλλη, η μορφή 000000 παραπέμπει ίσως σε κάτι, που θα μπορούσε να είναι όμοιο
με ΑΦΜ ή barcode.
Με αυτό το σκεπτικό, το αποτέλεσμα πρέπει κατά την γνώμη μου να είναι καθαρό κείμενο και πρέπει να μορφοποιηθεί η στήλη Β ως κείμενο.

spavlos 22-12-14 10:30

Παιδια ευχαριστω παρα πολυ ολους!

thanasisdim 27-09-17 10:05

Σας ευχαριστώ πολύ , όλους.
Με βοηθήσατε απίστευτα.


Η ώρα είναι 21:31.

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


Search Engine Optimization by vBSEO 3.3.2