Σε αυτό το άρθρο, έχουμε καλύψει διάφορα είδη βρόχων που χρησιμοποιούνται στο VBA και πώς να τα χρησιμοποιήσετε για να επιτύχετε την ίδια εργασία με διαφορετικούς τρόπους.
Γιατί βρόχους;
Το Looping είναι μια από τις πιο ισχυρές τεχνικές προγραμματισμού που χρησιμοποιείται σε πολλές γλώσσες προγραμματισμού. Το Looping χρησιμοποιείται για την επανάληψη ενός μπλοκ κώδικα για τον απαιτούμενο αριθμό φορών ή έως ότου μια δεδομένη συνθήκη αξιολογηθεί ως αληθής ή επιτευχθεί μια συγκεκριμένη τιμή, μετά την οποία εκτελείται το επόμενο μπλοκ κώδικα.
Ο σκοπός ενός βρόχου Excel VBA είναι να κάνει το Excel να επαναλαμβάνει ένα κομμάτι κώδικα ορισμένες φορές. Κάποιος μπορεί να καθορίσει πόσες φορές ένας κωδικός πρέπει να επαναληφθεί ως σταθερός αριθμός (π.χ. κάντε αυτό 10 φορές) ή ως μεταβλητή (π.χ. κάντε το όσες φορές υπάρχουν σειρές δεδομένων).
Οι βρόχοι Excel μπορούν να κατασκευαστούν με διαφορετικούς τρόπους για να ταιριάζουν σε διαφορετικές συνθήκες. Συχνά, τα ίδια αποτελέσματα μπορούν να επιτευχθούν με διαφορετικούς τρόπους που ταιριάζουν στις προσωπικές σας προτιμήσεις.
Υπάρχουν τρία διαφορετικά είδη βρόχων που διατίθενται στο Excel VBA, τα οποία είναι:
1. ΚΑΝΕΤΕ ΜΕΧΡΙ Βρόχο
2. ΚΑΝΕΤΕ ΕΝΟΣ ΒΡΟΧΟΣ
3. ΓΙΑ ΒΡΟΧΟ
1. ΚΑΝΕΤΕ ΜΕΧΡΙ Βρόχο
Το DO UNTIL Loop χρησιμοποιείται για επανάληψη ενός μπλοκ κώδικα επ 'αόριστον, έως ότου η καθορισμένη συνθήκη οριστεί σε True. Η κατάσταση μπορεί είτε να ελεγχθεί στην αρχή είτε στο τέλος του Βρόχου. Η δήλωση DO UNTIL… LOOP δοκιμάζει την κατάσταση στην αρχή, ενώ η δήλωση DO… LOOP ΜΕΧΡΙ την κατάσταση ελέγχει την κατάσταση στο τέλος του Βρόχου.
Σύνταξη του DO UNTIL… LOOP statement
Κάντε μέχρι [Κατάσταση]
[Μπλοκ κώδικα που πρέπει να επαναληφθεί]
Βρόχος
Σύνταξη του DO… LOOP ΜΕΧΡΙ τη δήλωση
Κάνω
[Μπλοκ κώδικα που πρέπει να επαναληφθεί]
Βρόχος μέχρι [Συνθήκη]
Έχουμε εξηγήσει DO… ΜΕΧΡΙ τον βρόχο με ένα παράδειγμα. Οι μακροεντολές Loop1 και Loop2 χρησιμοποιούνται για τον υπολογισμό του μέσου όρου των αριθμών στη στήλη A και στη στήλη B χρησιμοποιώντας τον βρόχο DO… ΜΕΧΡΙ το βρόχο.
Δείγματα δεδομένων υπάρχουν στο εύρος A15: B27. Η στήλη Α περιέχει βαθμολογίες του Γύρου 1 και η στήλη Β περιέχει βαθμολογίες του Γύρου 2. Θέλουμε να υπολογίσουμε τους μέσους όρους βαθμολογιών στον Γύρο 1 και Γύρο 2 στη στήλη Γ.
Στη μακροεντολή Loop1, χρησιμοποιήσαμε το "FormulaR1C1" για να εισαγάγουμε τον μέσο τύπο στο ενεργό κελί. Η κατάσταση κατάστασης στον βρόχο DO UNTIL ελέγχεται στο τέλος του βρόχου.
Στη μακροεντολή Loop2, χρησιμοποιήσαμε το "WorksheetFunction.Average" για να εισαγάγουμε τη μέση τιμή στο ενεργό κελί. Ακόμη και σε αυτήν τη μακροεντολή, η κατάσταση κατάστασης ελέγχεται στο τέλος του βρόχου.
Η μόνη διαφορά μεταξύ της μακροεντολής Loop1 και Loop2 είναι ότι ο Loop1 εισάγει τον μέσο τύπο, ενώ ο Loop2 υπολογίζει τον μέσο όρο και στη συνέχεια εισάγει τη μέση τιμή στο ενεργό κελί.
2. ΚΑΝΕΤΕ ΕΝΟΣ ΒΡΟΧΟΣ
Ο βρόχος DO WHILE χρησιμοποιείται για την επανάληψη ενός μπλοκ κώδικα επ 'αόριστον πολλές φορές, ενώ η καθορισμένη συνθήκη συνεχίζει να είναι True και σταματά όταν η συνθήκη επιστρέψει False. Η κατάσταση μπορεί είτε να ελεγχθεί στην αρχή είτε στο τέλος του Βρόχου. Η δήλωση DO WHILE… LOOP δοκιμάζει την κατάσταση στην αρχή, ενώ η δήλωση DO… LOOP WHILE δοκιμάζει την κατάσταση στο τέλος του βρόχου. Η δήλωση DO… LOOP WHILE χρησιμοποιείται όταν θέλουμε ο βρόχος να εκτελέσει το μπλοκ κώδικα τουλάχιστον μία φορά πριν ελέγξουμε την κατάσταση.
Σύνταξη της δήλωσης DO WHILE… LOOP
Do while [Condition]
[Μπλοκ κώδικα που πρέπει να επαναληφθεί]
Βρόχος
Σύνταξη της δήλωσης DO… LOOP WHILE
Κάνω
[Μπλοκ κώδικα που πρέπει να επαναληφθεί]
Βρόχος ενώ [Συνθήκη]
Σε αυτό το παράδειγμα, οι μακροεντολές Loop3 και Loop4 χρησιμοποιούνται για τον υπολογισμό των μέσων όρων για τιμές στα κελιά της στήλης Α και της στήλης Β. Και οι δύο μακροεντολές λειτουργούν στα ίδια δείγματα δεδομένων που χρησιμοποιούνται από τις μακροεντολές Loop1 και Loop2. Και οι δύο χρησιμοποιούν τη δήλωση DO WHILE για να περιγράψουν το εύρος που περιέχει τα δεδομένα.
Η μόνη διαφορά μεταξύ των μακροεντολών Loop3 και Loop4 είναι ότι είναι διαφορετικοί τρόποι αναπαράστασης των συνθηκών του βρόχου DO WHILE.
Καθώς οι μακροεντολές Loop3 και Loop4 χρησιμοποιούν τα ίδια δεδομένα εισόδου και εκτελούν ακόμη τις ίδιες λειτουργίες με τη μακροεντολή Loop1, έτσι ώστε η έξοδος που επιστρέφεται να είναι ίδια με τη μακροεντολή Loop1.
3. ΓΙΑ βρόχο
Το For Loop χρησιμοποιείται για την επανάληψη ενός μπλοκ κώδικα για συγκεκριμένο αριθμό φορών.
Σύνταξη του βρόχου FOR
Για count_variable = start_value To end_value
[μπλοκ κώδικα]
Επόμενη καταμέτρηση_μεταβλητή
Η μακροεντολή Loop5 δείχνει τον τρόπο χρήσης του βρόχου FOR για τον υπολογισμό του μέσου όρου. Χρησιμοποιεί επίσης τα ίδια δείγματα δεδομένων που χρησιμοποιούνται από άλλες μακροεντολές. Χρησιμοποιήσαμε το 15 ως αρχική τιμή καθώς τα δείγματα δεδομένων ξεκινούν από το 15ου σειρά. Χρησιμοποιήσαμε Range ("A" & Cells.Rows.Count). End (xlUp). Row για να βρείτε την τελευταία σειρά που περιέχει δεδομένα. Ο βρόχος FOR θα επαναληφθεί (lastcell- 15) πολλές φορές.
Η έξοδος που επιστρέφεται μετά την εκτέλεση της μακροεντολής Loop5 είναι ίδια με τη μακροεντολή Loop1.
Η μακροεντολή Loop6 δημιουργείται για τον υπολογισμό του μέσου όρου, μόνο αν το ενεργό κελί που θα έχει τη μέση συνάρτηση είναι κενό πριν την εκτέλεση της μακροεντολής.
Δείγματα δεδομένων για αυτήν τη μακροεντολή υπάρχουν στο εύρος E15 έως G27.
Έχουμε χρησιμοποιήσει το DO… LOOP WHILE για να περιηγηθείτε στο καθορισμένο εύρος. Η δήλωση IF χρησιμοποιείται για να ελέγξει εάν το κελί όπου θα εισαχθεί η λειτουργία περιέχει μια τιμή. Αυτή η μακροεντολή θα εισαγάγει τη μέση συνάρτηση στο κελί μόνο εάν είναι κενό.
Η μακροεντολή Loop7 χρησιμοποιείται επίσης για τον υπολογισμό του μέσου όρου. Ελέγχει για τιμές στη στήλη βοηθού προτού αξιολογήσει εάν θα κάνει ξανά βρόχο. Ελέγχει επίσης εάν η αναφορά κελιού που θα χρησιμοποιηθεί στη μέση συνάρτηση είναι κενή.
Τα δείγματα δεδομένων που χρησιμοποιούνται για τη μακροεντολή Loop7 είναι στην περιοχή J15: M27.
Η στήλη Μ χρησιμοποιείται ως στήλη βοηθού. Αυτή η μακροεντολή θα εισαγάγει μια μέση συνάρτηση μόνο εάν ένα κελί στη στήλη Μ δεν είναι κενό. Αυτή η μακροεντολή ελέγχει ότι ένα κελί πρέπει να είναι κενό πριν εισαγάγει μια μέση συνάρτηση σε αυτό. Δεν θα εισαγάγει μια μέση συνάρτηση εάν το κελί που αναφέρεται στη μέση συνάρτηση είναι κενό.
Ακολουθήστε παρακάτω για τον κωδικό
Επιλογή ρητός δευτερεύων βρόχος 1 () «Υπολογισμός μέσου όρου» Ο βρόχος Do Until θα κυκλωθεί έως ότου το κελί στην προηγούμενη στήλη του ενεργού κελιού είναι κενό Εύρος ("C15"). Επιλέξτε Do "Εκχώρηση μέσης συνάρτησης στην τιμή στα κελιά των δύο προηγούμενων συνεχόμενων στηλών ActiveCell. FormulaR1C1 = "= Μέσος όρος (RC [-1], RC [-2])" 'Μετακίνηση στο κελί της επόμενης σειράς ActiveCell.Offset (1, 0). Επιλέξτε "Έλεγχος αν η τιμή στο κελί της προηγούμενης στήλης είναι κενή" Κάνε μέχρι ο βρόχος θα κάνει βρόχο μέχρι να επιστρέψει η κατάσταση συνθήκης True Loop Until IsEmpty (ActiveCell.Offset (0, -1)) Range ("A15"). Select End End Sub Loop2 () 'Υπολογισμός μέσου όρου' Do Until loop θα κυκλώσει μέχρι το κελί στο προηγούμενο Η στήλη του ενεργού κελιού είναι κενή 'Αυτή η μακροεντολή είναι παρόμοια με τη μακροοικονομική Loop1, ο μόνος τρόπος υπολογισμού του μέσου όρου είναι διαφορετικό εύρος ("C15"). Επιλέξτε Do' Worsheet. Μια μέση συνάρτηση χρησιμοποιείται για τον υπολογισμό του μέσου όρου ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1). Value, _ ActiveCell.Offset (0, -2). Value) ActiveCell.Offset (1, 0). Επιλέξτε Loop Until IsEmpty (ActiveCel l.Offset (0, -1)) Range ("A15"). Select End Sub Sub Loop3 () 'Υπολογισμός μέσου όρου' Do while ο βρόχος θα εκτελεστεί έως ότου το κελί στην προηγούμενη στήλη του ενεργού κελιού είναι κενό Εύρος ("C15") . Επιλέξτε «Έλεγχος αν η τιμή στο κελί της προηγούμενης στήλης είναι κενή» Ο βρόχος Do while θα κάνει βρόχο έως ότου η κατάσταση κατάστασης είναι True Do while IsEmpty (ActiveCell.Offset (0, -1)) = False «Εκχώρηση μέσης συνάρτησης για την τιμή στα κελιά της προηγούμενης δύο συνεχόμενες στήλες ActiveCell.FormulaR1C1 = "= Μέσος όρος (RC [-1], RC [-2])" 'Μετακίνηση στο κελί της επόμενης σειράς ActiveCell.Offset (1, 0). Επιλέξτε Εύρος βρόχου ("A15"). Επιλέξτε End Sub Sub Loop4 () 'Υπολογισμός μέσου όρου' Do while ο βρόχος θα τρέξει έως ότου το κελί στην προηγούμενη στήλη του ενεργού κελιού είναι κενό 'Αυτή η μακροεντολή είναι παρόμοια με τη μακρο Loop3, ο μόνος τρόπος εφαρμογής της συνθήκης είναι διαφορετικό εύρος ("C15"). Επιλέξτε Do while Not IsEmpty (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Μέσος όρος (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Επιλέξτε Εύρος βρόχου (" A15 "). Επιλέξτε Τερματισμός δευτερεύοντος βρόχου 5 () 'Επαναλαμβάνεται ο βρόχος για σταθερό μούδιασμα er των χρόνων που καθορίζονται από τον αριθμό των σειρών Dim i, lastcell As Long 'Εύρεση της τελευταίας σειράς που περιέχει δεδομένα στη στήλη A lastcell = Range ("A" & Cells.Rows.Count). End (xlUp). Row Range ("C15 "). Επιλέξτε" μεταβλητή i έχει εκχωρηθεί τιμή 15 καθώς τα δείγματα δεδομένων μας ξεκινούν από τη 15η σειρά "Ο βρόχος FOR θα βρόχος x Για i = 15 To lastcell ActiveCell.FormulaR1C1 =" = Μέσος όρος (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Επιλέξτε Next i Range (" A15 "). Επιλέξτε End Sub Sub Loop6 ()" Υπολογισμός μέσου όρου "Do Until loop θα κυκλωθεί έως ότου το κελί στην προηγούμενη στήλη του ενεργού κελιού είναι κενό" Δεν υπολογίζει έναν μέσο όρο εάν υπάρχει ήδη κάτι στο εύρος κελιών ("G15"). Επιλέξτε Do If IsEmpty (ActiveCell) Στη συνέχεια ActiveCell.FormulaR1C1 = "= Μέσος όρος (RC [-1], RC [-2])" Τερματισμός Αν ActiveCell.Offset (1, 0) .Επιλέξτε Βρόχο έως ότου IsEmpty (ActiveCell.Offset (0, -1)) Εύρος ("E15"). Επιλέξτε Τέλος δευτερεύοντος βρόχου 7 () "Κάνε έως ότου ο βρόχος τρέχει όσο υπάρχει κάτι στο κελί στην επόμενη στήλη 'Δεν υπολογίζει έναν μέσο όρο αν υπάρχει ήδη κάτι στο ενεργό γ ell 'Ούτε εάν δεν υπάρχουν δεδομένα σε κελιά που χρησιμοποιούνται εντός της μέσης λειτουργίας (για να αποφευχθούν σφάλματα #DIV/0). 'Υπολογισμός μέσου εύρους ("L15"). Επιλέξτε Do If IsEmpty (ActiveCell) Στη συνέχεια If IsEmpty (ActiveCell.Offset (0, -1)) Και IsEmpty (ActiveCell.Offset (0, -2)) Στη συνέχεια ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Μέσος όρος (RC [-1], RC [-2]) "Τέλος αν τελειώσει Αν ActiveCell. Offset (1, 0). Επιλέξτε Loop Until IsEmpty (ActiveCell.Offset (0, 1)) Εύρος ("J15"). Επιλέξτε Τέλος υπο
Αν σας άρεσε αυτό το blog, μοιραστείτε το με τους φίλους σας στο Facebook. Επίσης, μπορείτε να μας ακολουθήσετε στο Twitter και το Facebook.
Θα θέλαμε πολύ να σας ακούσουμε, ενημερώστε μας πώς μπορούμε να βελτιώσουμε το έργο μας και να το κάνουμε καλύτερο για εσάς. Γράψτε μας στον ιστότοπο email