Sisällysluettelo
Kun meillä on suuri määrä tietoja, joskus on vaikea poimia mitään tiettyä tietoa tietokokonaisuudesta. Yhdessä Excelin ja Excelin INDEX ja MATCH funktioilla voidaan hakea mitä tahansa tietoa jopa valtavasta tietokokonaisuudesta. Toteuttamalla VBA on tehokkain, nopein ja turvallisin tapa suorittaa mikä tahansa toiminto Excelissä. Tässä artikkelissa näytämme sinulle 3 erilaista menetelmää, joilla voit suorittaa INDEX MATCH perustuu useisiin kriteereihin Excelissä VBA-makro .
Lataa työkirja
Voit ladata ilmaisen harjoitus-Excel-työkirjan täältä.
VBA INDEX MATCH perustuu useisiin kriteereihin.xlsm3 menetelmää VBA INDEX MATCH -menetelmällä, joka perustuu useisiin kriteereihin Excelissä
Seuraavissa osioissa näytämme, miten suoritetaan seuraavat toimenpiteet. INDEX MATCH perustuu useisiin kriteereihin alueen osalta , tiettyä valintaa varten ja taulukon osalta Excelissä VBA .
Yllä on tietokokonaisuus, jota tässä artikkelissa seurataan. Meillä on Opiskelijan nimi , Opiskelijan tunnus, ja Tenttimerkinnät Poistetaan tietty tulos, joka sijaitsee yhdessä sarakkeessa, kahden muun sarakkeen ehtojen perusteella.
Kriteerit - 1: Upota VBA INDEX MATCHin kanssa usean (kahden) ulottuvuuden hakuun Excelissä
Tarkastellaan seuraavaa kuvaa: Olemme tallentaneet tietyn oppilaan nimen " Reuna" osoitteessa Solu G4 ; ja sarake, jota etsimme sarakkeesta Tulos in, Tenttimerkinnät , tallennetaan Solu G5 . Etsimme Tenttimerkinnät sarakkeeseen ja tallentaa Merkit että " Reuna" pääsi sisään Solu G6 .
Vaiheet hakutuloksen etsimiseen johtavat kaksiulotteinen joukko kanssa INDEX ja MATCH Excelissä VBA on esitetty jäljempänä.
Vaiheet:
- Alussa paina Alt + F11 näppäimistöllä tai siirry välilehdelle Kehittäjä -> Visual Basic avata Visual Basic Editor .
- Seuraavaksi valitse ponnahdusikkunan valikkoriviltä komento Lisää -> Moduuli .
- Sitten, kopioi seuraava koodi ja liitä se koodiikkunaan.
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
Koodisi on nyt valmis ajettavaksi.
- Paina nyt F5 näppäimistöllä tai valitse valikkoriviltä Suorita -> Suorita Sub/UserForm -lomake . Voit myös vain klikata pieni Run-kuvake alivalikkopalkissa makron suorittamiseksi.
Kun koodi on suoritettu, katso alla olevaa kuvaa nähdäksesi tuloksen.
Tämän seurauksena Merkit että " Reuna" sai kokeessa, 67 , haetaan Solu G7 .
VBA-koodin selitys
Dim iSheet As Worksheet
Työarkin muuttujan määrittäminen.
Aseta iSheet = Työarkit("Kaksi ulottuvuutta")
Tallenna laskentataulukon nimi. Meidän taulukkomme nimi on "Two Dimension", sinun pitäisi antaa taulukkosi mukainen nimi.
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)))
Tämä koodinpätkä valitsee alueen C5:D14 hakualueeksi. Etsi sitten vastaavuutta, joka on tallennettu soluun G4 alueella B5:B14 ja etsi soluun tallennettua vastaavuutta G5 alueella C4:D4 ja välittää tuloksen soluun G6 .
Lue lisää: Kuinka käyttää INDEX MATCHia useiden kriteerien kanssa päivämäärävälille?
Kriteerit - 2: Sovelletaan makroa MATCH-arvon etsimiseen INDEXin avulla käyttäjän määrittelemän funktion (UDF) avulla.
Voit poimia sovitetut arvot tietokokonaisuudesta käyttämällä komentoa käyttäjän määrittelemä funktio (UDF) Seuraavassa kuvassa, mitä aiomme tehdä, on, että siirrämme tiedoston Opiskelijan tunnus ja Tenttimerkinnät tietyn opiskelijan ja funktio heittää meille Nimi kyseisen opiskelijan osalta.
Katsotaanpa, miten se onnistuu Oppilaan nimi "Finn" kanssa VBA .
Vaiheet:
- Kuten edellä on esitetty, avoin Visual Basic Editor alkaen Kehittäjä välilehti ja Lisää a Moduuli koodiikkunassa.
- Sitten koodiikkunassa, kopioi seuraava koodi ja liitä se.
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 = "Tietoa ei löytynyt" End Function
- Älä juokse tämä koodi, save se.
- Nyt, palaa takaisin laskentataulukkoon kiinnostava. Valitse mikä tahansa solu johon haluat tallentaa tuloksen. Meidän tapauksessamme se on muotoa Solu F5 .
- Tuossa sellissä, kirjoittaa UDF jonka olet juuri luonut koodissa ( MatchByIndex ) ja siirtää opiskelijan tunnuksen ja tenttimerkinnät tietyn opiskelijan nimi funktion suluissa.
Koska yritämme poimia nimen " Finn" hänen ID (105) ja Merkit (84) , joten meidän tapauksessamme kaavasta tulee,
=MatchByIndex(105,84)
- Paina sitten Kirjoita .
Katso seuraavaa kuvaa.
Osoitteessa Solu F5 , olemme onnistuneesti hakeneet nimen " Finn" yksinkertaisesti kuljettamalla hänen ID ja Merkit sisällä funktiossa, jonka loimme VBA koodi.
VBA-koodin selitys
Function MatchByIndex(x As Double, y As Double)
Luodaan uusi funktio ja siirretään muuttujat sen sisään. Voit antaa funktiolle minkä tahansa nimen.
Const StartRow = 4
Meidän rivimme alkaa riviltä numero 4. Sinun on ilmoitettava rivin numero, josta datasi alkaa.
Dim EndRow As Long Dim iRow As Long
Muuttujien määrittely.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Määrittele ensin työarkki, jonka kanssa haluat työskennellä. Työarkkimme nimi on "UDF", sinun on annettava nimi oman laskentataulukkosi mukaan. Aloita sitten haku alueella "UDF". C:D ensimmäiseltä määrittelemältämme riviltä viimeiselle riville.
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
Aloita iterointi ensimmäiseltä riviltä viimeiselle riville. Jos ensimmäinen arvo, jonka välitämme funktion sisällä, on sisällä rivin C sarakkeessa ja jos toinen arvo, jonka annamme funktion sisällä, kuuluu sarakkeeseen D sarakkeessa, niin se palauttaa ottelun sarakkeesta B sarakkeessa. Muussa tapauksessa lopeta funktio, lopeta kaikki lausekkeet ja siirry seuraavalle riville.
MatchByIndex = "Tietoa ei löytynyt" End Function
Jos edellinen ehto ei täyty suorituksen aikana, palautetaan viesti "Data Not Found" ja koodi poistuu funktiosta.
Lue lisää: INDEX-MATCH useilla kriteereillä osittaiselle tekstille Excelissä (2 tapaa)
Kriteerit - 3: VBA: n toteuttaminen MATCH-arvon palauttamiseksi taulukosta, jossa on useita tietoja Excelissä
Tässä jaksossa opimme, miten palauttaa MsgBoxissa olevan taulukon indeksien mukaan sovitetun arvon. osoitteessa VBA Excel.
Katsotaanpa, miten uuttaa Merkit tietokannassamme esitetystä taulukosta ( T kykenevä nimi: TableMatch ) tietyn opiskelijan antamalla Nimi ja ID Meidän tapauksessamme Nimi ja ID on Finn ja 105 vastaavasti.
Vaiheet:
- Ensinnäkin, avaa Visual Basic Editor alkaen Kehittäjä välilehti ja Lisää a Moduuli koodiikkunassa.
- Sitten, kopioi seuraava koodi ja liitä se koodiikkunaan.
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("Palauta tulos") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Opiskelijan ID").Index NameColumn = iTable.ListColumns("Opiskelijan nimi").Index MarksColumn = iTable.ListColumns("Tenttiarvosanat").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 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 & "Merkkejä ei löytynyt" End If End Sub
Koodisi on nyt valmis ajettavaksi.
- Myöhemmin, Suorita tätä koodia ja katso seuraavaa kuvaa nähdäksesi, mitä sen seurauksena tapahtui.
Kuten yllä olevasta kuvasta näkyy, on olemassa Microsoft Excel ponnahdusviestiruutu, jossa näytetään Merkit: 84 of ID: 105 ja Nimi: Finn jonka annoimme koodin sisällä.
VBA-koodin selitys
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 Dim iResult As Boolean
Muuttujien määrittely.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Asetetaan arkin nimi ja taulukon nimi muuttujien sisällä.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Opiskelijan ID").Index NameColumn = iTable.ListColumns("Opiskelijan nimi").Index MarksColumn = iTable.ListColumns("Tenttiarvosanat").Index
Hakuarvojen ja etsittävien sarakkeiden tallentaminen.
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 Jos iResult Then Exit For Next iCount
Tämä koodinpätkä skannaa läpi subscriptin alusta loppuun, ja jos se löytää hakusarakkeissa määritellyn ID:n ja nimen vastaavuuden, tallentaa tuloksen ja sulkee kaikki lausekkeet. Poistu myös iteraatiosta ja siirry koodin seuraavaan osaan.
If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Merkkejä ei löytynyt" End If
Heittää tuloksen MsgBoxiin.
Lue lisää: Etsi ja palauta useita arvoja, jotka on ketjutettu yhteen soluun Excelissa
Päätelmä
Lopuksi, tämä artikkeli osoitti sinulle 3 eri menetelmiä, miten suorittaa INDEX MATCH perustuu useisiin kriteereihin Excelissä VBA-makro Toivon, että tästä artikkelista on ollut teille paljon hyötyä, ja voitte vapaasti esittää aiheeseen liittyviä kysymyksiä.