Tzimmys Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 Καλημέρα. Χρειάζομαι να κάνω κάτι αλλαγές σε ένα excel με περίπου 1000 γραμμές και είναι αδύνατον να γίνει copy-paste. Θέλω λοιπόν έναν αυτοματισμό να κάνω την διαδικασία που επισυνάπτω. Γνωρίζει κάποιος αν υπάρχει τρόπος? Ευχαριστώ. TEST.xlsx
tyf Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 θελεις οπου λεει 123 να το αλλαξεις σε 456? γιατι δεν το κανεις με το replace?
micos000 Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 (επεξεργασμένο) Όχι, θέλει τα ζυγά κελιά να αντιγράφονται στα μονά. Μάλλον θέλει macro ή vba script. π.χ. για το macro θα προγραμματίσεις μια εντολή που να προχωράει δύο κελιά κάτω, να αντιγράφει τα περιεχόμενα, μετά να επιστρέφει ένα κελί πάνω και να κάνει επικόλληση. Θα ξεκινήσεις το macro από το 1ο κελί και θα το επαναλαμβάνεις μέχρι τέλος. Επεξ/σία 24 Αυγούστου 2018 από micos000
asmilon Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 Μια απλη λυση χωρις macro ειναι να προσθεσεις 2 στηλες (C, D). Στην C βαζεις εναλλαξ 1, 2 στα κελια ωστε να δηλωσεις μονα, ζυγα. Στην D βαζεις την φορμουλα =IF(C1=1;B2;B1) στο κελι D1 και μετα την τραβας προς τα κατω ωστε να κανει apply στα υπολοιπα κελια. Για να ολοκληρωσεις τωρα την δουλεια κανεις αντιγραφη την στηλη D στην στηλη B με Paste Special -> Values και αφου καθαρισεις τα C & D εισαι ετοιμος. 1
micos000 Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 (επεξεργασμένο) Μια απλή μακροεντολή είναι η παρακάτω... ' ' copy_paste macro ' Dim i As Integer For i = 2 To 8 Step 2 Range("B" & i).Select Selection.Copy Range("B" & (i + 1)).Select ActiveSheet.Paste Next Στην γραμμή "For i= 2 to 8" βάζεις σε από ποια σειρά μέχρι ποια θέλεις να γίνει η αντιγραφή. Το "step 2" δηλώνει ανά πόσα βήματα θα προχωράει. Το "Β" είναι η στήλη. Τώρα, θα πας Μακροεντολές και θα δημιουργήσεις μια νέα. Θα δώσεις ένα όνομα και θα πατήσεις Επεξεργασία. Θα κάνεις επικόλληση το΄παραπάνω ανάμεσα στο Sub και στο End Sub. Θα κλείσεις τον vba editor και θα σώσεις το excell σε μορφή που υποστηρίζει μακροεντολές (.xlsm). Τώρα πηγαίνοντας στις μακροεντολές θα την επιλέγεις και θα πατάς Εκτέλεση. Υ.Γ. Εννοείται ότι σηκώνει αρκετή βελτίωση όπως να επιλέγει αυτόματα σαν αρχικό κελί αυτό που είναι επιλεγμένο και να αντιγράφει μέχρι το τελευταίο κελί, όποιο κι αν είναι αυτό, αλλά έχω πολλά χρόνια να ασχοληθώ με vba και δε θυμάμαι όλες τις εντολές. Όποιος γνωρίζει ας το διορθώσει κατά βούληση. Επεξ/σία 24 Αυγούστου 2018 από micos000 1
Tzimmys Δημοσ. 24 Αυγούστου 2018 Μέλος Δημοσ. 24 Αυγούστου 2018 Παιδιά, σας ευχαριστώ πολύ για τις απαντήσεις σας. Έψαχνα ακριβώς αυτό που πολύ σωστά κατάλαβε ο Micos. Το προσπαθώ τώρα και επανέρχομαι με τα αποτελέσματα. Καλημέρα και καλή δύναμη σε όλους.
micos000 Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 Έχω επεξεργαστεί το προηγούμενο post και πρόσθεσα κάποιες επεξηγήσεις. (σε περίπτωση που απάντησες πριν τις διορθώσεις και δεν τις είδες) 1
Tzimmys Δημοσ. 24 Αυγούστου 2018 Μέλος Δημοσ. 24 Αυγούστου 2018 (επεξεργασμένο) Τις είδα, αλλά δυστυχώς αν είσαι εντελώς άσχετος, αδυνατείς να καταλάβεις και τα -για πολλούς- αυτονόητα. Να ρωτήσω παρακαλώ γιατί βάζεις For i = 2 To 8 Step 2 και όχι For i = 1 To 8 Step 2 Δηλαδή, εγώ που στο excel έχω και μια πρώτη γραμμή με τα ονόματα των στηλών, πρέπει να βάλει 2 ή 3? Ή κάτι άλλο? Και επίσης, το excel αποτελείται από περίπου 20 στήλες και όπως έιπα κοντά στις 1000 γραμμές. Από τις 20 στήλες, εγώ θέλω να αντιγράψω τις 6-7 από τις 20. Δοκίμασα λοιπόν το παρακάτω, αλλά κάπου κάνω λάθος. Και πάλι ευχαριστώ! ' ' copy_paste macro ' Dim i As Integer For i = 2 To 8 Step 2 Range("B", "C", "D", "E", "F", "G" & i).Select Selection.Copy Range("B", "C", "D", "E", "F", "G" & (i + 1)).Select ActiveSheet.Paste Next Επεξ/σία 24 Αυγούστου 2018 από Tzimmys
micos000 Δημοσ. 24 Αυγούστου 2018 Δημοσ. 24 Αυγούστου 2018 (επεξεργασμένο) Βάζω 2 έως 8 για να ξεκινάει και να καταλήγει με το κελί από το οποίο θα γίνει η αντιγραφή. Αν το έβαζα από 1 έως 7 (ένα μικρότερο από το τελευταίο κελί) θα έβαζα το 1ο range (i-1) και το 2ο απλά i, το ίδιο θα είναι. Μετά, αφού έχεις πολλές στήλες θα πρέπει να προσαρμόσεις σωστά το range της επιλογής. Ακολουθεί διορθωμένο το script όπου προσάρμοσα την for για να συνεχίζει μέχρι να βρει το τελευταίο κελί. Αν δε σε βολεύει βάλε την for όπως το 1ο script ξεκινώντας από τη γραμμή 3. ' ' c_p Macro ' Dim i As Integer Dim j As Integer For i = 3 To Range("B" & Rows.Count).End(xlUp).Row Step 2 j = i - 1 Range("B" & i, "G" & i).Select Selection.Copy Range("B" & j, "G" & j).Select ActiveSheet.Paste Next Α, έχω προσέξει όμως ότι αν είναι μονός ο αριθμός των γραμμών προς αντιγραφή (π.χ. 101) η 101η μένει όπως είναι γιατί δεν υπάρχει 102 γραμμή για να αντιγραφτεί στην 101. Πρόσεξε το αυτό. EDIT: Να σημειώσω ότι οι στήλες για επιλογή αναφέρονται στις δύο Range και δηλώνονται μέσα στην παρένθεση ως εξής: ("ΑΠΟ" & i, "ΕΩΣ" & i) και αντίστοιχα για την επικόλληση το i γίνεται j. Οπότε αν θέλεις από την D έως την K θα βάλεις αντί Β το D και αντί G το K μέσα στα ομοιωματικά. Επεξ/σία 24 Αυγούστου 2018 από micos000 1
Tzimmys Δημοσ. 24 Αυγούστου 2018 Μέλος Δημοσ. 24 Αυγούστου 2018 Για ακόμα μία φορά με βοήθησες και για ακόμα μία φορά η λύση σου δούλεψε άψογα. Ήταν απόλαυση να βλέπω το excel να μεταφορτώνεται στην μορφή που το θέλω. Ευχαριστώ όλα τα παιδιά και κυρίως τον mico για την βοήθειά σας. Καλή συνέχεια σε όλους!!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα