VBA - Sjekk om det finnes en verdi i en matrise
VBA - Sjekk om det finnes en verdi i en matrise
![](http://img.brin-designs.com/img/games/919/vba-check-if-value-exists-an-array.png)
Introduksjon
For å sjekke om en verdi eksisterer i en matrise, kan vi løse gjennom elementene. Men det er en annen løsning! Du kan bruke INDEX () -funksjonen, native til Excel, og i tilfelle todimensjonale arrayer bruker en kombinasjon av INDEX / MATCH- funksjonen. Men hvis verdien ikke er funnet, returnerer Application.Match en feil. Du må ta hensyn til eventuelle feil, samt antall dimensjoner av arrayvariabelen.Denne lille funksjonen vil hjelpe deg!
Bruk av Match-funksjonen
Funksjon EstDans (mot As String, Tabl) Som boolskDim Dimension As Byte, j Som helhet
På feil fortsette neste
Hvis IsError (UBound (Tabl, 2)) Så Dimensjon = 1 Else Dimensjon = 2
På feil GoTo 0
Velg Case Dimension
Sak 1
På feil fortsette neste
EstDans = Application.Match (mot, Tabl, 0)
På feil GoTo 0
Sak 2
For j = 1 Til Ubundet (Tabl, 2)
På feil fortsette neste
EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)
På feil GoTo 0
Hvis EstDans = True, avslutt deretter
neste
Slutt Velg
Sluttfunksjon
Påkall funksjonen
Subtest ()Dim Tb (), jeg som helhet
'tb 2 dimensjoner:
Tb = Range ("A2: C16"). Verdi
Debug.Print EstDans (MaValeur, Tb)
Slett Tb
'tb 1 dimensjon:
ReDim Preserve Tb (15)
For i = 0 til 14
Tb (i) = celler (i + 2, 1)
neste
Debug.Print EstDans (MaValeur, Tb)
Slutt Sub
Bruke en løkke
Strukturen til denne funksjonen ligner den som bruker Match .Funksjon BoucleSurTabl (mot As String, Tb)Dim Dimension As Byte, jeg så lenge, j så lenge
På feil fortsette neste
Hvis IsError (Ubound (Tb, 2)) Så Dimensjon = 1 Else Dimensjon = 2
På feil GoTo 0
Velg Case Dimension
Sak 1
For j = LBound (Tb) Til Ubound (Tb)
Hvis Tb (j) = mot Then BoucleSurTabl = True: Exit Function
neste
Sak 2
For I = LBound (Tb, 1) Til Ubound (Tb, 1)
For j = LBound (Tb, 2) Til Ubound (Tb, 2)
Hvis Tb (i, j) = mot Så BoucleSurTabl = True: Exit Function
Neste j
Neste jeg
Slutt Velg
Sluttfunksjon
observasjoner
Mot alle odds vil du få et bedre resultat med løkkefunksjonen på store arrays enn å bruke Application.Match.Testing av et 2-dimensjonalt array med et følgende område ("A1: Y20002").
- Bruk av Match-funksjonen: 8.300781 sekunder.
- Bruke løkken: 0, 4375 sekunder.
Teste et endimensjonalt utvalg:
- Bruk av Match-funksjonen: Instant
- Bruke løkken: 0, 015625 sekunder
Last ned lenke
- Du kan laste ned prøveboken: //cjoint.com/?DHfpeqMBvRK