Excel VBA InStr функция - обяснено с примери

Съдържание

Вчера получих имейл от един от моите читатели - юни.

Тя искаше да знае как да приложи удебелен формат на шрифт към определена част от низ в клетка. Например, приложете удебеления формат само към думата „Здравей“ от „Здравей свят“.

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

Тъй като няма вградена функционалност в Excel, която да може да направи това, създадох прост макрос, който използва Excel VBA InStr функция (ще видите как да направите това в пример 4 в този урок).

Но първо, нека да видим как работи функцията Excel VBA InStr!

Excel VBA InStr функция

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

Функция Excel VBA InStr - Въведение

Функцията InStr намира позицията на определен подниза в низа и връща първата позиция на неговото възникване.

Например, ако искате да намерите позицията на „x“ в „Excel“, използването на функцията Excel VBA InStr ще върне 2.

Синтаксис на функцията InStr

InStr ([Start], String1, String2, [Сравнете])
  • [Старт] - (незадължителен аргумент) това е цяло число, което казва на функцията InStr началната позиция, от която тя трябва да започне да търси. Например, ако искам търсенето да започне от началото, ще въведа стойността като 1. Ако искам да започне с третия знак нататък, ще използвам 3. Ако е пропуснато, се приема стойността по подразбиране 1.
  • Низ 1 - Това е основният низ (или родителския низ), в който искате да търсите. Например, ако търсите позицията на x в Excel, низ 1 ще бъде „Excel“.
  • Низ 2 - Това е поднизата, която търсите. Например, ако търсите позицията на x в Excel, String2 ще бъде x.
  • [Сравнете] - (незадължителен аргумент) Можете да посочите една от следните три стойности за аргумент [сравни]:
    • vbBinaryCompare - Това би направило сравнение по характер. Например, ако търсите „x“ в „Excel“, той ще върне 2, но ако търсите „X“ в „Excel“, той ще върне 0, тъй като X е с главни букви. Можете също да използвате 0 вместо vbBinaryCompare. Ако аргументът [Сравни] е пропуснат, това се приема по подразбиране.
    • vbTextCompare - Това би направило текстово сравнение. Например, ако търсите „x“ или „X“ в Excel, той ще върне 2 и в двата случая. Този аргумент игнорира буквения регистър. Можете също да използвате 1 вместо vbTextCompare.
    • vbDatabaseCompare - Това се използва само за Microsoft Access. Той използва информацията в базата данни, за да извърши сравнението. Можете също да използвате 2 вместо vbDatabaseCompare.

Допълнителни бележки за Excel VBA InStr функция:

  • InStr е функция VBA, а не функция на работен лист. Това означава, че не можете да го използвате в работния лист.
  • Ако String2 (който е подниза, чиято позиция търсите) е празен, функцията ще върне стойността на аргумента [Start].
  • Ако функцията InStr не може да намери подниза в основния низ, тя ще върне 0.

Сега нека да разгледаме някои примери за използване на функцията Excel VBA InStr

Пример 1 - Намиране на позицията от самото начало

В този пример ще използвам функцията InStr, за да намеря позицията на „V“ в „Excel VBA“ от самото начало.

Кодът за това ще бъде:

Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Когато стартирате този код, той ще покаже поле за съобщение със стойност 7, което е позицията на „V“ в низ „Excel VBA“.

Пример 2 - Намиране на позицията от началото на Втората дума

Да предположим, че искам да намеря позицията на „the“ в изречението - „Бързата кафява лисица прескача мързеливото куче“

Искам обаче търсенето да започне с втората дума нататък.

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

Ето кода, който ще направи това:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "Бързата кафява лисица прескача мързеливото куче", "the", vbBinaryCompare) MsgBox Position End Sub

Този код ще покаже полето със съобщение със стойност 32, тъй като ние определихме началната позиция като 4. Следователно той игнорира първото „The“ и намира второто „the“ в изречението.

Ако искате да го направите по -динамичен, можете да подобрите кода, така че той автоматично да игнорира първата дума.

Ето подобрения код, който ще направи това:

Sub FindFromSecondWord () Dim StartingPosition As Integer Dim Position As Integer StartingPosition = InStr (1, "Бързата кафява лисица прескача мързеливото куче", "", vbBinaryCompare) Position = InStr (StartingPosition, "Бързата кафява лисица прескача ленивата dog "," the ", vbBinaryCompare) MsgBox Position End Sub

Този код първо намира позицията на интервал и го съхранява в променливата StartingPosition.

След това използва тази променлива като начална позиция за търсене на думата „the“.

Следователно връща 32 (което е началната позиция на „the“ след първата дума).

Пример 3 - Намиране на позицията на @ в имейл адреса

Можете лесно да създадете персонализирана функция, за да намерите позицията на @ в имейл адрес, като използвате функцията Excel VBA InStr.

Ето кода за създаване на персонализирана функция:

Функция FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, "@") FindPosition = Position End Функция

Сега можете да използвате тази персонализирана функция като всяка друга функция на работен лист. Той ще вземе препратка към клетка като вход и ще ви даде позицията на @ в нея.

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

Пример 4 - Маркиране на част от низ в клетките

Това е запитването, зададено от Джун (моя читател, който също ме вдъхнови да напиша този урок).

Ето примерни данни във формата, изпратен от мен през юни:

Нейната заявка беше да удебели числата извън скобата.

Ето кода, който създадох, който прави това:

Sub Bold () Dim rCell As Range Dim Char As Integer За всяка rCell в селекция CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1). Font.Bold = True Next rCell End Sub

Горният код използва цикъла За всеки, за да премине през всяка от клетките в селекцията. Той идентифицира позицията на отварящата се скоба, използвайки функцията InStr. След това променя шрифта на текста пред скобата.

За да използвате този код, трябва да копирате и поставите в модул във VB редактора.

След като копирате поставения код, изберете клетките, в които искате да направите това форматиране, и стартирайте макроса (както е показано по -долу).

Може да харесате и следните уроци по Excel VBA:

  • Функция Excel VBA SPLIT.
  • Функция VBA TRIM.
  • Най -доброто ръководство за Excel VBA цикли.
  • Ръководство за начинаещи за използване за следващия цикъл в Excel VBA.
  • Как да създадете и използвате добавка в Excel.
  • Как да комбинирате няколко работни книги в една работна книга на Excel.
  • Как да броите цветни клетки в Excel.
  • Полезни примери за макроси на Excel VBA за начинаещи.
  • Как да сортирате данни в Excel с помощта на VBA (Ръководство стъпка по стъпка)

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave