Λειτουργία VBA IIF

Αυτό το σεμινάριο θα εξηγήσει τον τρόπο χρήσης του IIF στο VBA

Η συνάρτηση VBA IIF είναι παρόμοια με τη χρήση της συνάρτησης IF στο Excel. Ελέγχει εάν πληρούται μια συνθήκη, επιστρέφοντας μία τιμή (ή υπολογισμό) εάν είναι TRUE, μια άλλη τιμή (ή υπολογισμός) εάν είναι ΛΑΘΟΣ.

Είναι παρόμοιο με το VBA If Statement, πολλοί θεωρούν συντόμευση τη χρήση αυτής της μεθόδου καθώς χρειάζεται μόνο να γράψετε μία γραμμή κώδικα για να έχετε το επιθυμητό αποτέλεσμα αντί να χρησιμοποιήσετε Αν… Τότε… Άλλο… Τέλος Αν ρουτίνα. Ωστόσο, πρέπει να χρησιμοποιηθεί σωστά, καθώς μπορεί να οδηγήσει σε προβλήματα στον κώδικά σας.

Σύνταξη IIF

Η συνάρτηση IFF αποτελείται από 3 μέρη - τη λογική δοκιμή, το αληθινό μέρος και το ψεύτικο μέρος.

  • Εκφραση:Το λογικό τεστ που πρόκειται να πραγματοποιηθεί.
  • Αληθινό Μέρος: Το αποτέλεσμα που θα επιστρέψει αν το λογικό τεστ είναι ΑΛΗΘΙΝΟ.
  • Λάθος Μέρος: Το αποτέλεσμα που θα επιστρέψει αν το λογικό τεστ είναι ΛΑΘΟΣ.

Σύνταξη διαδικασίας συνάρτησης IIF

123 Λειτουργία GetNames (strName As String) As StringGetNames = IIf (strName = "John", "The name is John", "The name is not John")Λειτουργία Τέλους

Στην παραπάνω συνάρτηση, μπορούμε να χρησιμοποιήσουμε μια υπο-διαδικασία για να ελέγξουμε αν η μεταβλητή που περνάμε στη συνάρτηση είναι η συμβολοσειρά "John"

123 Sub TestGetNamaes ()MsgBox GetNames ("John")Τέλος υπο

Εάν εκτελούσαμε την υπο-διαδικασία TestGetNames, θα καλούσε τη συνάρτηση GetNames και θα επέστρεφε ένα πλαίσιο μηνυμάτων.

Αν είχαμε χρησιμοποιήσει τη μέθοδο If αντ 'αυτού, ο κώδικας θα είχε την εξής μορφή:

1234567 Λειτουργία GetNames (strName As String) As StringΑν (strName = "John") ΤότεGetNames = "Το όνομα είναι Γιάννης"ΑλλούGetNames = "Το όνομα δεν είναι Γιάννης"Τέλος εανΛειτουργία Τέλους

Έχουμε γράψει ουσιαστικά μια γραμμή κώδικα αντί για 5 γραμμές κώδικα - εντυπωσιακό!

Γιατί να χρησιμοποιήσω το αντ 'αυτού;

Σκέψου τα ακόλουθα

123 Λειτουργία GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("Το όνομα είναι John"), MsgBox ("Το όνομα δεν είναι John"))Λειτουργία Τέλους

Τώρα αν εκτελέσετε την ακόλουθη Υπο-διαδικασία για να καλέσετε τη λειτουργία σας

123 Υπο TestGetNames ()GetNames ("John")Τέλος υπο

Θα έπαιρνες το ίδιο πλαίσιο μηνυμάτων όπως πριν, αλλά αμέσως μετά από αυτό - θα έπαιρνες το επόμενο πλαίσιο μηνυμάτων!

Η συνάρτηση IIF εκτελεί τόσο τα TRUE όσο και τα FALSE τμήματα της γραμμής κώδικα - δεν βγαίνει από τον κώδικα όταν διαπιστώσει ότι η συνθήκη είναι αληθινή - εξακολουθεί να εκτελεί επίσης το ψευδές τμήμα - δίνοντάς μας έτσι ένα ψευδές μήνυμα στο δεύτερο κουτί μηνυμάτων. Αν είχατε χρησιμοποιήσειΑν… Τότε… Άλλο… Τέλος Αν - αυτό δεν θα είχε συμβεί - η συνάρτηση IF εκτελεί μόνο το τμήμα TRUE ή FALSE του κώδικα - ανάλογα με τη λογική που μεταβιβάζεται στον κώδικα.

Ο κώδικας είναι κακώς σχεδιασμένος (επίτηδες!) Με τα κουτιά μηνυμάτων να βρίσκονται εντός της γραμμής κώδικα στην οποία βρίσκεται η δήλωση IIF και όχι μετά τον κώδικα ή στην υπορουτίνα. Καθώς η συνάρτηση IIF εκτελεί τόσο τις TRUE όσο και τις FALSE ενότητες της δήλωσης, επιστρέφονται και τα δύο μηνύματα.

Θα μπορούσαμε να διορθώσουμε αυτό το σφάλμα μετακινώντας το πλαίσιο μηνυμάτων κάτω από τη γραμμή λειτουργιών IIF, όπως στον παρακάτω κώδικα, ή μετακινώντας το πλαίσιο μηνυμάτων στην Υπο-διαδικασία, σύμφωνα με το πρώτο παράδειγμα σε αυτό το άρθρο.

1234 Λειτουργία GetNames (strName As String) As StringGetNames = IIf (strName = "John", "The name is John", "The name is not John")MsgBox (GetNames)Λειτουργία Τέλους

Εάν είστε προσεκτικοί όταν γράφετε κώδικα, η λειτουργία IIF μπορεί να σας εξοικονομήσει πολλές γραμμές κώδικα και επιπλέον πληκτρολόγηση!

Ένθετα IIF

Μπορούμε να φωλιάσουμε τη λειτουργία IIF με παρόμοιο τρόπο με την ένθεση της λειτουργίας IF, αλλά για άλλη μια φορά, όλα γίνονται σε μία γραμμή.

123 Λειτουργία GetDiscount (dblΤιμή ως διπλό) Ως διπλόGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Λειτουργία Τέλους

Στη συνέχεια, θα μπορούσαμε να καλέσουμε αυτήν τη συνάρτηση από μια υπο-διαδικασία

12345 Sub FindDiscount ()Dim dblP ως διπλόdblP = 899MsgBox ("Η έκπτωση που μπορείτε να λάβετε είναι" & GetDiscount (dblP) & "%")Τέλος υπο

ή μπορείτε να το καλέσετε από το Excel, χρησιμοποιώντας το ως UDF (Συνάρτηση καθορισμένη από το χρήστη)

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave