Как да намерите низ с VBA в Excel (8 примера)

  • Споделя Това
Hugh West

Внедряване на VBA е най-ефективният, най-бързият и най-сигурният метод за изпълнение на всякакви операции в Excel. В тази статия ще ви покажем как да намерите определени низове в друг даден низ, като използвате VBA в Excel.

Изтегляне на шаблон за практика

Можете да изтеглите безплатния практически шаблон на Excel от тук.

VBA за намиране в String.xlsm

Функция InStr

Microsoft Excel има вградена функция, наречена функцията InStr за намиране на позицията на определени низове в даден низ.

Общ синтаксис:

InStr([start], string1, string2, [compare])

Тук,

Аргументи Задължително/незадължително Определение
начало По избор Начална позиция на търсенето.
  • По подразбиране InStr Функцията изчислява позицията на символа, като брои от 1, а не от началната позиция. Така че можете да оставите това поле празно, ако искате.
низ1 Изисква се Редицата за търсене, Primary String.
низ2 Изисква се Низът, който се търси в основния низ.
сравни По избор Сайтът InStr по подразбиране е чувствителна към малки и големи букви. InStr , тогава можете да подадете аргумента тук, за да извършите определено сравнение. Този аргумент може да бъде със следните стойности,
  • vbBinaryCompare -> извършва двоично сравнение, връща стойност 0
  • vbTextCompare -> извършва сравнение на текст, връща стойност 1
  • vbDatabaseCompare -> извършва сравнение на база данни, връща стойност 2

По подразбиране, InStr взема vbBinaryCompare като аргумент за сравнение.

8 лесни примера за намиране на конкретна позиция на низ в даден низ с помощта на VBA

Нека видим няколко прости примера за получаване на позициите на определени низове в даден низ с помощта на VBA .

1. VBA за намиране на позицията на текст в низ

По-долу е даден пример за InStr за намиране на позицията на даден текст в низ.

  • Натиснете Alt + F11 на клавиатурата или отидете в раздела Разработчик -> Visual Basic да отворите Редактор на Visual Basic .

  • В изскачащия прозорец с код, в лентата с менюта щракнете върху Вмъкване -> Модул .

  • Сега в прозореца за код напишете прост InStr програма в Подпроцедура VBA (вж. по-долу).
 Sub INSTR_Example() MsgBox InStr("Щастието е избор", "избор") End Sub 

Вашият код вече е готов за изпълнение.

  • Натиснете F5 на клавиатурата или от лентата с менюта изберете Run -> Run Sub/UserForm Можете също така просто да щракнете върху малка икона Play в лентата с подменюта, за да стартирате макроса.

Ще видите, че изскачащият прозорец със съобщение ще ви даде число, обявяващо позицията на текста, който искате да проверите.

Обяснение:

Нашият основен низ - " Щастието е избор " е изречение от 21 букви (с интервали) и ние искахме да намерим позицията на текста " избор " в този низ. Текстът " избор " започна от 16-та позиция на основния низ, следователно получихме номер 16 като резултат в полето за съобщения.

2. VBA за намиране на текст от определена позиция в низ

Сега нека да разберем какво ще се случи, ако искаме да получим позицията от определено число.

  • По същия начин, както преди, отворете Редактор на Visual Basic от Разработчик таб и Вмъкване на a Модул в прозореца с кода.
  • В прозореца с код напишете прост InStr и подайте стойността на аргумента start в съответствие с позицията, от която искате да броите вашия текст.
 Sub INSTR_Example() MsgBox InStr(17, "Щастието е избор", "избор") End Sub 

  • Следващия, Изпълнявайте кода.

Ще видите, че изскачащият прозорец със съобщение ще ви даде число, обявяващо позицията на текста стартиране от определена позиция които искате да проверите.

Обяснение:

Тъй като вече знаехме (от обсъждането на етап 1), че текстът " избор " започна от позицията на 16 , така че вмъкнахме две " избор " в основния низ и задайте 17 като първи параметър, за да пропуснем първия " избор ". И така, ние Изпълнявайте горния макрос и той ни показа номер на позиция 27 което е точно номерът на позицията на втори " избор " в дадения низ.

3. Намиране на текст във VBA с функцията InStr в низ без значение на регистрите

От въвеждането на InStr вече знаете, че по подразбиране функцията InStr функцията е чувствителна към големи и малки букви. Нека разберем това с един пример.

Вижте следното VBA код, в който искаме да намерим позицията на думата " Избор " с главна буква "C" в символния низ " Щастието е избор ", където изборът е написан с малка буква "c" .

  • Изпълнявайте кода и намерете 0 като наш резултат.

Това е така, защото InStr функцията третира главна буква "C" и малка буква "c" по различен начин. Така че той потърси думата " Избор " в низа и не получи никакво съвпадение, затова върна 0 .

  • За да направите InStr функция без значение на размера на буквите , задайте аргумента за сравнение на vbTextCompare (вж. по-долу).
 Sub INSTR_Example() MsgBox InStr(1, "Щастието е избор и избор", "Избор", vbTextCompare) End Sub 

  • Изпълнявайте кода.

Ще получите позиция на текста от низа, независимо дали текстът е написан с главни или малки букви .

4. VBA за намиране на текст от дясната страна на низ

Досега InStr Функцията ни даваше само позицията от лявата страна на низа. Но какво става, ако искате да намерите позицията на текста от дясната страна на низа.

Функцията InStrRev търси отдясно. InStrRev Функцията работи много подобно на функцията InStr и ще намерите позицията на даден текст от дясна страна на низа.

Вижте следните примери, за да разберете разликата.

  • Ако стартираме следния код с InStr функция след това,

тя ни дава позицията ( 16 ) на първия текст " избор ".

  • Но ако стартираме същия код с InStrRev След това функция,

тя ни дава позицията ( 27 ) на последния текст " избор ".

Подобни четива:

  • Намиране на следващо с помощта на VBA в Excel (2 примера)
  • Как да намирате и заменяте чрез VBA (11 начина)
  • Намиране на точно съвпадение чрез VBA в Excel (5 начина)

5. VBA за намиране на позицията на символ в низ

Можете също така да намерите позицията на определен символ в низ по същия начин, по който намирате текст.

  • Копирайте следния код във вашия VBA прозорец с код
 Sub Find_Character() Dim z As Long z = InStr("Щастието е избор", "e") MsgBox z End Sub 

  • И Изпълнявайте макроса.

Първият " e " в дадения ни низ се намира в числото 7 позиция.

6. VBA за намиране на подниз в низ

Тук ще научим как да разберем дали даден низ съдържа подниз или не.

За да го постигнем, трябва да стартираме Изявление IF в нашия код.

  • По същия начин, както преди, отворете Редактор на Visual Basic от Разработчик таб и Вмъкване на a Модул в прозореца с кода.
  • В прозореца за код копирайте следния код и го поставете.
 Public Sub FindSub() If InStr("Щастието е избор", "избор") = 0 Then MsgBox "Не е намерено съвпадение" Else MsgBox "Намерено съвпадение" End If End Sub 

Вашият код вече е готов за изпълнение.

  • Изпълнявайте макроса.

Ако вашият низът съдържа подниз тогава ще получите намерено съвпадение , в противен случай ще върне, че не е намерено съвпадение. В нашия пример искахме да разберем дали основният ни низ " Щастието е избор " съдържа думата " избор " или не. Тъй като това е така, получаваме Намерено съвпадение резултат.

7. VBA за намиране на низ в диапазон от клетки

Можете да търсите определен текст в клетъчен диапазон от низове и да връщате определен низ.

Вижте следния пример, в който ще намерите " Др. " и когато има съвпадение, връща " Доктор ".

  • По-долу е кодът за получаване на резултата, описан по-горе,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Изпълнявайте кода и резултатът е показан по-долу

  • Можете да модифицирате макроса според нуждите си. Например, ако искате да намерите " Проф. " във всяка клетка на низ и получавате " Професор " като връщане, след това просто предайте " Проф. " като стойност вместо " Д-р ." в четвъртия ред на макроса и " Професор " вместо " Доктор " в 5-ия ред на макроса и определете съответно номера на клетъчния диапазон.

8. VBA за намиране на низ в клетка

Можете също така да търсене на определен текст в една клетка от низ и да върне определен низ.

  • Копирайте следния код и го поставете в прозореца за код.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Той ще търси " Др. " в Клетка B5 и ако намери съвпадение, връща " Доктор " в Клетка C5 .

  • Можете да модифицирате макроса според нуждите си. Например, ако искате да намерите " Проф. " в която и да е клетка на низ и да получите " Професор " като връщане, след това просто предайте " Проф. " като стойност вместо " Д-р ." във втория ред на макроса и " Професор " вместо " Доктор " в третия ред на макроса и определете съответно референтния номер на клетката.

Заключение

Тази статия ви показа как да намерите определени текстове в низ в Excel, като използвате Макрос VBA. Надявам се, че тази статия е била много полезна за вас. Чувствайте се свободни да задавате всякакви въпроси, свързани с темата.

Хю Уест е опитен обучител и анализатор на Excel с над 10 години опит в индустрията. Има бакалавърска степен по счетоводство и финанси и магистърска степен по бизнес администрация. Хю има страст към преподаването и е разработил уникален подход на преподаване, който е лесен за следване и разбиране. Неговите експертни познания по Excel са помогнали на хиляди студенти и професионалисти по целия свят да подобрят уменията си и да постигнат отлични резултати в кариерата си. Чрез своя блог Хю споделя знанията си със света, като предлага безплатни уроци за Excel и онлайн обучение, за да помогне на хората и фирмите да достигнат пълния си потенциал.