Στο Excel VBA, εάν η δήλωση "Άλλο" σας επιτρέπει να ελέγξετε για μια κατάσταση και να εκτελέσετε μια ενέργεια ανάλογα.
Αυτό είναι εξαιρετικά πολύτιμο σε πολλές περιπτώσεις όπως θα δούμε στα παραδείγματα αργότερα σε αυτό το σεμινάριο.
Για να σας δώσω ένα απλό παράδειγμα, ας υποθέσουμε ότι έχετε μια λίστα με βαθμούς στο Excel και θέλετε να επισημάνετε όλους εκείνους τους μαθητές που έχουν σημειώσει Α. Τώρα, αν σας ζητήσω να το κάνετε αυτό χειροκίνητα, θα ελέγξετε τον βαθμό κάθε μαθητή και αν είναι ένα Α, θα το επισημάνετε, και αν δεν είναι, τότε θα το αφήσετε ως έχει.
Η ίδια λογική μπορεί να δημιουργηθεί και στο VBA χρησιμοποιώντας το Αν Τότε Άλλο δήλωση επίσης (και φυσικά κάνει πολλά περισσότερα από την απλή επισήμανση βαθμών).
Σε αυτό το σεμινάριο, θα σας δείξω διαφορετικούς τρόπους με τους οποίους μπορεί να χρησιμοποιηθεί η κατασκευή «Αν τότε άλλο» στο Excel VBA και μερικά πρακτικά παραδείγματα σε δράση.
Αλλά πριν μπω στα συγκεκριμένα, επιτρέψτε μου να σας δώσω τη σύνταξη της δήλωσης «ΕΑΝ ΑΛΛΑ ΑΛΛΑ».
Εάν ενδιαφέρεστε να μάθετε VBA με τον εύκολο τρόπο, ελέγξτε το δικό μου Online Εκπαίδευση Excel VBA.
Σύνταξη - ΑΝ Στη συνέχεια Άλλο
Παρακάτω είναι η γενική σύνταξη της κατασκευής If Then Else σε VBA
IF condition Στη συνέχεια true_code [Else false_code]
Ή
IF condition Τότε true_code Else false_code End IF
Σημειώστε ότι το άλλο τμήμα αυτής της δήλωσης είναι προαιρετικό.
Τώρα αν αναρωτιέστε ποια είναι η διαφορά μεταξύ των δύο συντακτικών, επιτρέψτε μου να διευκρινίσω.
Η πρώτη σύνταξη είναι μια απλή δήλωση IF THEN ELSE μιας γραμμής όπου δεν χρειάζεται να χρησιμοποιήσετε τη δήλωση END IF.
Ωστόσο, στη δεύτερη σύνταξη, το μέρος true_code βρίσκεται στη δεύτερη γραμμή. Αυτό είναι χρήσιμο όταν ο κώδικας που πρέπει να εκτελέσετε σε περίπτωση που η συνθήκη IF είναι αληθής είναι μεγάλος και αποτελείται από πολλές γραμμές.
Όταν χωρίζετε τη δήλωση IF σε πολλές γραμμές, πρέπει να πείτε στη VBA πού τελειώνει η κατασκευή IF Στη συνέχεια.
Επομένως, πρέπει να χρησιμοποιήσετε τη δήλωση Τέλος IF.
Σε περίπτωση που δεν χρησιμοποιείτε τερματισμό εάν απαιτείται, η VBA θα σας εμφανίσει ένα σφάλμα - "Αποκλεισμός IF χωρίς END IF"
Παραδείγματα χρήσης του IF then Statement σε VBA
Για να σας δώσω μια ιδέα για το πώς λειτουργεί η δήλωση IF-THEN στο VBA, επιτρέψτε μου να ξεκινήσω με μερικά βασικά παραδείγματα (μερικά πρακτικά και πιο χρήσιμα παραδείγματα καλύπτονται αργότερα σε αυτό το σεμινάριο).
Ας υποθέσουμε ότι έχετε βαθμολογία μαθητή στο κελί Α1 και θέλετε να ελέγξετε αν ο μαθητής πέρασε την εξέταση ή όχι (το όριο επιτυχίας είναι 35).
Στη συνέχεια, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:
Sub CheckScore () If Range ("A1"). Τιμή> = 35 Τότε MsgBox "Pass" End Sub
Ο παραπάνω κώδικας έχει μία μόνο γραμμή δήλωσης IF που ελέγχει την τιμή στο κελί A1.
Εάν είναι πάνω από 35, εμφανίζει το μήνυμα - "Pass".
Αν είναι λιγότερο από 35, δεν συμβαίνει τίποτα.
Αλλά τι γίνεται αν θέλετε να εμφανίσετε ένα μήνυμα και στις δύο περιπτώσεις, αν ένας μαθητής πέρασε ή απέτυχε στις εξετάσεις.
Ο παρακάτω κώδικας θα το έκανε αυτό:
Sub CheckScore () If Range ("A1"). Value> = 35 Τότε MsgBox "Pass" Els MsgBox "Fail" End If End Sub
Ο παραπάνω κώδικας χρησιμοποιεί την IF καθώς και τη δήλωση ELSE για την εκτέλεση δύο διαφορετικών συνθηκών. Όταν η βαθμολογία είναι μεγαλύτερη από (ή ίση με) 35, η συνθήκη IF είναι αληθής και ο κώδικας ακριβώς κάτω από αυτόν εκτελείται (όλα πριν από την άλλη δήλωση).
Αλλά όταν η συνθήκη IF είναι FALSE, ο κώδικας μεταβαίνει στο άλλο τμήμα και εκτελεί το μπλοκ κώδικα σε αυτό.
Σημειώστε ότι όταν χρησιμοποιούμε μία μόνο γραμμή δήλωσης IF then, δεν χρειάζεται να χρησιμοποιήσουμε το End IF. Αλλά όταν το χωρίσουμε σε περισσότερες από μία γραμμές, πρέπει να χρησιμοποιήσουμε τη δήλωση End If.
Ένθετο ΑΝ Τότε (πολλαπλές δηλώσεις Αν μετά)
Μέχρι στιγμής έχουμε χρησιμοποιήσει μια ενιαία πρόταση IF then.
Σε περίπτωση που έχετε πολλούς όρους για έλεγχο, μπορείτε να χρησιμοποιήσετε:
- Πολλαπλές συνθήκες IF
- If then Else statement
- IF Στη συνέχεια ElseIf Else κατασκευή
Επιτρέψτε μου να σας δείξω πώς διαφέρουν αυτά και πώς να το χρησιμοποιήσετε στο Excel VBA.
Πολλαπλές καταστάσεις IF Στη συνέχεια
Ας πάρουμε το ίδιο παράδειγμα χρήσης της βαθμολογίας ενός μαθητή.
Εάν ο μαθητής σκοράρει λιγότερο από 35, το μήνυμα που εμφανίζεται είναι «Αποτυχία», εάν η βαθμολογία είναι μεγαλύτερη ή ίση με 35, το μήνυμα που εμφανίζεται είναι «Πάσο».
Μπορούμε να χρησιμοποιήσουμε τον παρακάτω κώδικα για να το κάνουμε αυτό:
Sub CheckScore () If Range ("A1"). Value = 35 Then MsgBox "Pass" End Sub
Μπορείτε να χρησιμοποιήσετε πολλαπλή δήλωση IF Στη συνέχεια, όπως φαίνεται παραπάνω. Ενώ αυτό λειτουργεί, δεν είναι παράδειγμα καλής κωδικοποίησης (όπως θα δείτε τις εναλλακτικές λύσεις παρακάτω).
Σε περίπτωση που αποφασίσετε να το χρησιμοποιήσετε, θυμηθείτε ότι αυτές οι δηλώσεις πρέπει είτε να είναι ανεξάρτητες είτε αμοιβαίως αποκλειόμενες. Το σημαντικό πράγμα που πρέπει να γνωρίζετε εδώ είναι ότι στην παραπάνω κατασκευή, όλες οι προτάσεις IF αξιολογούνται και εκείνες όπου η συνθήκη είναι αληθής, ο κώδικας εκτελείται.
Έτσι, ακόμη και αν η πρώτη πρόταση IF είναι σωστή, η δεύτερη θα εξακολουθεί να αξιολογείται.
ΑΝ Στη συνέχεια δήλωση άλλου
Ας υποθέσουμε ότι αυτή τη φορά, αντί να εμφανίζουμε απλώς το μήνυμα Pass/Fail, έχουμε μια ακόμη συνθήκη.
Εάν ο μαθητής σκοράρει λιγότερο από 35, το μήνυμα που εμφανίζεται είναι "Αποτυχία", εάν η βαθμολογία είναι μεγαλύτερη ή ίση με 35, το μήνυμα που εμφανίζεται είναι "Pass" και εάν η βαθμολογία είναι μεγαλύτερη από 80, το μήνυμα προς εμφάνιση είναι «Pass, with Distinction».
Μπορούμε να χρησιμοποιήσουμε τον παρακάτω κώδικα για να το κάνουμε αυτό:
Sub CheckScore () If Range ("A1"). Τιμή <35 Τότε MsgBox "Fail" Else If Range ("A1"). Τιμή <80 Στη συνέχεια MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Υπο
Στον παραπάνω κώδικα, χρησιμοποιήσαμε πολλαπλές προτάσεις IF (ένθετο IF Στη συνέχεια) με τη βοήθεια του άλλου.
Υπάρχει λοιπόν μια κατασκευή «ΕΑΝ ΑΛΛΑ ΑΛΛΑ» μέσα σε μια κατασκευή «ΕΑΝ ΑΛΛΑ ΑΛΛΑ». Αυτός ο τύπος ένθεσης σας επιτρέπει να ελέγξετε για πολλές συνθήκες και να εκτελέσετε το σχετικό μπλοκ κώδικα.
ΑΝ Στη συνέχεια Δήλωση ΆλλουΕάν άλλου
Ο παραπάνω κώδικας (που είδαμε στην προηγούμενη ενότητα) μπορεί να βελτιστοποιηθεί περαιτέρω χρησιμοποιώντας τη δήλωση ElseIf.
Εδώ είναι αυτό που προσπαθούμε να κάνουμε - Εάν ο μαθητής σκοράρει λιγότερο από 35, το μήνυμα που εμφανίζεται είναι "Αποτυχία", εάν η βαθμολογία είναι μεγαλύτερη ή ίση με 35, το μήνυμα που εμφανίζεται είναι "Pass" και εάν το η βαθμολογία είναι μεγαλύτερη από 80, το μήνυμα που εμφανίζεται είναι "Pass, with Distinction".
Sub CheckScore () If Range ("A1"). Τιμή <35 Τότε MsgBox "Fail" ElseIf Range ("A1"). Τιμή <80 Στη συνέχεια MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub
Ο παραπάνω κώδικας χρησιμοποιεί το ElseIf, το οποίο μας επιτρέπει να διατηρούμε όλες τις συνθήκες μέσα σε μία μόνο δήλωση IF then.
Χρησιμοποιώντας AND και OR στο IF then Else
Μέχρι στιγμής σε αυτό το σεμινάριο, έχουμε ελέγξει μόνο μία κατάσταση κάθε φορά.
Ωστόσο, όταν έχετε πολλές εξαρτώμενες συνθήκες, μπορείτε να χρησιμοποιήσετε τη δήλωση AND ή OR με τις συνθήκες IF.
Παρακάτω είναι η σύνταξη της χρήσης συνθήκης AND/OR με τη δήλωση IF then.
IF Condition1 AND Condition2 Στη συνέχεια true_code Else false_code End IF
Στον παραπάνω κώδικα, μόνο όταν πληρούνται τόσο η προϋπόθεση1 όσο και η συνθήκη2, ο true_code εκτελείται. Ακόμα κι αν μία από τις συνθήκες είναι ψευδής, θα εκτελέσει τον κωδικό false_code.
Με το OR, ακόμη και αν μία από τις προϋποθέσεις είναι αληθής, θα εκτελέσει τον κώδικα true_code. Μόνο όταν όλες οι συνθήκες είναι ψευδείς, εκτελεί τον κωδικό false_code.
Τώρα ας δούμε πώς λειτουργεί η δήλωση AND και OR με την κατασκευή IF then Else.
Ας υποθέσουμε ότι έχετε τις βαθμολογίες για δύο θέματα αντί για ένα και θέλετε να ελέγξετε για τις ακόλουθες συνθήκες:
- Αποτυγχάνω - Όταν η βαθμολογία είναι μικρότερη από 35 σε οποιοδήποτε από τα θέματα.
- Πέρασμα - Όταν η βαθμολογία είναι μεγαλύτερη ή ίση με 35, αλλά μικρότερη από 80 και στα δύο θέματα.
- Πάσο, με διάκριση - Όταν η βαθμολογία είναι μεγαλύτερη από 35 και στα δύο θέματα και είναι μεγαλύτερη ή ίση με 80 σε ένα ή και στα δύο θέματα.
Εδώ είναι ο κώδικας που θα το κάνει αυτό:
Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Τιμή <80 And Range ("B1") Τιμή <80 Τότε MsgBox "Pass" Els MsgBox "Pass, με διάκριση" End If End Sub
Ο παραπάνω κώδικας χρησιμοποιεί δηλώσεις OR και AND.
Μπορείτε επίσης να γράψετε αυτόν τον ίδιο κωδικό με μια μικρή αλλαγή (χρησιμοποιώντας OR αντί AND).
Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value 80 Or Range ("B1"). Value> 80 Στη συνέχεια MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Αν Τέλος υπο
Και οι δύο παραπάνω κωδικοί VBA θα σας δώσουν το ίδιο αποτέλεσμα. Προσωπικά, προτιμώ το πρώτο καθώς έχει μια λογική ροή ελέγχου των βαθμολογιών (αλλά αυτό είμαι μόνο εγώ).
Χρησιμοποιώντας το Not Equal to στο If then
Σε όλα τα παραπάνω παραδείγματα, χρησιμοποιήσαμε τις συνθήκες που ελέγχουν εάν μια τιμή ισούται με μια καθορισμένη τιμή ή όχι.
Μπορείτε επίσης να χρησιμοποιήσετε παρόμοιους κωδικούς κατά τον έλεγχο όταν η τιμή δεν είναι ίση με μια καθορισμένη τιμή στον κωδικό VBA. Δεν είναι ίσο με αυτό που αντιπροσωπεύεται από το Excel VBA.
Για να δείτε ένα πρακτικό παράδειγμα χρήσης, ρίξτε μια ματιά στο Παράδειγμα 1 παρακάτω.
Χρησιμοποιώντας το If then Else με βρόχους στο VBA
Μέχρι στιγμής, έχουμε περάσει από μερικά παραδείγματα που είναι καλό να κατανοήσουμε πώς λειτουργούν οι δηλώσεις ‘IF-THEN’ στο VBA, ωστόσο, δεν είναι χρήσιμες στον πρακτικό κόσμο.
Εάν πρέπει να βαθμολογήσω μαθητές, μπορώ εύκολα να το κάνω χρησιμοποιώντας λειτουργίες Excel.
Ας ρίξουμε μια ματιά σε μερικά χρήσιμα και πρακτικά παραδείγματα που μπορούν να σας βοηθήσουν να αυτοματοποιήσετε κάποια πράγματα και να είστε πιο αποτελεσματικοί.
Παράδειγμα 1 - Αποθήκευση και κλείσιμο όλων των βιβλίων εργασίας εκτός από το ενεργό βιβλίο εργασίας
Εάν έχετε πολλά βιβλία εργασίας ανοιχτά και θέλετε γρήγορα να τα κλείσετε όλα, εκτός από το ενεργό βιβλίο εργασίας, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα,
Sub SaveCloseAllWorkbooks () Dim wb As Workbook For each wb In Workbooks On error Συνέχιση επόμενου Εάν wb. Όνομα ActiveWorkbook.Name Στη συνέχεια wb.Save wb. Close End If Next wb End Sub
Ο παραπάνω κώδικας θα αποθηκεύσει και θα κλείσει όλα τα βιβλία εργασίας (εκτός από το ενεργό).
Χρησιμοποιεί τον βρόχο For Next για να περάσει από τη συλλογή όλων των ανοιχτών βιβλίων εργασίας και ελέγχει το όνομα χρησιμοποιώντας τη συνθήκη IF.
Εάν το όνομα δεν είναι το ίδιο με αυτό του ενεργού βιβλίου εργασίας, το αποθηκεύει και το κλείνει.
Σε περίπτωση που υπάρχει κωδικός VBA σε οποιοδήποτε από τα βιβλία εργασίας και δεν τον έχετε αποθηκεύσει ως .xls ή .xlsm, θα δείτε μια προειδοποίηση (καθώς οι κωδικοί vba χάνονται όταν τον αποθηκεύετε σε μορφή .xlsx).
Παράδειγμα 2 - Επισημάνετε κελιά με αρνητικές τιμές
Ας υποθέσουμε ότι έχετε μια στήλη γεμάτη αριθμούς και θέλετε να επισημάνετε γρήγορα όλα τα κελιά με αρνητικές τιμές με κόκκινο χρώμα, μπορείτε να το κάνετε χρησιμοποιώντας τον παρακάτω κώδικα.
Sub HighlightNegativeCells () Dim Cll As Range For Every Cll In Selection If Cll.Value <0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub
Ο παραπάνω κώδικας χρησιμοποιεί το βρόχο Για κάθε και ελέγχει κάθε κελί στην επιλογή που έχετε κάνει. Εάν το κελί έχει αρνητική τιμή, επισημαίνεται με κόκκινο με λευκό χρώμα γραμματοσειράς.
Παράδειγμα 3 - Απόκρυψη όλου του φύλλου εργασίας εκτός από το τρέχον φύλλο εργασίας
Σε περίπτωση που θέλετε να αποκρύψετε γρήγορα όλα τα φύλλα εργασίας εκτός από το ενεργό, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα:
Sub HideAllExceptActiveSheet () Dim ws As Worksheet For Every ws In ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End sub
Ο παραπάνω κώδικας χρησιμοποιεί το βρόχο Για κάθε για να περάσει από μια συλλογή φύλλων εργασίας. Ελέγχει το όνομα κάθε φύλλου εργασίας και το αποκρύπτει εάν δεν είναι το ενεργό φύλλο εργασίας.
Παράδειγμα 4 - Εξαγάγετε το αριθμητικό μέρος από μια αλφαριθμητική συμβολοσειρά
Εάν έχετε αλφαριθμητικές συμβολοσειρές σε κελιά και θέλετε να εξαγάγετε το αριθμητικό τμήμα από αυτό, μπορείτε να το κάνετε χρησιμοποιώντας τον παρακάτω κώδικα:
Συνάρτηση GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Στη συνέχεια Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Λειτουργία λήξης αποτελεσμάτων
Αυτός ο κώδικας θα δημιουργήσει μια προσαρμοσμένη συνάρτηση στο Excel που μπορεί να χρησιμοποιηθεί στο φύλλο εργασίας (ακριβώς όπως μια κανονική συνάρτηση).
Πού να τοποθετήσετε τον κωδικό VBA;
Αναρωτιέστε πού πηγαίνει ο κώδικας VBA στο βιβλίο εργασίας του Excel;
Το Excel διαθέτει ένα backend VBA που ονομάζεται VB editor. Πρέπει να αντιγράψετε και να επικολλήσετε τον κώδικα στο παράθυρο κωδικού της λειτουργικής μονάδας VB Editor.
Ακολουθούν τα βήματα για να το κάνετε αυτό:
- Μεταβείτε στην καρτέλα Προγραμματιστής.
- Κάντε κλικ στην επιλογή Visual Basic. Αυτό θα ανοίξει τον επεξεργαστή VB στο backend.
- Στο παράθυρο Project Explorer στο VB Editor, κάντε δεξί κλικ σε οποιοδήποτε αντικείμενο για το βιβλίο εργασίας στο οποίο θέλετε να εισαγάγετε τον κώδικα. Εάν δεν βλέπετε το Project Explorer, μεταβείτε στην καρτέλα Προβολή και κάντε κλικ στο Project Explorer.
- Μεταβείτε στην επιλογή Εισαγωγή και κάντε κλικ στην ενότητα. Αυτό θα εισαγάγει ένα αντικείμενο ενότητας για το βιβλίο εργασίας σας.
- Αντιγράψτε και επικολλήστε τον κώδικα στο παράθυρο της λειτουργικής μονάδας.