Šī 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 |