Πίνακας περιεχομένων
Όταν έχουμε ένα μεγάλο όγκο δεδομένων, τότε μερικές φορές είναι δύσκολο να εξάγουμε συγκεκριμένα δεδομένα από το σύνολο δεδομένων. Μαζί με το Excel's INDEX και ΜΑΤΣ συναρτήσεις μπορούν να ανακτήσουν κάθε είδους δεδομένα ακόμη και σε ένα τεράστιο σύνολο δεδομένων. Εφαρμογή VBA είναι η πιο αποτελεσματική, γρήγορη και ασφαλής μέθοδος για να εκτελέσετε οποιαδήποτε λειτουργία στο Excel. Σε αυτό το άρθρο, θα σας δείξουμε 3 διαφορετικές μεθόδους για το πώς να εκτελέσετε INDEX MATCH με βάση πολλαπλά κριτήρια στο Excel με το Μακροεντολή VBA .
Λήψη βιβλίου εργασίας
Μπορείτε να κατεβάσετε το δωρεάν βιβλίο ασκήσεων Excel από εδώ.
VBA INDEX MATCH με βάση πολλαπλά κριτήρια.xlsm3 Μέθοδοι με VBA INDEX MATCH με βάση πολλαπλά κριτήρια στο Excel
Στις επόμενες ενότητες, θα σας δείξουμε πώς να εκτελέσετε INDEX MATCH με βάση πολλαπλά κριτήρια για ένα εύρος τιμών , για μια συγκεκριμένη επιλογή και για ένα τραπέζι στο Excel με VBA .
Παραπάνω έχουμε το σύνολο δεδομένων που θα ακολουθήσει αυτό το άρθρο. Έχουμε το Όνομα μαθητή , Φοιτητική ταυτότητα, και Σημάδια εξετάσεων Θα εξάγουμε ένα συγκεκριμένο αποτέλεσμα που βρίσκεται σε μια στήλη με βάση τις συνθήκες από τις άλλες δύο στήλες.
Κριτήρια - 1: Ενσωμάτωση VBA με INDEX MATCH για πολλαπλές (δύο) διαστάσεις αναζήτησης στο Excel
Σκεφτείτε την παρακάτω εικόνα. Έχουμε αποθηκεύσει το όνομα ενός συγκεκριμένου μαθητή " Edge" στο Κύτταρο G4 ; και η στήλη που θα αναζητήσουμε την Αποτέλεσμα σε, Σημάδια εξετάσεων , αποθηκεύεται στο Κύτταρο G5 . Θα ψάξουμε στο Σημάδια εξετάσεων στήλη και αποθηκεύστε το Μαρκς ότι " Edge" μπήκε μέσα Κύτταρο G6 .
Τα βήματα για την αναζήτηση οδηγούν σε ένα δισδιάστατος πίνακας με INDEX και ΜΑΤΣ στο Excel με VBA δίνονται παρακάτω.
Βήματα:
- Στην αρχή, πιέστε Alt + F11 στο πληκτρολόγιό σας ή πηγαίνετε στην καρτέλα Προγραμματιστής -> Visual Basic για να ανοίξετε Visual Basic Editor .
- Στη συνέχεια, στο αναδυόμενο παράθυρο κώδικα, από τη γραμμή μενού, κάντε κλικ στην επιλογή Εισαγωγή -> Ενότητα .
- Τότε, αντίγραφο τον ακόλουθο κώδικα και επικόλληση στο παράθυρο κώδικα.
Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Two Dimension") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) End Sub
Ο κώδικάς σας είναι τώρα έτοιμος για εκτέλεση.
- Τώρα, πατήστε F5 στο πληκτρολόγιό σας ή από τη γραμμή μενού επιλέξτε Εκτέλεση -> Εκτέλεση Sub/UserForm Μπορείτε επίσης να κάνετε κλικ στο μικρό εικονίδιο Run στη γραμμή υπομενού για να εκτελέσετε τη μακροεντολή.
Μετά την εκτέλεση του κώδικα, κοιτάξτε το παρακάτω gif για να δείτε το αποτέλεσμα.
Ως αποτέλεσμα, η Μαρκς ότι " Edge" πήρε στις εξετάσεις, 67 , ανακτάται στο Κύτταρο G7 .
Επεξήγηση κώδικα VBA
Dim iSheet As Worksheet
Ορισμός της μεταβλητής του Φύλλου Εργασίας.
Set iSheet = Φύλλα εργασίας("Δύο διαστάσεις")
Αποθηκεύστε το όνομα του φύλλου εργασίας. Το όνομα του φύλλου μας είναι "Two Dimension", θα πρέπει να δώσετε το όνομα σύμφωνα με το φύλλο εργασίας σας.
iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)))
Αυτό το κομμάτι κώδικα επιλέγει το εύρος C5:D14 ως περιοχή αναζήτησης. Στη συνέχεια, αναζητήστε την αντιστοιχία που είναι αποθηκευμένη στο κελί G4 σε εύρος B5:B14 και αναζητήστε την αντιστοιχία που είναι αποθηκευμένη στο κελί G5 σε εύρος C4:D4 και να περάσει το αποτέλεσμα στο κελί G6 .
Διαβάστε περισσότερα: Πώς να χρησιμοποιήσετε το INDEX MATCH με πολλαπλά κριτήρια για εύρος ημερομηνιών
Κριτήρια - 2: Εφαρμογή μακροεντολών για την εύρεση της τιμής MATCH με INDEX με συνάρτηση που ορίζεται από το χρήστη (UDF)
Μπορείτε να εξάγετε αντιστοιχισμένες τιμές από ένα σύνολο δεδομένων με μια συνάρτηση που ορίζεται από το χρήστη (UDF) Από την παρακάτω εικόνα, αυτό που θα κάνουμε είναι, θα περάσουμε το Ταυτότητα Φοιτητή και Σημάδια εξετάσεων ενός συγκεκριμένου μαθητή και η συνάρτηση θα μας πετάξει το Όνομα του συγκεκριμένου μαθητή.
Ας δούμε πώς θα το πετύχουμε αυτό για Όνομα μαθητή "Finn" με VBA .
Βήματα:
- Όπως φαίνεται προηγουμένως, ανοίξτε Visual Basic Editor από το Προγραμματιστής και Εισαγωγή a Ενότητα στο παράθυρο κώδικα.
- Στη συνέχεια, στο παράθυρο κώδικα, αντίγραφο τον ακόλουθο κώδικα και επικόλληση αυτό.
Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Δεν βρέθηκαν δεδομένα" End Function
- Μην τρέχεις αυτόν τον κωδικό, save αυτό.
- Τώρα, επιστροφή στο φύλλο εργασίας ενδιαφέροντος. Διαλέξτε οποιοδήποτε κελί που θέλετε να αποθηκεύσετε το αποτέλεσμα. Στην περίπτωσή μας, είναι Κελί F5 .
- Σε αυτό το κελί, γράψτε το UDF που μόλις δημιουργήσατε στον κώδικα ( MatchByIndex ) και να περάσει το Student ID και τους βαθμούς των εξετάσεων του συγκεκριμένου μαθητή μέσα στις παρενθέσεις της συνάρτησης.
Καθώς προσπαθούμε να εξάγουμε το όνομα " Finn" από τον ID (105) και Μάρκες (84) , οπότε για την περίπτωσή μας ο τύπος γίνεται,
=MatchByIndex(105,84)
- Στη συνέχεια, πατήστε Εισάγετε το .
Κοιτάξτε την ακόλουθη εικόνα.
Στο Κελί F5 , ανακτήσαμε επιτυχώς το όνομα " Finn" απλά περνώντας τον ID και Μαρκς μέσα στη συνάρτηση που δημιουργήσαμε στο VBA κωδικός.
Επεξήγηση κώδικα VBA
Function MatchByIndex(x As Double, y As Double)
Δημιουργία μιας νέας συνάρτησης και πέρασμα των μεταβλητών στο εσωτερικό της. Μπορείτε να ορίσετε οποιοδήποτε όνομα στη συνάρτηση.
Const StartRow = 4
Η σειρά μας ξεκινάει από τον αριθμό γραμμής 4. Πρέπει να δώσετε τον αριθμό γραμμής από τον οποίο ξεκινάει το σύνολο δεδομένων σας.
Dim EndRow As Long Dim iRow As Long
Ορισμός των μεταβλητών.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Αρχικά, ορίστε το φύλλο εργασίας με το οποίο θα εργαστείτε. Το όνομα του φύλλου μας είναι "UDF", θα πρέπει να δώσετε το όνομα σύμφωνα με το φύλλο εργασίας σας. Στη συνέχεια, ξεκινήστε την αναζήτηση στο εύρος C:D από την πρώτη γραμμή που ορίσαμε έως την τελευταία γραμμή.
For iRow = StartRow To EndRow If .Range("C" &? iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With
Ξεκινάμε την επανάληψη από την πρώτη γραμμή έως την τελευταία γραμμή. Αν η πρώτη τιμή που θα περάσουμε μέσα στη συνάρτηση εμπίπτει μέσα στην περιοχή C στήλη και αν η δεύτερη τιμή που θα περάσουμε μέσα στη συνάρτηση εμπίπτει μέσα στη στήλη D στήλη, τότε θα επιστρέψει την αντιστοιχία από τη στήλη B Διαφορετικά, βγείτε από τη συνάρτηση, τερματίστε όλες τις εντολές και μεταβείτε στην επόμενη γραμμή.
MatchByIndex = "Δεν βρέθηκαν δεδομένα" End Function
Εάν η προηγούμενη συνθήκη δεν ικανοποιείται κατά την εκτέλεση, τότε θα επιστραφεί το μήνυμα "Data Not Found" και ο κώδικας θα εγκαταλείψει τη συνάρτηση.
Διαβάστε περισσότερα: INDEX-MATCH με πολλαπλά κριτήρια για μερικό κείμενο στο Excel (2 τρόποι)
Κριτήρια - 3: Εφαρμογή της VBA για την επιστροφή της τιμής MATCH από έναν πίνακα με πολλαπλά δεδομένα στο Excel
Σε αυτή την ενότητα, θα μάθουμε πώς να επιστρέφει μια τιμή που ταιριάζει με τους δείκτες από έναν πίνακα στο MsgBox στο VBA Excel.
Ας δούμε πώς να εξάγουμε το Μαρκς από τον πίνακα που εμφανίζεται στο σύνολο δεδομένων μας ( T ικανό όνομα: TableMatch ) ενός συγκεκριμένου μαθητή παρέχοντας το Όνομα και το ID μέσα στον κώδικα. Στην περίπτωσή μας, το Όνομα και το ID θα είναι Finn και 105 αντίστοιχα.
Βήματα:
- Πρώτον, ανοίξτε Visual Basic Editor από το Προγραμματιστής και Εισαγωγή a Ενότητα στο παράθυρο κώδικα.
- Τότε, αντίγραφο τον ακόλουθο κώδικα και επικόλληση στο παράθυρο κώδικα.
Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) =TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " &? TargetID & vbLf & "Όνομα: " & TargetName & vbLf &- "Marks: " &- iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID &- vbLf &- "Όνομα: " &- TargetName &- vbLf &- "Marks Not found" End If End Sub
Ο κώδικάς σας είναι τώρα έτοιμος για εκτέλεση.
- Αργότερα, Εκτέλεση αυτόν τον κώδικα και κοιτάξτε την παρακάτω εικόνα για να δείτε τι συνέβη ως αποτέλεσμα.
Όπως μπορείτε να δείτε από την παραπάνω εικόνα, υπάρχει ένα Microsoft Excel αναδυόμενο πλαίσιο μηνύματος που σας δείχνει το Βαθμοί: 84 του ID: 105 και Όνομα: Finn που δώσαμε μέσα στον κώδικα.
Επεξήγηση κώδικα VBA
Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean
Ορισμός των μεταβλητών.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Ορισμός του ονόματος φύλλου και του ονόματος πίνακα μέσα σε μεταβλητές.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Αποθήκευση των τιμών αναζήτησης και των στηλών αναζήτησης για αναζήτηση.
iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount
Αυτό το κομμάτι κώδικα σαρώνει από την αρχή έως το τέλος του υποδείγματος και αν βρει την αντιστοιχία του καθορισμένου ID και του ονόματος στις στήλες αναζήτησης, τότε αποθηκεύει το αποτέλεσμα και κλείνει όλες τις δηλώσεις. Επίσης, βγαίνει από την επανάληψη και πηγαίνει στο επόμενο μέρος του κώδικα.
If iResult Then MsgBox "ID: " & TargetID & vbLf & "Όνομα: " & TargetName & vbLf &- "Marks: " &- iValue(iCount, MarksColumn) Else MsgBox "ID: " &- TargetID &- vbLf &- "Όνομα: " &- TargetName &- vbLf &- "Marks Not found" End If
Πετάει το αποτέλεσμα στο MsgBox.
Διαβάστε περισσότερα: Αναζήτηση και επιστροφή πολλαπλών τιμών συνδεδεμένων σε ένα κελί στο Excel
Συμπέρασμα
Εν κατακλείδι, αυτό το άρθρο σας έδειξε 3 διαφορετικές μεθόδους για το πώς να εκτελέσετε INDEX MATCH με βάση πολλαπλά κριτήρια στο Excel με το Μακροεντολή VBA Ελπίζω αυτό το άρθρο να ήταν πολύ χρήσιμο για εσάς. Μη διστάσετε να θέσετε οποιεσδήποτε ερωτήσεις σχετικά με το θέμα.