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 για αυτό το σεμινάριο, κάντε κλικ εδώ