Овај водич ће показати како се тражи (Нађи) вредност у низу у ВБА
Постоји низ начина на које можете да тражите низ у низу - у зависности од тога да ли је низ једнодимензионалан или вишедимензионалан.
Тражење у једнодимензионалном низу
Да бисте тражили вредност у једнодимензионалном низу, можете користити функцију филтера.
123 | Дим з Ас Вариант'филтрирајте оригинални низз = Филтер (Арраи, Стринг, Труе, вбЦомпареБинари) |
Синтакса опције Филтер је следећа
Филтер (изворни низ, подударање као низ, [укључи као логичко], [упореди као вбЦомпареМетход])
Тхе Изворни низ и Упари као низ су потребни док је Укључи као логичко и Упореди као вбЦомпареМетход су опционалне. Ако они нису укључени, они су подешени на Истина и вбЦомпареБинари редом.
Пронађите вредности које одговарају филтеру
1234567891011121314 | Суб ФиндБоб ()'Направи низДим стрНаме () Као варијантастрНаме () = Арраи ("Боб Смитх", "Јохн Давиес", "Фред Јонес", "Стеве Јенкинс", "Боб Виллиамс")'декларишите варијанту за складиштење података филтераДим стрСубНамес Ас Вариант'филтрирајте оригинални низстрСубНамес = Филтер (стрНаме, "Боб")'ако је ваша ЛБоунд вредност већа од -1, вредност је пронађенаАко је ЛБоунд (стрСубНамес)> -1 Затим МсгБок ("Нашао сам Боба")Енд Суб |
Други низ ће садржати вредности које филтер пронађе. Ако ваше вредности ЛБоунд и УБоунд нису -1, онда је низ успео да пронађе вредност коју сте тражили.
Такође можете видети колико се пута текст појављује у оригиналном низу.
1234567891011121314 | Имена подброја ()'Направи низДим стрНаме () Као варијантастрНаме () = Арраи ("Боб Смитх", "Јохн Давиес", "Фред Јонес", "Стеве Јенкинс", "Боб Виллиамс")'декларишите низ за складиштење података филтераДим стрСубНамес Ас Вариант'филтрирајте оригинални низстрСубНамес = Филтер (стрНаме, "Боб")'ако минус вредност ЛБоунд из УБоунд вредности и додате 1, добићемо број појављивања текстаМсгбок УБоунд (стрСубНамес) - ЛБоунд (стрСубНамес) + 1 & "имена су пронађена."Енд Суб |
Пронађите вредности које НЕ одговарају филтеру
Тхе [Укључи као логичко] опција вам омогућава да пронађете колико вредности у вашем низу које НЕМОЈ одговара вашем филтеру
1234567891011121314 | Суб ЦоунтЕктраНамес ()'цреате арраиДим стрНаме () Као варијантастрНаме () = Арраи ("Боб Смитх", "Јохн Давиес", "Фред Јонес", "Стеве Јенкинс", "Боб Виллиамс")'декларишите низ за складиштење података филтераДим стрСубНамес Ас Вариант'филтрирајте оригинални низстрСубНамес = Филтер (стрНаме, "Боб", Фалсе)'ако минус вредност ЛБоунд из УБоунд вредности и додате 1, добићемо број појављивања текстаМсгбок УБоунд (стрСубНамес) - ЛБоунд (стрСубНамес) + 1 & "имена су пронађена."Енд Суб |
стога смо изменили овај ред:
1 | стрСубНамес = Филтер (стрНаме, "Боб") |
са овом линијом:
1 | стрСубНамес = Филтер (стрНаме, "Боб", Фалсе) |
Коришћењем ове линије у коду, вратила би се сва имена која НЕ одговарају "Боб".
Филтри осетљиви на велика и мала слова
Открићете да је филтер подразумевано осетљив на велика и мала слова. Ово важи за све ВБА функције. Ако желите да тражите текст који не разликује велика и мала слова, морате мало да измените код.
1 | з = Филтер (стрНаме, "боб" ,, вбТектЦомпаре) |
Додавање вбТектЦомпаре на вашу линију филтера омогућиће вашем коду да пронађе „боб“ или „Боб“. Ако је ово изостављено, ВБА се подразумевано користи вбБинариЦомпаре који ће тражити само податке који су ТАЧНО утакмица. Приметите да смо у горњем примеру изоставили [Укључи као логичко] аргумент па се претпоставља Труе.
Опција Упореди текст
Алтернативно, можете додати текст Опција Упореди текст на врх вашег модула - ово ће учинити све функције које пишете у том модулу неосетљивим.
Коришћење петље за претраживање кроз низ
Коришћење петље је мало компликованије од коришћења функције Филтер. Можемо креирати функцију која ће пролазити кроз све вредности у низу.
1234567891011121314151617 | Суб ЛоопТхроугхАрраи ()'цреате арраиДим стрНаме () Као варијантастрНаме () = Арраи ("Боб Смитх", "Јохн Давиес", "Фред Јонес", "Стеве Јенкинс", "Боб Виллиамс")Дим стрФинд ас стрингстрФинд = "Боб"Дим и Ас Лонг'петља кроз низЗа и = ЛБоунд (стрНаме, 1) За УБоунд (стрНаме, 1)Ако је ИнСтр (стрНаме (и), стрФинд)> 0 ЗатимМсгБок "Боб је пронађен!"Излаз заКрај АкоЗатим самЕнд Суб |
Да бисмо пронашли део текстуалног низа, тј. „Боб“ уместо „Боб Смитх“ или „Боб Виллиамс“, морали смо да употребимо функцију Инстр у наредби Иф. Ово је изгледало у низу који је петља вратила из низа да би се видело да ли је „Боб“ у низу, и како је био у низу, вратио би оквир за поруку, а затим изашао из петље.
Тражење у вишедимензионалном низу
Такође користимо петљу за претраживање кроз вишедимензионални низ. Још једном морамо створити функцију која нам омогућава да прођемо кроз све вредности у низу, али овај пут морамо да прођемо кроз сваку димензију низа.
123456789101112131415161718192021222324252627 | Функција ЛоопТхроугхАрраи ()Дим варАрраи () Као варијантаДим стрФинд Ас СтрингстрФинд = "Доктор"'декларишите величину низаРеДим варАрраи (1, 2)'иницијализује низварАрраи (0, 0) = "Мел Смитх"варАрраи (0, 1) = "Фред Буцкле"варАрраи (0, 2) = "Јане Еире"варАрраи (1, 0) = "Рачуновођа"варАрраи (1, 1) = "Секретар"варАрраи (1, 2) = "Доктор"'декларишите променљиве за петљуДим и Ас Лонг, ј Ас Лонг'петља за прву димензијуЗа и = ЛБоунд (варАрраи, 1) За УБоунд (варАрраи, 1)'петља за другу димензијуЗа ј = ЛБоунд (варАрраи, 2) За УБоунд (варАрраи, 2)'ако пронађемо вредност, онда мсгбок да каже да имамо вредност и изађемо из функцијеАко је варАрраи (и, ј) = стрФинд ОндаМсгБок "Доктор је пронађен!"Излазна функцијаКрај АкоСледеће јЗатим самЗавршна функција |