I need to find a string in word document and replace it, with it’s sub string using vba code.
Deduplicator
44.3k7 gold badges65 silver badges115 bronze badges
asked Oct 23, 2015 at 2:11
1
Use Mid method for the sub string purpose
Sub WordReplace()
Dim sSample, rResult As String
sSample = "hello world is my program"
' Sub String (replacing word)
rResult = Mid(sSample, 1, 5)
Set rRange = ActiveDocument.Content
rRange.Find.Execute FindText:=sSample, ReplaceWith:=rResult, Replace:=wdReplaceAll
End Sub
Deduplicator
44.3k7 gold badges65 silver badges115 bronze badges
answered Oct 23, 2015 at 2:31
PASUMPON V NPASUMPON V N
1,1782 gold badges10 silver badges17 bronze badges
You can do something like this:
Sub Macro1()
Dim TextToFind as String
TextToFind = "test"
Dim TextToReplace as String
TextToReplace = "testing"
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = TextToFind
.Replacement.Text = TextToReplace
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
This is directly pulled from Record Macro functionality within Word.
answered Oct 23, 2015 at 2:26
zedfoxuszedfoxus
34.2k5 gold badges62 silver badges61 bronze badges
замечания
Когда вам нужно проверить наличие или позицию подстроки внутри строки, VBA предлагает функции InStr
и InStrRev
которые возвращают позицию символа подстроки в строке, если она присутствует.
Используйте InStr, чтобы определить, содержит ли строка подстроку
Const baseString As String = "Foo Bar"
Dim containsBar As Boolean
'Check if baseString contains "bar" (case insensitive)
containsBar = InStr(1, baseString, "bar", vbTextCompare) > 0
'containsBar = True
'Check if baseString contains bar (case insensitive)
containsBar = InStr(1, baseString, "bar", vbBinaryCompare) > 0
'containsBar = False
Используйте InStr, чтобы найти позицию первого экземпляра подстроки
Const baseString As String = "Foo Bar"
Dim containsBar As Boolean
Dim posB As Long
posB = InStr(1, baseString, "B", vbBinaryCompare)
'posB = 5
Используйте InStrRev, чтобы найти позицию последнего экземпляра подстроки
Const baseString As String = "Foo Bar"
Dim containsBar As Boolean
'Find the position of the last "B"
Dim posX As Long
'Note the different number and order of the paramters for InStrRev
posX = InStrRev(baseString, "X", -1, vbBinaryCompare)
'posX = 0
В этой статье разберем работу со строками в VBA на примерах функций InStr, LCASE, UCase, Left, Right, Mid, LTrim, RTrim, Trim, Len, Replace, Space, StrComp, String, StrReverse.
Строки — это последовательность символов, которая может состоять либо из алфавитов, цифр, специальных символов, либо из всех них. Переменная называется строкой, если она заключена в двойные кавычки «».
Содержание:
- Синтаксис
- Примеры
- Строковые функции
- Название функции и описание
- InStr
- Синтаксис
- Параметр Описание
- пример
- Синтаксис
- Параметр Описание
- пример
- LCASE
- Синтаксис
- пример
- UCase
- Синтаксис
- пример
- Left
- Синтаксис
- Параметр Описание
- пример
- Right
- Синтаксис
- Параметр Описание
- пример
- Mid
- Синтаксис
- Параметр Описание
- LTrim
- Синтаксис
- пример
- RTrim
- Синтаксис
- пример
- Trim
- Синтаксис
- пример
- Len
- Синтаксис
- пример
- Replace
- Синтаксис
- Параметр Описание
- пример
- Space
- Синтаксис
- Параметр Описание
- пример
- StrComp
- Синтаксис
- Параметр Описание
- пример
- String
- Синтаксис
- Параметр Описание
- пример
- StrReverse
- Синтаксис
- пример
Синтаксис
variablename = "string"
Примеры
str1 = "string" ' Only Alphabets str2 = "132.45" ' Only Numbers str3 = "!@#$;*" ' Only Special Characters Str4 = "Asc23@#" ' Has all the above
Строковые функции
Существуют предопределенные функции VBA String, которые помогают разработчикам эффективно работать со строками. Ниже приведены методы String, поддерживаемые в VBA. Пожалуйста, нажмите на каждый из методов, чтобы знать подробно.
Название функции и описание
Функция InStr возвращает первое вхождение одной строки в другую строку. Поиск происходит слева направо.
Синтаксис
InStr([start,]string1,string2[,compare])
Параметр Описание
- Пуск — необязательный параметр. Указывает начальную позицию для поиска. Поиск начинается с первой позиции слева направо.
- String1 — требуемый параметр. Строка для поиска.
- String2 — требуемый параметр. Строка, по которой выполняется поиск String1.
- Compare — Необязательный параметр. Указывает сравнение строк.Он может принимать следующие значения.
- 0 = vbBinaryCompare — выполняет двоичное сравнение (по умолчанию)
- 1 = vbTextCompare — выполняет сравнение текста
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim Var As Variant Var = "Microsoft VBScript" MsgBox ("Line 1 : " & InStr(1, Var, "s")) MsgBox ("Line 2 : " & InStr(7, Var, "s")) MsgBox ("Line 3 : " & InStr(1, Var, "f", 1)) MsgBox ("Line 4 : " & InStr(1, Var, "t", 0)) MsgBox ("Line 5 : " & InStr(1, Var, "i")) MsgBox ("Line 6 : " & InStr(7, Var, "i")) MsgBox ("Line 7 : " & InStr(Var, "VB")) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : 6
Line 2 : 0
Line 3 : 8
Line 4 : 9
Line 5 : 2
Line 6 : 16
Line 7 : 11
Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо.
InStrRev
Функция InStrRev возвращает первое вхождение одной строки в другую строку. Поиск происходит справа налево.
Синтаксис
InStrRev(string1,string2[,start,[compare]])
Параметр Описание
- String1 — требуемый параметр. Строка для поиска.
- String2 — требуемый параметр. Строка, по которой выполняется поиск String1.
- Пуск — необязательный параметр. Указывает начальную позицию для поиска. Поиск начинается с первой позиции справа налево.
- Compare — Необязательный параметр. Указывает сравнение строк.Он может принимать следующие значения.
- 0 = vbBinaryCompare — выполняет двоичное сравнение (по умолчанию)
- 1 = vbTextCompare — выполняет сравнение текста
пример
Добавьте кнопку и установите следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1 : " & InStrRev(var,"s",10)) msgbox("Line 2 : " & InStrRev(var,"s",7)) msgbox("Line 3 : " & InStrRev(var,"f",-1,1)) msgbox("Line 4 : " & InStrRev(var,"t",5)) msgbox("Line 5 : " & InStrRev(var,"i",7)) msgbox("Line 6 : " & InStrRev(var,"i",7)) msgbox("Line 7 : " & InStrRev(var,"VB",1)) End Sub
После выполнения вышеуказанного скрипта он производит следующий результат.
Line 1 : 6
Line 2 : 6
Line 3 : 8
Line 4 : 0
Line 5 : 2
Line 6 : 2
Line 7 : 0
Возвращает первое вхождение указанной подстроки. Поиск происходит справа налево.
LCASE
Функция LCase возвращает строку после преобразования введенной строки в строчные буквы.
Синтаксис
Lcase(String)
пример
Добавьте кнопку и поместите следующую функцию внутри нее.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1 : " & LCase(var)) var = "MS VBSCRIPT" msgbox("Line 2 : " & LCase(var)) var = "microsoft" msgbox("Line 3 : " & LCase(var)) End Sub
После выполнения вышеуказанного скрипта он производит следующий вывод.
Line 1 : microsoft vbscript
Line 2 : ms vbscript
Line 3 : microsoft
Возвращает нижний регистр указанной строки.
UCase
Функция UCase возвращает строку после преобразования введенной строки в буквы буквы UPPER.
Синтаксис
UCase(String)
пример
Добавьте кнопку и поместите следующую функцию внутри нее.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1 : " & UCase(var)) var = "MS VBSCRIPT" msgbox("Line 2 : " & UCase(var)) var = "microsoft" msgbox("Line 3 : " & UCase(var)) End Sub
После выполнения вышеуказанного скрипта он производит следующий вывод.
Line 1 : MICROSOFT VBSCRIPT
Line 2 : MS VBSCRIPT
Line 3 : MICROSOFT
Возвращает верхний регистр указанной строки.
Left
Функция Left возвращает указанное количество символов с левой стороны данной входной строки.
Синтаксис
Left(String, Length)
Параметр Описание
- String — обязательный параметр. Строка ввода, из которой указанное число символов должно быть возвращено с левой стороны.
- Длина — требуемый параметр. Целое число, определяющее количество возвращаемых символов.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript" msgbox("Line 1 : " & Left(var,2)) var = "MS VBSCRIPT" msgbox("Line 2 : " & Left(var,5)) var = "microsoft" msgbox("Line 3 : " & Left(var,9)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : Mi
Line 2 : MS VB
Line 3 : microsoft
Возвращает определенное количество символов с левой стороны строки.
Right
Функция Right возвращает указанное количество символов с правой стороны данной входной строки.
Синтаксис
Right(String, Length)
Параметр Описание
- String — обязательный параметр. Строка ввода, из которой указанное число символов должно быть возвращено с правой стороны.
- Длина — требуемый параметр. Целое число, которое задает количество возвращаемых символов.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" msgbox("Line 1 : " & Right(var,2)) var = "MS VBSCRIPT" msgbox("Line 2 : " & Right(var,5)) var = "microsoft" msgbox("Line 3 : " & Right(var,9)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : pt
Line 2 : CRIPT
Line 3 : microsoft
Возвращает определенное количество символов с правой стороны строки.
Mid
Mid функция возвращает указанное количество символов из заданной входной строки.
Синтаксис
Mid(String,start[,Length])
Параметр Описание
- String — обязательный параметр. Строка ввода, из которой задано количество символов, которые нужно вернуть.
- Начало — требуемый параметр. Целое число, определяющее начальную позицию строки.
- Длина — необязательный параметр. Целое число, определяющее количество возвращаемых символов.
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript" msgbox("Line 1 : " & Mid(var,2)) msgbox("Line 2 : " & Mid(var,2,5)) msgbox("Line 3 : " & Mid(var,5,7)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : icrosoft VBScript
Line 2 : icros
Line 3 : osoft V
Возвращает определенное количество символов из строки на основе указанных параметров.
LTrim
Функция Ltrim удаляет пробелы с левой стороны строки.
Синтаксис
LTrim(String)
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = " Microsoft VBScript" msgbox "After Ltrim : " & LTrim(var) End Sub
Когда вы выполняете функцию, она производит следующий вывод.
After Ltrim : Microsoft VBScript
Возвращает строку после удаления пробелов в левой части указанной строки.
RTrim
Функция Rtrim удаляет пробелы с правой стороны строки.
Синтаксис
RTrim(String)
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var as Variant var = "Microsoft VBScript " msgbox("After Rtrim : " & RTrim(var)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
After Rtrim : Microsoft VBScript
Возвращает строку после удаления пробелов в правой части указанной строки.
Trim
Функция Trim удаляет как ведущее, так и конечное пустое пространство данной входной строки.
Синтаксис
Trim(String)
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() var = "Microsoft VBScript" var = " Microsoft VBScript " msgbox ("After Trim : " & Trim(var)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
After trim : Microsoft VBScript
Возвращает строковое значение после удаления как верхнего, так и конечного пробелов.
Len
Функция Len возвращает длину данной входной строки, включая пробелы.
Синтаксис
Len(String)
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var1 as Variant Dim var2 as Variant var1 ="Microsoft VBScript" msgbox("Length of var1 is : " & Len(var1)) var2 = " Microsoft VBScript " msgbox ("Length of var2 is : " & Len(var2)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Length of var1 is : 18
Length of var2 is : 36
Возвращает длину данной строки.
Replace
Функция Replace заменяет указанную часть строки на определенную строку, указанное количество раз.
Синтаксис
Replace(string,find,replacewith[,start[,count[,compare]]])
Параметр Описание
- String — обязательный параметр. Строка ввода, которую нужно искать для замены.
- Find — требуемый параметр. Часть строки, которая будет заменена.
- Replacewith — обязательный параметр. Строка замены, которая будет заменена на параметр find.
- Start — необязательный параметр. Задает начальную позицию, из которой нужно искать и заменять строку. Значение по умолчанию — 1.
- Count — необязательный параметр. Указывает количество раз, которое должна выполняться замена.
- Compare — Необязательный параметр. Указывает метод сравнения, который будет использоваться. Значение по умолчанию — 0.
- 0 = vbBinaryCompare — выполняет двоичное сравнение
- 1 = vbTextCompare — выполняет текстовое сравнение
пример
Private Sub Constant_demo_Click() Dim var as Variant var = "This is VBScript Programming" 'VBScript to be replaced by MS VBScript msgbox("Line 1: " & Replace(var,"VBScript","MS VBScript")) 'VB to be replaced by vb msgbox("Line 2: " & Replace(var,"VB","vb")) ''is' replaced by ## msgbox("Line 3: " & Replace(var,"is","##")) ''is' replaced by ## ignores the characters before the first occurence msgbox("Line 4: " & Replace(var,"is","##",5)) ''s' is replaced by ## for the next 2 occurences. msgbox("Line 5: " & Replace(var,"s","##",1,2)) ''r' is replaced by ## for all occurences textual comparison. msgbox("Line 6: " & Replace(var,"r","##",1,-1,1)) ''t' is replaced by ## for all occurences Binary comparison msgbox("Line 7: " & Replace(var,"t","##",1,-1,0)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1: This is MS VBScript Programming
Line 2: This is vbScript Programming
Line 3: Th## ## VBScript Programming
Line 4: ## VBScript Programming
Line 5: Thi## i## VBScript Programming
Line 6: This is VBSc##ipt P##og##amming
Line 7: This is VBScrip## Programming
Возвращает строку после замены строки другой строкой.
Space
Функция Space заполняет строку конкретным количеством пробелов.
Синтаксис
space(number)
Параметр Описание
Номер — требуемый параметр. Количество пробелов, которые мы хотим добавить к данной строке.
пример
Private Sub Constant_demo_Click() Dim var1 as Variant var1 = "Microsoft" Dim var2 as Variant var2 = "VBScript" msgbox(var1 & Space(2)& var2) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Microsoft VBScript
Заполняет строку указанным количеством пробелов.
StrComp
Функция StrComp возвращает целочисленное значение после сравнения двух заданных строк. Он может возвращать любое из трех значений -1, 0 или 1 на основе входных строк для сравнения.
- Если String1 меньше String2, то StrComp возвращает -1
- Если String1 равно String2, то StrComp возвращает 0
- Если String1 больше String2, то StrComp возвращает 1
Синтаксис
StrComp(string1,string2[,compare])
Параметр Описание
- String1 — требуемый параметр. Первое строковое выражение.
- String2 — требуемый параметр. Второе строковое выражение.
- Compare — Необязательный параметр. Указывает сравнение строк.Он может принимать следующие значения.
- 0 = vbBinaryCompare — выполняет двоичное сравнение (по умолчанию)
- 1 = vbTextCompare — выполняет сравнение текста
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim var1 as Variant msgbox("Line 1 :" & StrComp("Microsoft","Microsoft")) msgbox("Line 2 :" &StrComp("Microsoft","MICROSOFT")) msgbox("Line 3 :" &StrComp("Microsoft","MiCrOsOfT")) msgbox("Line 4 :" &StrComp("Microsoft","MiCrOsOfT",1)) msgbox("Line 5 :" &StrComp("Microsoft","MiCrOsOfT",0)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 :0
Line 2 :1
Line 3 :1
Line 4 :0
Line 5 :1
Возвращает целочисленное значение после сравнения двух указанных строк.
String
Функция String заполняет строку указанным символом для указанного количества раз.
Синтаксис
String(number,character)
Параметр Описание
- Номер — требуемый параметр. Целочисленное значение, которое будет повторяться в течение определенного количества раз против параметра символа.
- Символ — требуемый параметр. Значение символа, которое должно повторяться определенное количество раз.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() msgbox("Line 1 :" & String(3,"$")) msgbox("Line 2 :" & String(4,"*")) msgbox("Line 3 :" & String(5,100)) msgbox("Line 4 :" & String(6,"ABCDE")) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 :$$$
Line 2 :****
Line 3 :ddddd
Line 4 :AAAAAA
Возвращает строку с указанным символом для указанного количества раз.
StrReverse
Функция StrReverse меняет указанную строку.
Синтаксис
StrReverse(string)
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() msgbox("Line 1 : " & StrReverse("VBSCRIPT")) msgbox("Line 2 : " & StrReverse("My First VBScript")) msgbox("Line 3 : " & StrReverse("123.45")) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Line 1 : TPIRCSBV
Line 2 : tpircSBV tsriF yM
Line 3 : 54.321
Возвращает строку после изменения последовательности символов данной строки.
С уважением, авторы сайта Компьютерапия
Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!
In this Article
- INSTR Function
- Instr Example
- Instr Syntax
- Instr Start Position
- Case-Insensitive INSTR Test
- InstrRev Function
- VBA Coding Made Easy
- InString Examples
- If String Contains Substring
- Find Text String in a Cell
- Find Position of a Character in a String
- Search String for Word
- If Variable Contains String
- Instr and the Left Function
- Using Instr in Microsoft Access VBA
INSTR Function
The VBA Instr Function checks if a string of text is found in another string of text. It returns 0 if the text is not found. Otherwise it returns the character position where the text is found.
The Instr Function performs exact matches. The VBA Like Operator can be used instead to perform inexact matches / pattern matching by using Wildcards.
Instr Example
The following code snippet searches the string “Look in this string” for the word “Look”. The Instr Function returns 1 because the text is found in the first position.
Sub FindSomeText()
MsgBox InStr("Look in this string", "Look")
End Sub
This second example returns 7 because the text is found starting in the 7th position:
Sub FindSomeText2()
MsgBox InStr("Don't Look in this string", "Look")
End Sub
Important! The Instr Function is case-sensitive by default. This means “look” will not match with “Look”. To make the test case-insensitive read below.
Instr Syntax
The syntax for the Instr function is as follows:
Instr( [start], string, substring, [compare] )
[start] (optional) – This optional argument is the starting position of the search. Enter 1 to start searching from position 1 (or leave blank). Enter 5 to start searching from position 5. Important! The INSTR function calculates the character position by counting from 1 NOT from the [start] position.
string – The string of text to search in.
substring – The string of text to find in the primary string.
[compare] (optional) – By default, Instr is case-sensitive. By setting this argument you can make Instr Case insensitive:
Argument vb Value |
Argument Integer | Description |
vbBinaryCompare |
0 |
(Default) Case-sensitive |
vbTextCompare |
1 |
Not Case-sensitive |
vbDatabaseCompare |
2 |
MS Access Only. Uses information in the database to perform comparison. |
Instr Start Position
The Instr start position allows you to indicate the character position where you will begin your search. Keep in mind however, the Instr output will always count from 1.
Here we set the start position to 3 to skip the first B:
Sub Instr_StartPosition()
MsgBox InStr(3, "ABC ABC", "B")
End Sub
The result is 6 because the second B is the 6th character in the string.
Case-Insensitive INSTR Test
By default, VBA treats “L” different from “l”. In other words, VBA is case-sensitive. This is true of all text functions. To make VBA case-insensitive, set the [compare] argument to 1 or vbTextCompare.
Public Sub FindText_IgnoreCase()
MsgBox InStr(1, "Don't Look in this string", "look", vbTextCompare)
End Sub
Alternatively, you can add Option Compare Text to the top of your code module:
Option Compare Text
Option Compare Text
Public Sub FindText_IgnoreCase2()
MsgBox InStr("Don't Look in this string", "look")
End Sub
Option Compare Text will impact all of the code in that module. I personally place this at the top of any module that deals with text because I never care about case differences.
InstrRev Function
The Instr Function searches from the left. Instead you can search from the right using the InstrRev Function. The InstrRev Function works very similarly to the Instr function.
Sub FindSomeText_FromRight()
MsgBox InStrRev("Look in this string", "Look")
End Sub
Just like the Instr function this will return 1 because there is only one instance of “Look” in the text. But if we add a second “Look”, you’ll see that it returns the position of the right-most “Look”:
Sub FindSomeText_FromRight()
MsgBox InStrRev("Look in this string Look", "Look")
End Sub
Next we will review more Instr examples.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
InString Examples
If String Contains Substring
Here we will use an If statement to test if a string contains a a substring of text:
Public Sub FindSomeText()
If InStr("Look in this string", "look") = 0 Then
MsgBox "No match"
Else
MsgBox "At least one match"
End If
End Sub
Find Text String in a Cell
You can also find a string in a cell:
Sub Find_String_Cell()
If InStr(Range("B2").Value, "Dr.") > 0 Then
Range("C2").Value = "Doctor"
End If
End Sub
Or loop through a range of cells to test if the cells contain some text:
Sub Search_Range_For_Text()
Dim cell As Range
For Each cell In Range("b2:b6")
If InStr(cell.Value, "Dr.") > 0 Then
cell.Offset(0, 1).Value = "Doctor"
End If
Next cell
End Sub
VBA Programming | Code Generator does work for you!
Find Position of a Character in a String
This code will find the position of a single character in a string and assign the position to a variable:
Sub Find_Char()
Dim n As Long
n = InStr("Here Look Here", "L")
End Sub
Search String for Word
This code will search a string for a word:
Sub Search_String_For_Word()
Dim n As Long
n = InStr("Here Look Here", "Look")
If n = 0 Then
MsgBox "Word not found"
Else
MsgBox "Word found in position: " & n
End If
End Sub
If Variable Contains String
This code will test if a string variable contains a string of text:
Sub Variable_Contains_String()
Dim str As String
str = "Look Here"
If InStr(str, "Here") > 0 Then
MsgBox "Here found!"
End If
End Sub
Instr and the Left Function
Instr can be used along with other text functions like Left, Right, Len, and Mid to trim text.
With the Left function you can output the text prior to a string of text:
Sub Instr_Left()
Dim str As String
Dim n As Long
str = "Look Here"
n = InStr(str, "Here")
MsgBox Left(str, n - 1)
End Sub
Using Instr in Microsoft Access VBA
All of the above examples work exactly the same in Access VBA as in Excel VBA.
To learn more, read our article: VBA text functions
<<Return to VBA Examples
Содержание
- 0.1 удалить из строки знак » и знак =
- 0.1.1 Вариант1
- 0.1.2 Вариант
- 0.1.3 Вариант
- 0.1.4 Вариант
- 0.1.5 Вариант
- 0.1.6 Вариант
- 0.1.7 В верхний и в нижний регистр
- 0.2 Операции со строками
- 0.3 Таблица «Функции работы со строками»
- 0.4 Следующие три функции позволяют работать с массивом строк
- 0.5 И последние две функции генерируют строки символов
- 0.6 Пример
- 0.6.1 Технология выполнения
- 0.7 Задача
- 1 How to: Match a String against a Pattern (Visual Basic)
-
- 1.0.1 Проверка символа
- 1.0.2 ? — один любой символ
- 1.0.3 Любой символ из списка [abc] и диапазона [a-c]
- 1.0.4 Символ из списка или отсутствие символа
-
- 2 Функция InStr
- 2.1 Примеры
удалить из строки знак » и знак =
(http://www.cyberforum.ru/vba/thread638743.html)
Вариант1
strW= (="КОРОТЕЕВ ДМИТРИЙ ВЛАДИМИРОВИЧ") strB=Replace(Replace(strW, Chr(61), ""), Chr(34), "")
Вариант
Можно еще через байтовый массив:
Sub n() Dim Mass() As Byte, n As Long, Zam As String, TXT As String TXT = "=""КОРОТЕЕВ ДМИТРИЙ ВЛАДИМИРОВИЧ" Mass = StrConv(TXT, vbFromUnicode) For n = 0 To UBound(Mass) If Mass(n) <> 34 And Mass(n) <> 61 Then Zam = Zam + Chr$(Mass(n)) Next MsgBox Zam End Sub
Вариант
Или фильтрацию мидом:
Sub nn() Dim n As Long, TXT As String, L As String, Zam As String TXT = "=""КОРОТЕЕВ ДМИТРИЙ ВЛАДИМИРОВИЧ" For n = 1 To Len(TXT) L = Mid$(TXT, n, 1) If L <> """" And L <> "=" Then Zam = Zam + L Next MsgBox Zam End Sub
Строку 6 можно заменить лайкой:
Код Visual Basic
1
If L Like «[!»»=]» Then Zam = Zam + L
Вариант
Еще через поиск позиции и рекурсию:
Sub test() Dim n As Long, txt As String txt = "=""КОРОТЕЕВ ДМИТРИЙ ВЛАДИМИРОВИЧ" txt = Change(txt, "=") txt = Change(txt, """") MsgBox txt End Sub Function Change(txt As String, What As String, Optional Pos = 1) Dim n As Long If Pos <> 0 Then n = InStr(Pos, txt, What) Change = Mid$(txt, Pos, IIf(n - Pos < 0, Len(txt), n - Pos)) + Change(txt, What, IIf(n = 0, 0, n + 1)) End If End Function
Еще можно через регулярные выражения, но я их не знаю.
Вариант
Через поиск справа налево и рекурсию:
Код Visual Basic | ||
|
Вариант
А ещё есть Split и Join
strb = Join(Split(Join(Split(strW, "="), ""), """"), "")
Не по теме:Но это для садистов
В верхний и в нижний регистр
With ActiveDocument.Range 'верхних регистр .Text = Ucase(.Text) 'нижний регистр .Text = Lcase(.Text) End With
или StrConv() — преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.) — см. ниже
Операции со строками
Для данных типа String существует только одна операция – конкатенация (объединение). Например, результатом операции конкатенации трех строковых значений «Петр» & » » & «Иванович» будет строка «Петр Иванович». Возможно также использование другого оператора для операции конкатенации, например: «десяти» + «тысячник». Разница между этими выражениями состоит в том, что в первом случае операндами могут быть значения любого типа (они просто будут преобразовываться в строковые), а во втором – оба операнда должны иметь тип String. Для работы со строками существует большое количество функций (таблица. Функции работы со строками).
Таблица «Функции работы со строками»
Функция | Описание | Пример |
---|---|---|
Len(str) | Определяет длину строки | Из а=lеn(«Персонажи») следует а=9 |
Left (<строка>, <длина>) | Выделяет из аргумента <строка> указанное количество символов слева | Left(» 1234string», 4) =»1234″ |
Right(<строка>, <длина>) | Выделяет из аргумента <строка> указанное количество символов справа | Right(» 1234string», 6) =»string» |
Mid(<строка>, <старт> [, <длина>]) | Выделяет из аргумента <строка> подстроку с указанным числом символов, начиная с позиции <старт> | Mid («12345678″, 4.3) =»456» |
Mid(<строка>, <старт>) | Выделяется подстрока от позиции <старт> до конца строки | Mid («12345678″, 4) =»45678» |
LTrim (<строка>) | Удаляет пробелы в начале строки | LTrim(» печать») =»печать» |
RTrim (<строка>) | Удаляет пробелы в конце строки | RTrim(«печать «) =»печать» |
Trim (<строка>) | Удаляет пробелы в начале и в конце строки | Trim(» печать «) =»печать» |
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) | Производит поиск подстроки в строке. Возвращает позицию первого вхождения строки <строка2> в строку <строка1>, <старт> — позиция, с которой начинается поиск. Если этот аргумент пропущен, поиск начинается с начала строки | Instr(«C:Temp test.mdb», «Test»)=9 Если искомая строка не находится в указанной строке, функция возвращает 0 |
InStrRev ([<старт>, ] <строка1>, <строка2> [, <сравнение>]) | Ищет подстроку в строке, но начинает поиск с конца строки и возвращает позицию последнего вхождения подстроки. Необязательный аргумент <сравнение> определяет тип сравнения двух строк | |
Replace (<строка>, <строкаПоиск>, <строкаЗамена>) | Позволяет заменить в строке одну подстроку другой. Эта функция ищет все вхождения аргумента <строкаПоиск> в аргументе <строка> и заменяет их на <строкаЗамена> |
Для сравнения строковых значений можно использовать обычные операторы сравнения числовых значений, так как при сравнении символов сравниваются их двоичные коды. Для сравнения строковых значений также применяется оператор Like, который позволяет обнаруживать неточное совпадение, например выражение «Входной сигнал» Like «Вход*» будет иметь значение True, так как сравниваемая строка начинается со слова «Вход». Символ звездочка (*) в строке заменяет произвольное число символов. Другие символы, которые обрабатываются оператором Like в сравниваемой строке:
- ? – любой символ (один);
- #– одна цифра (0–9);
- [<список>] – символ, совпадающий с одним из символов списка;
- [!<список>] – символ, не совпадающий ни с одним из символов списка.
- ASC()— эта функция позволяет вернуть числовой код для переданного символа. Например, ASC(
"D"
) вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду.Варианты этой функции — AscB() и AscW():- AscB() — возвращает только первый байт числового кода для символа.
- AscW() — возвращает код для символа в кодировке Unicode
- Chr() — возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например кавычки —
"
), т.к. кавычки просто так в VBA-коде не ввести(нужно ставить двойные). Я обычно именно эту функцию и использую.Dim sWord As String sWord = Chr(34) & "Слово в кавычках" & Chr(34)
Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично таким же вариантам для функции Asc().
- InStr() и InStrRev()— одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной символ или последовательность символов и вернуть их позицию. Если последовательность не обнаружена, то возвращается 0.
Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Then MsgBox "Искомое слово присутсвует!" Else MsgBox "Искомое слово отсутсвует!" End If
Разница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() с конца строки
- Left(), Right(), Mid()— возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.
Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5)
- Len() — возможность получить число символов в строке. Часто используется с циклами, операциями замены и т.п.
- LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно. Часто используется для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т.п.).
- LSet() и RSet() — возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
- LTrim(), RTrim(), Trim() — возможность убрать пробелы соответственно слева, справа или и слева, и справа.
- Replace()— возможность заменить в строке одну последовательность символов на другую.
Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello", "Bay")
- Space() — получить строку из указанного вами количества пробелов;
Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки. - StrComp() — возможность сравнить две строки.
- StrConv() — возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.):
Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!", vbUpperCase)
В качестве второго параметра параметра могут применяться константы:
- vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
- vbLowerCase: Преобразует все текстовые символы в нижний регистр
- vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
- *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
- *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
- **vbKatakana: Преобразует символы Hiragana в символы Katakana
- **vbHiragana: Преобразует символы Katakana в символы Hiragana
- ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
- ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию
* применимо для локализаций Дальнего востока
** применимо только для Японии
*** не поддерживается операционными системами под управлением Macintosh - StrReverse() — «перевернуть» строку, разместив ее символы в обратном порядке. Функция работатет только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово?
- Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
- String() — позволяет получить строку из указанного количества символов(которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().
Следующие три функции позволяют работать с массивом строк
Split (<строка> [, <разделитель>]) – преобразует строку в массив подстрок. По умолчанию в качестве разделителя используется пробел. Данную функцию удобно использовать для разбиения предложения на слова. Однако можно указать в этой функции любой другой разделитель. Например, Split(3, «Этo тестовое предложение») возвращает массив из трех строковых значений: «Это», «тестовое», «предложение». Join (<массивСтрок> [, <разделитель>]) – преобразует массив строк в одну строку с указанным разделителем. Filter(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – просматривает массив строковых значений и ищет в нем все подстроки, совпадающие с заданной строкой. Эта функция имеет четыре аргумента: <строкаПоиск> – искомая строка; <включение> – параметр (булевское значение), который указывает, будут ли возвращаемые строки включать искомую подстроку или, наоборот, возвращаться будут только те строки массива, которые не содержат искомой строки в качестве подстроки; <сравнение> – параметр, определяющий метод сравнения строк. Еще три функции обеспечивают преобразование строк: LCase(<строка>) – преобразует все символы строки к нижнему регистру, например функция LCase(«ПОЧTA») возвращает строку «почта»; UCase(<строка>) – преобразует все символы строки к верхнему регистру; StrConv(<строка>, <преобразование>) – выполняет несколько типов преобразований строки в зависимости от второго параметра. Этот параметр описывается встроенными константами, например функция StrConv(«poccия», VbProperCase) возвращает значение «Россия».
И последние две функции генерируют строки символов
Space(<число>) – создает строку, состоящую из указанного числа пробелов; String(<число>, <символ>) – создает строку, состоящую из указанного в первом аргументе числа символов. Сам символ указывается во втором аргументе.
Пример
Создать программу, работающую со строковыми переменными. Для этого создать форму, в метки которой выходят следующие сообщения: 1 метка: сообщается длина строки, введенной в первое текстовое поле (1 строка); 2 метка: преобразует все символы третьего текстового поля (3 строка) в заглавные буквы; 3 метка: выводит вместе содержание первого и второго текстовых полей (1 и 2 строки).
Технология выполнения
- Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
- Создайте форму аналогично приведенному рисунку.
- Пропишите обработчик события кнопки ОК.
- Откомпилируйте программу.
- Запустите форму на выполнение.
Форма примера в режиме конструктора и в рабочем состоянии
Private Sub CommandButton1_Click() Dim a As String Dim b As String Dim c As String Dim k As String Dim d As String Dim n As Integer a=TextBox1.Text n=Len(a) Label7.Caption=«длина первой строки равна» & n & « символам» c=TextBox3.Text k=Ucase(с) Label8.Caption=k b=TextBox2.Text d=a + » » + b Label9.Caption=d End Sub
Задача
Нужно, что бы в экселе в ячейке А1 выполнялся поиск слов, записанных через запятую в столбец А2, а результат, и найденные слова, с числом их повторений (если такое возможно) в искомом тексте, записались в другую, третью, ячейку. (ещё лучше бы было, если б они выделялись (ну или подчеркивались) каким ни будь образом в первой ячейке…что бы их сразу видно было Вот так загоняешь в массив слова:
Код Visual Basic | ||
|
А потом в цикле по всем словам ищешь(опять же в цикле. во вложенном) Добавлено через 23 минуты
Код Visual Basic | ||
|
Добавлено через 15 минутА вот так будет искать по началу слова а выделять всё слово
Код Visual Basic | ||
|
Можно сделать что бы искало и не с начала слова, а по части слова. — добавить ещё один цикл Do-Loop. Только смещать начало(ST) влево до пробела (http://www.cyberforum.ru/vba/thread567588.html)
How to: Match a String against a Pattern (Visual Basic)
- Некоторые символы нужно заключать в квадратные скобки ([ ]). см. Like Operator (Visual Basic).myString состоит из единственного символа H:
Dim sMatch As Boolean = myString Like "H"
? — один любой символ
- myString состоит из символа W, за которым следуют 2 любых символа
Dim sMatch As Boolean = myString Like "W??"
Любой символ из списка [abc] и диапазона [a-c]
Любой символ и затем один из символов A, C или E
-
Dim sMatch As Boolean = myString Like "?[ACE]" учитывается регистр символов
- myString = символы num и затем один символ из диапазона: i, j, k, l, m или n:
Dim sMatch As Boolean = myString Like "num[i-m]"
учитывается регистр символов
Like работает с [] как с о строковым массивом нулевой длины string («»). [] позволяет проверить, что строка является пустой
Символ из списка или отсутствие символа
- Оператор Like используется дважды, и результаты объединяются с помощью оператора Or Operator (Visual Basic) или OrElse Operator (Visual Basic).
- В шаблон первого оператора вставьте список символов в квадратных скобках ([ ]).
- В шаблон второго оператора в место проверки не помещайте ничегоПример: проверка семизначного номера телефона phoneNum, который должен содержать точно три цифры, после которых следует пробел, дефис точка или никакого символа и затем четыре цифры. (первые три цифры могут быть не отделены от четырех последних — «никакого символа»)
Dim sMatch As Boolean = (phoneNum Like "###[ -.]####") OrElse (phoneNum Like "#######")
Функция InStr
Данная функция возвращает значение типа Variant (Long), определяющее положение первого вхождения одной строки в другую.
См. примеры
Синтаксис
InStr([начальная_позиция, ] строка_1, строка_2 [, тип_сравнения ] )
Функция InStr имеет следующие аргументы:
АРГУМЕНТ | ОПИСАНИЕ |
---|---|
начальная_позиция | Необязательный. Числовое выражение, которое задает начальную позицию для поиска. Если этот аргумент опущен, поиск начинается с первого знака. Если аргумент начальная_позиция содержит значение Null, возникает ошибка. Если задан аргумент тип_сравнения, аргумент начальная_позиция является обязательным. |
строка_1 | Обязательный. Строковое выражение, по которому выполняется поиск. |
строка_2 | Обязательный. Искомое строковое выражение. |
тип_сравнения | Необязательный. Определяет тип сравнения строк. Если значением аргументатип_сравнения является Null, возникает ошибка. Если аргумент тип_сравненияопущен, тип сравнения определяется параметром Значение Сравнение. Укажите допустимый параметр LCID (LocaleID) для использования правил сравнения, заданных в языковых параметрах. |
Параметры
Аргумент тип_сравнения использует следующие параметры:
КОНСТАНТА | ЗНАЧЕНИЕ | ОПИСАНИЕ |
---|---|---|
vbUseCompareOption | -1 | Выполняется сравнение с помощью параметра инструкцииOption Compare. |
vbBinaryCompare | 0 | Выполняется двоичное сравнение. |
vbTextCompare | 1 | Выполняется текстовое сравнение. |
vbDatabaseCompare | 2 | Только в Microsoft Office Access 2007. Выполняется сравнение на основе сведений из базы данных. |
Возвращаемые значения
ЕСЛИ | ФУНКЦИЕЙ INSTR ВОЗВРАЩАЕТСЯ |
---|---|
строка_1 является пустой | 0 |
значением аргумента строка_1 является Null | Null |
строка_2 является пустой | начальная_позиция |
значением аргумента строка_2 является Null | Null |
строка_2 не найдена | 0 |
строка из аргумента строка_2 найдена в строке из аргументастрока_1 | Позиция найденного соответствия |
начальная_позиция > строка_2 | 0 |
Замечания
Функция InStrB используется с байтовыми данными, содержащимися в строке. Функция InStrB возвращает позицию байта, а не позицию знака первого вхождения одной строки в другую.
Примеры
Использование функции InStr в выражении Каждый раз при использовании выражений можно использовать функцию InStr. Например, если требуется определить позицию первой точки (.) в поле, которое содержит IP-адрес (названное «IPAddress»), можно использовать функцию InStr для его поиска:
InStr(1,[IPAddress],».»)
Функция InStr рассматривает каждое значение в поле «IPAddress» и возвращает позицию первой точки. Следовательно, если значение первого октета IP-адреса равно 10., функция возвращает значение 3.
Можно использовать другие функции, использующие результат функции InStr, для извлечения значения октета IP-адреса, который предшествует первой точке, например:
Left([IPAddress],(InStr(1,[IPAddress],».»)-1))
В этом примере функция InStr(1,[IPAddress],».») возвращает позицию первой точки. В результате вычитания 1 определяется количество знаков, предшествующих первой точке, в данном случае — 2. Затем функция Left извлекает эти символы с левой части поля «IPAddress», возвращая значение 10.
Использование функции InStr в коде Visual Basic для приложений (VBA)
ПРИМЕЧАНИЕ. Приведенные ниже примеры иллюстрируют использование возможностей модуля Visual Basic for Applications (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите пунктСправочник разработчика в раскрывающемся списке рядом с кнопкой Поиск, а затем введите один или несколько ключевых слов в поле поиска.
В данном примере функция InStr используется для получения позиции первого вхождения одной строки в другую.
Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' String to search in. SearchChar = "P" ' Search for "P". ' A textual comparison starting at position 4. Returns 6. MyPos = Instr(4, SearchString, SearchChar, 1) ' A binary comparison starting at position 1. Returns 9. MyPos = Instr(1, SearchString, SearchChar, 0) ' Comparison is binary by default ' (last argument is omitted). MyPos = Instr(SearchString, SearchChar) ' Returns 9. MyPos = Instr(1, SearchString, "W") ' Returns 0.
ccc
String manipulation is a key skill in VBA and other programming languages. Today let’s focus on using string searching functions to extract SubStrings from other strings using the VBA InStr or the VBA InStrRev functions.
The VBA InStr function finds the position of a substring matched within a certain string. Returns 0 if substring not found.
InStr is a very powerful and useful function when having to locate substrings withing another text string.
InStr Example
Let assume a simple text string “Hello There!”. Remember that VBA indexes strings starting at index 1:
'Hi There! '123456789
Find substring “There”:
Debug.Print InStr("Hi There!", "There") 'Result: 4
Find second occurance of character “e” (first “e” is on position 6):
Debug.Print InStr(7, "Hi There!", "There") 'Result: 8
VBA InStrRev
The VBA InStrRev function finds the position of a substring matched within a certain string, starting from the end of the string. The position from the string is counted from the left like for the InStr function. Returns 0 if substring not found.
InStrRev Example
Let assume a simple text string with multiple occurances”Hi There! You There!”. Remember that VBA indexes strings starting at index 1:
Find the last occurance of the substring “There”:
Debug.Print InStrRev("Hi There! You There!", "There") 'Result: 15
Find second last occurance of substring “There”:
Debug.Print InStr("Hi There! You There!", "There", 18) 'Result: 4
Why in the second example this I provide 18 as the position to start from instead of say 14? That’s because looking from the back There starts at position 19. Look at the image below:
InStr Comparison types
There is some confusion with the Comparison Types when dealing with InStr and InStrRev functions. What’s the difference?
vbBinaryCompare
This option compares each character in a string match exactly as according to it’s binary value. What does this translate to? Letter case will be distinguished (small from capital letters). See example below:
Debug.Print InStr(1, "Hi There!", "There", vbBinaryCompare) 'Result: 4 Debug.Print InStr(1, "Hi There!", "there", vbBinaryCompare) 'Result: 0 (not found)
vbTextCompare
This option ignores letter case (small vs. capital letters):
Debug.Print InStr(1, "Hi There!", "There", vbTextCompare) 'Result: 4 Debug.Print InStr(1, "Hi There!", "there", vbTextCompare) 'Result: 4