VBA Meklējiet (atrodiet) vērtību masīvā

Šī apmācība parādīs, kā meklēt (atrast) vērtību masīvā VBA

Masīvā virkni var meklēt vairākos veidos - atkarībā no tā, vai masīvs ir viendimensiju vai daudzdimensiju.

Meklēšana viendimensiju masīvā

Lai meklētu vērtību viendimensiju masīvā, varat izmantot filtra funkciju.

123 Dim z Kā variantsfiltrējiet sākotnējo masīvuz = filtrs (masīvs, virkne, patiess, vbCompareBinary)

Filtra opcijas sintakse ir šāda

Filtrs (avota masīvs, atbilstība kā virkne, [iekļaut kā Būla], [Salīdzināt kā vbCompareMethod])

The Avota masīvs un Saskaņot kā virkni ir nepieciešami, kamēr Iekļaut kā Būla un Salīdzināt kā vbCompareMethod nav obligāti. Ja tie nav iekļauti, tie ir iestatīti uz Taisnība un vbSalīdzinātBinārā attiecīgi.

Atrodiet vērtības, kas atbilst filtram

1234567891011121314 Sub FindBob ()'Izveidojiet masīvuDim strName () Kā variantsstrName () = masīvs ("Bobs Smits", "Džons Deiviss", "Freds Džonss", "Stīvs Dženkinss", "Bobs Viljamss")"deklarējiet variantu, kurā saglabāt filtra datusDim strSubNames As Variantfiltrējiet sākotnējo masīvustrSubNames = Filtrs (strName, "Bob")'ja LBound vērtība ir lielāka par -1, tad vērtība ir atrastaJa LBound (strSubNames)> -1, tad MsgBox ("Es atradu Bobu")Beigu apakš

Otrajā masīvā tiks saglabātas filtra atrastās vērtības. Ja jūsu LBound un UBound vērtības nav -1, masīvam ir izdevies atrast meklēto vērtību.

Varat arī redzēt, cik reizes teksts tiek parādīts sākotnējā masīvā.

1234567891011121314 Apakšgrāfu nosaukumi ()'Izveidot masīvuDim strName () Kā variantsstrName () = masīvs ("Bobs Smits", "Džons Deiviss", "Freds Džonss", "Stīvs Dženkinss", "Bobs Viljamss")'deklarējiet masīvu, kurā saglabāt filtra datusDim strSubNames As Variantfiltrējiet sākotnējo masīvustrSubNames = Filtrs (strName, "Bob")'Ja no UBound vērtībām atņemat LBound un pievienojat 1, mēs saņemsim teksta parādīšanas reižu skaitu.Msgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "nosaukumi atrasti".Beigu apakš

Atrodiet vērtības, kas neatbilst filtram

The [Iekļaut kā Būla] opcija ļauj jums atrast, cik vērtību jūsu masīvā ir NE atbilst jūsu filtram

1234567891011121314 Sub CountExtraNames ()'izveidot masīvuDim strName () Kā variantsstrName () = masīvs ("Bobs Smits", "Džons Deiviss", "Freds Džonss", "Stīvs Dženkinss", "Bobs Viljamss")'deklarējiet masīvu, kurā saglabāt filtra datusDim strSubNames As Variantfiltrējiet sākotnējo masīvustrSubNames = Filtrs (strName, "Bob", False)'Ja no UBound vērtībām atņemat LBound un pievienojat 1, mēs saņemsim teksta parādīšanas reižu skaitu.Msgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "nosaukumi atrasti".Beigu apakš

tāpēc mēs esam mainījuši šo rindu:

1 strSubNames = Filtrs (strName, "Bob")

ar šo rindiņu:

1 strSubNames = Filtrs (strName, "Bob", False)

Izmantojot šo rindiņu kodā, tiktu atgriezti visi vārdi, kas NAV atbilst “Bob”.

Reģistrjutīgi filtri

Jūs atradīsit, ka filtrs pēc noklusējuma ir reģistrjutīgs. Tas attiecas uz visām VBA funkcijām. Ja vēlaties meklēt tekstu, kas nav reģistrjutīgs, kods ir nedaudz jāmaina.

1 z = filtrs (strName, "bob" ,, vbTextCompare)

Pievienošana vbTextCompare filtrēšanas rindā ļaus jūsu kodam atrast “bob” vai “bob”. Ja tas tiek izlaists, VBA pēc noklusējuma izmanto vbBinaryCompare kas meklēs tikai datus, kas ir PRECĪZI sakrīt. Ievērojiet iepriekš minētajā piemērā, mēs esam izlaiduši [Iekļaut kā Būla] arguments tiek pieņemts Patiess.

Opcija Salīdzināt tekstu

Varat arī pievienot tekstu Opcija Salīdzināt tekstu uz moduļa augšdaļu - tas padarīs visas funkcijas, kuras rakstāt konkrētajā moduļa reģistrā, nejutīgas.

Cilpas izmantošana, lai meklētu masīvā

Cilpas izmantošana ir nedaudz sarežģītāka nekā funkcijas Filtrs izmantošana. Mēs varam izveidot funkciju, kas apritēs visas masīva vērtības.

1234567891011121314151617 Sub LoopThroughArray ()'izveidot masīvuDim strName () Kā variantsstrName () = masīvs ("Bobs Smits", "Džons Deiviss", "Freds Džonss", "Stīvs Dženkinss", "Bobs Viljamss")Dim strFind kā virknestrFind = "Bobs"Dim un tik ilgi'cilpa caur masīvuI = LBound (strName, 1) līdz UBound (strName, 1)Ja InStr (strName (i), strFind)> 0 TadMsgBox "Bobs ir atrasts!"Iziet uzBeigas JaTālāk iBeigu apakš

Lai atrastu teksta virknes daļu, ti, “Bobs”, nevis “Bobs Smits” vai “Bobs Viljamss”, mums If paziņojumā bija jāizmanto Instr funkcija. Tas izskatījās virknē, ko atgrieza cilpa no masīva, lai redzētu, vai virknē ir “Bobs”, un, tāpat kā virknē, tā atgriezīs ziņojumu lodziņu un pēc tam izies no cilpas.

Meklēšana daudzdimensiju masīvā

Mēs arī izmantojam cilpu, lai meklētu daudzdimensiju masīvu. Vēlreiz mums ir jāizveido funkcija, kas ļauj mums aplūkot visas masīva vērtības, taču šoreiz mums ir jāapmeklē arī katra masīva dimensija.

123456789101112131415161718192021222324252627 Funkcija LoopThroughArray ()Dim varArray () kā variantsDim strFind kā virknestrFind = "Ārsts"'deklarējiet masīva lielumuReDim varArray (1, 2)'inicializējiet masīvuvarArray (0, 0) = "Mels Smits"varArray (0, 1) = "Freds sprādze"varArray (0, 2) = "Džeina Eira"varArray (1, 0) = "Grāmatvedis"varArray (1, 1) = "Sekretārs"varArray (1, 2) = "Ārsts"'deklarēt cilpas mainīgosDim i cik ilgi, j tik ilgi'cilpa pirmajai dimensijaiI = LBound (varArray, 1) līdz UBound (varArray, 1)'cilpa otrajai dimensijaiJ = LBound (varArray, 2) līdz UBound (varArray, 2)'ja mēs atrodam vērtību, tad msgbox, lai pateiktu, ka mums ir vērtība, un izejiet no funkcijasJa varArray (i, j) = strFind ThenMsgBox "Ārsts ir atrasts!"Iziet funkcijaBeigas JaNākamais jTālāk iBeigu funkcija
wave wave wave wave wave