Πολλαπλά κριτήρια Vlookup με VBA UDF - Παραδείγματα κώδικα VBA

Vlookup Πολλαπλές συνθήκες χρησιμοποιώντας VBA

Εξετάστε τον ακόλουθο πίνακα δεδομένων:

Η τυπική συνάρτηση Vlookup στο Excel έχει την ακόλουθη μορφή:

VLOOKUP ("" Mark ", B6: G12", 2, FALSE)

Το οποίο θα επιστρέψει "Brown".

Ωστόσο, τι γίνεται αν θέλουμε να αναζητήσουμε 2 ή περισσότερες προϋποθέσεις, όπως το όνομα, το επώνυμο και η ηλικία στον παραπάνω πίνακα; Το ακόλουθο UDF μας επιτρέπει να το κάνουμε αυτό:

123456789101112131415161718192021222324252627282930313233343536373839 Λειτουργία ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant«Δήλωση μεταβλητώνDim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range As IntegerDim Matching_Row As Integer'ορίστε την απάντηση σε N/A από προεπιλογήThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count«Ελέγξτε αν το Col είναι μεγαλύτερο από τον αριθμό των στηλών στο εύροςΑν (Col> No_of_Cols_in_Range) ΤότεThreeParameterVlookup = CVErr (xlErrRef)Τέλος εανΑν (Col <= No_of_Cols_in_Range) ΤότεΚάνωIf ((Data_Range.Cells (Current_Row, 1). Value = Parameter1) And _(Data_Range.Cells (Current_Row, 2). Value = Parameter2) Και _(Data_Range.Cells (Current_Row, 3). Value = Parameter3)) Στη συνέχειαMatching_Row = Current_RowΤέλος εανCurrent_Row = Current_Row + 1Βρόχος μέχρι ((Current_Row = No_Of_Rows_in_Range) ((Matching_Row 0))Αν Matching_Row 0 ΤότεThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Τέλος εανΤέλος εανΛειτουργία Τέλους

Έχει την ακόλουθη σύνταξη:

ThreeParameterVlookup (Data_Range, Col, Parameter1, Parameter2, Parameter3)

Οπου:
• Data_Range είναι το εύρος των δεδομένων
• Το Col είναι ακέραιος αριθμός για την απαιτούμενη στήλη
• Παράμετρος 1, Παράμετρος 2 και Παράμετρος 3 είναι οι τιμές από τις τρεις πρώτες στήλες αντίστοιχα

Ετσι ώστε:

= ThreeParameterVlookup (B6: G12,6, "Mark", "Brown", 7) θα επιστρέψει στο "Tolworth" καθώς πρόκειται για έναν αγώνα στα "Mark", "Brown" και 7 και μια αναφορά στην 6η στήλη

Σημειώστε ότι αυτή η συνάρτηση θα λειτουργήσει επίσης με (δυναμικά) ονόματα εύρους, όπως:

= Το ThreeParameterVlookup (με όνομα_range, 6, "Adrian", "White", 7) θα επιστρέψει το "Chessington" όπου έχουμε ρυθμίσει το όνομα "Named_Range".

Εάν το Excel δεν μπορεί να εντοπίσει μια αντιστοίχιση, το "N/A" επιστρέφεται από προεπιλογή. Στην πραγματικότητα, η συνάρτηση λαμβάνει μια τιμή N/A στην αρχή και στη συνέχεια αλλάζει μόνο όταν βρίσκει μια ακριβή αντιστοίχιση.

Επίσης, εάν η τιμή του Col υπερβαίνει τον αριθμό των στηλών τότε εμφανίζεται ένα σφάλμα αναφοράς.

Για να κατεβάσετε το αρχείο .XLSM για αυτό το σεμινάριο, κάντε κλικ εδώ

wave wave wave wave wave