VBA - Sjekk om det finnes en verdi i en matrise

VBA - Sjekk om det finnes en verdi i en matrise

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 boolsk

Dim 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
Forrige Artikkel Neste Artikkel

Beste Tips