Sommario
Quando si dispone di una grande quantità di dati, a volte è difficile estrarre un dato specifico dal set di dati. Insieme alla funzione di Excel INDICE e PARTITA è in grado di recuperare qualsiasi tipo di dato anche in un set di dati di grandi dimensioni. L'implementazione di VBA è il metodo più efficace, rapido e sicuro per eseguire qualsiasi operazione in Excel. In questo articolo, vi mostreremo 3 metodi diversi per eseguire MATCH INDICE basato su più criteri in Excel con l'opzione Macro VBA .
Scarica il libro di lavoro
Potete scaricare la cartella di lavoro Excel gratuita da qui.
VBA MATCH INDICE basato su più criteri.xlsm3 metodi con VBA INDEX MATCH basati su più criteri in Excel
Nelle sezioni seguenti verrà illustrato come eseguire MATCH INDICE basato su criteri multipli per un intervallo , per una selezione specifica e per una tabella in Excel con VBA .
Qui sopra abbiamo il set di dati che seguirà questo articolo. Abbiamo il file Nome dello studente , ID studente, e Voti d'esame di ogni studente del set di dati. Estrarremo un determinato risultato che risiede in una colonna in base alle condizioni delle altre due colonne.
Criteri - 1: Incorporare VBA con INDEX MATCH per ricerche multiple (due) dimensionali in Excel
Consideriamo l'immagine seguente. Abbiamo memorizzato il nome di uno studente specifico " Bordo" in Cellula G4 e la colonna in cui cercheremo il Risultato in, Voti d'esame è memorizzato in Cellula G5 Cercheremo nel Voti d'esame e memorizzare la colonna Marchi che " Bordo" è entrato Cellula G6 .
I passaggi per la ricerca danno come risultato un array bidimensionale con INDICE e PARTITA in Excel con VBA sono riportati di seguito.
Passi:
- All'inizio, premere Alt + F11 sulla tastiera o andare alla scheda Sviluppatore -> Visual Basic per aprire Editor Visual Basic .
- Quindi, nella finestra del codice a comparsa, dalla barra dei menu, fare clic su Inserire -> Modulo .
- Allora, copia il seguente codice e pasta nella finestra del codice.
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
Il codice è ora pronto per essere eseguito.
- Ora, premere F5 sulla tastiera o dalla barra dei menu selezionare Esegui -> Esegui Sub/UserForm Si può anche fare clic sul pulsante icona piccola di Esegui nella barra dei menu secondari per eseguire la macro.
Dopo l'esecuzione del codice, guardate la gif qui sotto per vedere il risultato.
Di conseguenza, il Marchi che " Bordo" ottenuto all'esame, 67 viene recuperato in Cellula G7 .
Spiegazione del codice VBA
Dim iSheet come foglio di lavoro
Definizione della variabile del foglio di lavoro.
Set iSheet = Fogli di lavoro("Due dimensioni")
Memorizzare il nome del foglio di lavoro. Il nome del nostro foglio è "Two Dimension", ma è necessario fornire il nome del proprio foglio di lavoro.
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))
Questo pezzo di codice seleziona l'intervallo C5:D14 come intervallo di ricerca. Quindi cercare la corrispondenza memorizzata nella cella G4 nell'intervallo B5:B14 e cercare la corrispondenza memorizzata nella cella G5 nell'intervallo C4:D4 e passare il risultato alla cella G6 .
Per saperne di più: Come utilizzare INDEX MATCH con criteri multipli per un intervallo di date
Criteri - 2: applicare la macro per trovare il valore di MATCH per INDEX con la funzione definita dall'utente (UDF)
È possibile estrarre i valori corrispondenti da un set di dati con un'opzione funzione definita dall'utente (UDF) Dall'immagine seguente, ciò che faremo è passare il file ID studente e Voti d'esame di un certo studente e la funzione ci darà l'indicazione Nome di quello specifico studente.
Vediamo come ottenere questo risultato per Nome dello studente "Finn con VBA .
Passi:
- Come mostrato in precedenza, aprire Editor Visual Basic dal Sviluppatore e Inserire a Modulo nella finestra del codice.
- Poi, nella finestra del codice, copia il seguente codice e pasta it.
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 = "Dati non trovati" End Function
- Non correre questo codice, salvare it.
- Ora, tornare al foglio di lavoro di interesse. Scegliere una cella qualsiasi che si desidera memorizzare il risultato. Nel nostro caso, si tratta di Cella F5 .
- In quella cella, scrivere il UDF che avete appena creato nel codice ( MatchByIndex ) e passare l'ID dello studente e i voti dell'esame dello studente specifico all'interno delle parentesi della funzione.
Poiché stiamo cercando di estrarre il nome " Finn" dal suo ID (105) e Marchi (84) , quindi per il nostro caso la formula diventa,
=MatchByIndex(105,84)
- Quindi, premere Entrare .
Osservate la seguente immagine.
In Cella F5 , abbiamo recuperato con successo il nome " Finn" semplicemente passando il suo ID e Marchi all'interno della funzione creata nel file VBA codice.
Spiegazione del codice VBA
Funzione MatchByIndex(x come Double, y come Double)
Creare una nuova funzione e passare le variabili al suo interno. È possibile definire qualsiasi nome per la funzione.
Const StartRow = 4
La nostra riga inizia dalla riga numero 4. È necessario fornire il numero di riga da cui inizia il vostro set di dati.
Dim EndRow come Long Dim iRow come Long
Definizione delle variabili.
Con Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Per prima cosa, definiamo il foglio di lavoro con cui lavorare. Il nome del nostro foglio è "UDF", ma dovreste fornire il nome del vostro foglio di lavoro. Quindi, iniziate la ricerca nell'intervallo C:D dalla prima riga definita all'ultima riga.
Per iRow = da StartRow a EndRow Se .Range("C" & iRow).Value = x e .Range("D" & iRow).Value = y Allora MatchByIndex = .Range("B" & iRow).Value Esci dalla funzione Fine Se Prossimo iRow Fine Con
Iniziare l'iterazione dalla prima all'ultima riga. Se il primo valore che passeremo all'interno della funzione rientra nell'intervallo di valori C e se il secondo valore che passeremo all'interno della funzione rientra nella colonna D restituirà la corrispondenza della colonna B Altrimenti, uscire dalla funzione, terminare tutte le dichiarazioni e passare alla riga successiva.
MatchByIndex = "Dati non trovati" Fine della funzione
Se la condizione precedente non viene soddisfatta durante l'esecuzione, verrà restituito il messaggio "Data Not Found" e il codice abbandonerà la funzione.
Per saperne di più: INDEX-MATCH con criteri multipli per testo parziale in Excel (2 modi)
Criteri - 3: implementare VBA per restituire il valore MATCH da una tabella con più dati in Excel
In questa sezione, impareremo come restituire un valore corrispondente agli indici di una tabella in MsgBox in VBA Excel.
Vediamo come estrarre il file Marchi dalla tabella mostrata nel nostro set di dati ( T nome capace: TableMatch ) di un determinato studente fornendo il Nome e il ID all'interno del codice. Nel nostro caso, l'elemento Nome e il ID sarà Finlandese e 105 rispettivamente.
Passi:
- In primo luogo, aprire Editor Visual Basic dal Sviluppatore e Inserire a Modulo nella finestra del codice.
- Allora, copia il seguente codice e pasta nella finestra del codice.
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) =NomeDestinatario Allora iResult = Vero Fine Se Se iResult Allora Esci Per Prossimo iCount Se iResult Allora MsgBox "ID: " & TargetID & vbLf & "Nome: " & NomeDestinatario & vbLf & "Marchi: " & iValue(iCount, MarksColumn) Altrimenti MsgBox "ID: " & TargetID & vbLf & "Nome: " & NomeDestinatario & vbLf & "Marchi non trovati" Fine Se Fine Sub
Il codice è ora pronto per essere eseguito.
- Più tardi, Correre questo codice e osservare l'immagine seguente per vedere cosa è successo come risultato.
Come si può vedere dall'immagine qui sopra, è presente un Microsoft Excel che mostra la casella di messaggio a comparsa del Marchi: 84 di ID: 105 e Nome: Finn che abbiamo fornito all'interno del codice.
Spiegazione del codice 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
Definizione delle variabili.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Impostazione del nome del foglio e del nome della tabella nelle variabili.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Memorizzazione dei valori di ricerca e delle colonne di ricerca da ricercare.
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 If If iResult Then Exit For Next iCount
Questo pezzo di codice esegue una scansione dall'inizio alla fine del pedice e se trova una corrispondenza tra l'ID definito e il Nome nelle colonne di ricerca, memorizza il risultato e chiude tutte le istruzioni. Inoltre, esce dall'iterazione e passa alla parte successiva del codice.
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
Lancia il risultato in MsgBox.
Per saperne di più: Cercare e restituire più valori concatenati in una cella in Excel
Conclusione
Per concludere, questo articolo vi ha mostrato 3 diversi metodi per realizzare MATCH INDICE basato su più criteri in Excel con l'opzione Macro VBA Spero che questo articolo sia stato di grande aiuto per voi. Sentitevi liberi di porre qualsiasi domanda sull'argomento.