Table des matières
Lorsque nous disposons d'un grand nombre de données, il est parfois difficile d'extraire des données spécifiques de l'ensemble de données. INDEX et MATCH permettent de récupérer n'importe quel type de données, même dans un ensemble de données très vaste. VBA est la méthode la plus efficace, la plus rapide et la plus sûre pour exécuter n'importe quelle opération dans Excel. Dans cet article, nous allons vous montrer 3 méthodes différentes pour exécuter les opérations suivantes INDEX MATCH basé sur des critères multiples dans Excel avec l'option Macro VBA .
Télécharger le cahier d'exercices
Vous pouvez télécharger le cahier d'exercices Excel gratuit à partir d'ici.
3 méthodes avec VBA INDEX MATCH basé sur des critères multiples dans Excel
Dans les sections suivantes, nous allons vous montrer comment effectuer INDEX MATCH basé sur des critères multiples pour une plage , pour une sélection spécifique et pour une table dans Excel avec VBA .
Ci-dessus, nous avons l'ensemble de données que cet article va suivre. Nous avons le fichier Nom de l'élève , ID de l'étudiant, et Notes d'examen Nous allons extraire un certain résultat résidant dans une colonne en fonction des conditions des deux autres colonnes.
Critères - 1 : Embarquer VBA avec INDEX MATCH pour une recherche à plusieurs (deux) dimensions dans Excel
Considérons l'image suivante : nous avons enregistré le nom d'un étudiant spécifique " Bord" sur Cellule G4 ; et la colonne dans laquelle nous allons chercher la Résultat dans, Notes d'examen est stocké dans Cellule G5 Nous allons chercher dans le Notes d'examen et stocker la colonne Marks que " Bord" est entré Cellule G6 .
Les étapes de la recherche aboutissent à un résultat tableau à deux dimensions avec INDEX et MATCH dans Excel avec VBA sont indiqués ci-dessous.
Des pas :
- Au début, appuyez sur Alt + F11 sur votre clavier ou allez dans l'onglet Développeur -> ; Visual Basic pour ouvrir Éditeur Visual Basic .
- Ensuite, dans la fenêtre pop-up de code, dans la barre de menu, cliquez sur Insertion -> ; Module .
- Ensuite, copie le code suivant et pâte dans la fenêtre de code.
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
Votre code est maintenant prêt à être exécuté.
- Maintenant, appuyez sur F5 sur votre clavier ou dans la barre de menu, sélectionnez Run -> ; Run Sub/UserForm Vous pouvez également cliquer sur le bouton petite icône Run dans la barre de sous-menu pour exécuter la macro.
Après l'exécution du code, regardez le gif ci-dessous pour voir le résultat.
En conséquence, le Marks que " Bord" a obtenu à l'examen, 67 est récupéré dans Cellule G7 .
Explication du code VBA
Dim iSheet As Worksheet
Définir la variable de la feuille de travail.
Set iSheet = Worksheets("Two Dimension")
Enregistrez le nom de la feuille de calcul. Le nom de notre feuille est "Two Dimension", vous devez fournir le nom correspondant à votre feuille de calcul.
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)))
Ce morceau de code sélectionne l'intervalle C5:D14 comme plage de recherche. Ensuite, recherchez la correspondance qui est stockée dans la cellule G4 dans la gamme B5:B14 et rechercher la correspondance qui est stockée dans la cellule G5 dans la gamme C4:D4 et passe le résultat à la cellule G6 .
Lire la suite : Comment utiliser INDEX MATCH avec plusieurs critères pour une plage de dates ?
Critères - 2 : Appliquer une macro pour trouver la valeur MATCH par INDEX avec une fonction définie par l'utilisateur (UDF)
Vous pouvez extraire les valeurs correspondantes d'un ensemble de données à l'aide de la fonction fonction définie par l'utilisateur (UDF) Dans l'image suivante, ce que nous allons faire, c'est passer l'élément Numéro d'étudiant et Notes d'examen d'un certain étudiant et la fonction nous enverra la Nom de cet étudiant spécifique.
Voyons comment y parvenir pour Nom de l'élève "Finn" avec VBA .
Des pas :
- Comme nous l'avons vu précédemment, ouvrir Éditeur Visual Basic de la Développeur et Insérer a Module dans la fenêtre de code.
- Ensuite, dans la fenêtre de code, copie le code suivant et pâte il.
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 = "Data Not found" End Function
- Ne cours pas. ce code, sauver il.
- Maintenant, revenir à la feuille de travail d'intérêt. Choisissez n'importe quelle cellule que vous voulez stocker le résultat. Dans notre cas, c'est Cellule F5 .
- Dans cette cellule, écrire le UDF que vous venez de créer dans le code ( MatchByIndex ) et passer le numéro d'étudiant et les notes d'examen de l'étudiant spécifique entre les parenthèses de la fonction.
Comme nous essayons d'extraire le nom " Finn" de son ID (105) et Marques (84) Ainsi, pour notre cas, la formule devient,
=MatchByIndex(105,84)
- Ensuite, appuyez sur Entrez .
Regardez l'image suivante.
Sur Cellule F5 nous avons récupéré avec succès le nom " Finn" en passant simplement son ID et Marks à l'intérieur de la fonction que nous avons créée dans le VBA code.
Explication du code VBA
Function MatchByIndex(x As Double, y As Double)
Créer une nouvelle fonction et passer les variables à l'intérieur. Vous pouvez définir n'importe quel nom pour la fonction.
Const. StartRow = 4
Notre ligne commence à la ligne numéro 4. Vous devez fournir le numéro de ligne à partir duquel votre ensemble de données commence.
Dim EndRow As Long Dim iRow As Long
Définir les variables.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Tout d'abord, définissez la feuille de calcul avec laquelle vous allez travailler. Le nom de notre feuille est "UDF", vous devriez fournir le nom en fonction de votre feuille de calcul. Ensuite, commencez à chercher dans la plage C:D de la première ligne que nous avons définie à la dernière ligne.
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
Commencez à itérer de la première à la dernière ligne. Si la première valeur que nous passons dans la fonction se trouve dans le champ C et si la deuxième valeur que nous allons passer dans la fonction se trouve dans la colonne D il renverra alors la correspondance de la colonne B Sinon, quittez la fonction, terminez toutes les instructions et passez à la ligne suivante.
MatchByIndex = "Données non trouvées" End Function
Si la condition précédente n'est pas remplie lors de l'exécution, le message "Data Not Found" sera renvoyé et le code quittera la fonction.
Lire la suite : INDEX-MATCH avec plusieurs critères pour un texte partiel dans Excel (2 façons)
Critères - 3 : Implémenter VBA pour retourner la valeur MATCH d'un tableau avec des données multiples dans Excel
Dans cette section, nous allons apprendre à renvoie une valeur appariée par les index d'une table dans le MsgBox sur VBA Excel.
Voyons comment extraire le Marks à partir du tableau présenté dans notre jeu de données ( T Nom capable : TableMatch ) d'un certain étudiant en fournissant le Nom et le ID dans le code. Dans notre cas, le Nom et le ID sera Finn et 105 respectivement.
Des pas :
- Tout d'abord, ouvrez Éditeur Visual Basic de la Développeur et Insérer a Module dans la fenêtre de code.
- Ensuite, copie le code suivant et pâte dans la fenêtre de code.
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 iResult Then Exit For Next iCount If iResult Then MsgBox "ID : " & ; TargetID & ; vbLf & ; "Name : " & ; TargetName & ; vbLf & ; "Marks : " & ; iValue(iCount, MarksColumn) Else MsgBox "ID : " & ; TargetID & ; vbLf & ; "Name : " & ; TargetName & ; vbLf & ; "Marks Not found" End If End Sub
Votre code est maintenant prêt à être exécuté.
- Plus tard, Exécuter ce code et regardez l'image suivante pour voir ce qui s'est passé en conséquence.
Comme vous pouvez le voir sur l'image ci-dessus, il y a une Microsoft Excel une boîte de message pop-up vous montrant le Marques : 84 de ID : 105 et Nom : Finn que nous avons fourni dans le code.
Explication du code 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
Définir les variables.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Définir le nom de la feuille et le nom de la table dans des variables.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Stockage des valeurs de consultation et des colonnes de consultation à rechercher.
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 iResult Then Exit For Next iCount
Ce morceau de code parcourt l'indice du début à la fin et s'il trouve la correspondance entre l'ID défini et le nom dans les colonnes de recherche, il enregistre le résultat et ferme toutes les déclarations. Il quitte également l'itération et passe à la partie suivante du code.
If iResult Then MsgBox "ID : " & ; TargetID & ; vbLf & ; "Name : " & ; TargetName & ; vbLf & ; "Marks : " & ; iValue(iCount, MarksColumn) Else MsgBox "ID : " & ; TargetID & ; "Name : " & ; TargetName & ; vbLf & ; "Marks Not found" End If
Lance le résultat dans la MsgBox.
Lire la suite : Consulter et renvoyer plusieurs valeurs concaténées dans une cellule dans Excel
Conclusion
Pour conclure, cet article vous a présenté 3 méthodes différentes pour réaliser INDEX MATCH basé sur des critères multiples dans Excel avec l'option Macro VBA J'espère que cet article vous a été très utile. N'hésitez pas à poser toutes vos questions sur le sujet.