Немного о компьютере

Excel vba функции работы со строками. Функции VBA для работы с текстом. Сравнение и поиск строк

Chr

Функция Chr

Chr(CharCode)
Chr$(CharCode)
ChrB(CharCode)
ChrW(CharCode)

Функция Chr (Ch aracter )позволяет получить символ по значению его числового кода ANSI или Unicode

Возвращаемое значение

Функции Chr , ChrB , ChrW возвращают значение субтипа String типа Variant , содержащее символ, соответствующий указанному коду символа ANSI или Unicode. Функции Chr$ , ChrB$ , ChrW$ возвращают соответственно значение типа String

Примечание

Chr и Chr$ возвращают символ по его кодировке в стандарте ANSI
ChrB и ChrB$ возвращают однобайтовую строку
ChrW возвращает символ Unicode, однако в системах, не поддерживающих Unicode, ее поведение аналогично Chr
Использование в параметре CharCode значения больше, чем 255, генерирует ошибки стадии выполнения 5: Invalid procedure call or argument или 6: Overflow

Параметры CharCode Обязательный аргумент является значением типа Long , определяющим символ. Обычно, функция Chr применяется при вставке в текстовые строки непечатных символов(возврат каретки, перевод строки, табулятор и т.д.). Коды 0-31 соответствуют стандартным управляющим символам ASCII. Например, Chr (10) возвращает символ перевода строки Пример Dim retval retval = Chr (65) Debug.Print retval " возвращается A Категория

(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
1 2 3 4 5 6 7 8 Function Change(txt As String, What As String, Optional Pos As Long) Dim n As Long If Pos = 0 Then Pos = Len(txt) If Pos <> -1 Then n = InStrRev(txt, What, Pos) Change = Change(txt, What, IIf(n = 1, -1, n - 1)) + Mid$(txt, n + 1, Pos - n) End If End Function

Вариант

А ещё есть 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
1 2 3 4 5 6 Dim m() As String If InStr(1, Cells(1, 2).Value, ",") > 0 Then m = Split(Replace(Cells(1, 2).Value, " ", ""), ",") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If

А потом в цикле по всем словам ищешь(опять же в цикле. во вложенном) Добавлено через 23 минуты

Код Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Option Compare Text Option Explicit Sub QWERT() Dim R, N, K Dim m() As String If InStr(1, Cells(1, 2).Value, ",") > 0 Then m = Split(Replace(Cells(1, 2).Value, " ", ""), ",") Else ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If For R = 0 To UBound(m) N = 1 If InStr(1, Cells(1, 1).Value, m(R)) > 0 Then K = InStr(N, Cells(1, 1).Value, m(R)) Do ПОКРАСИТЬ K, Len(m(R)) N = K + Len(m(R)) K = InStr(N, Cells(1, 1).Value, m(R)) Loop While K > 0 End If Next R End Sub Sub ПОКРАСИТЬ(ST, LN) With Cells(1, 1).Characters(Start:=ST, Length:=LN).Font .Color = RGB(0, 0, 255) .Bold = True End With End Sub

Добавлено через 15 минут А вот так будет искать по началу слова а выделять всё слово

Код Visual Basic
1 2 3 4 5 6 7 8 9 10 11 Sub ПОКРАСИТЬ(ST, LN) LN = LN - 1 Do LN = LN + 1 Loop While VBA.Mid(Cells(1, 1).Value, ST + LN, 1) <> " " With Cells(1, 1).Characters(Start:=ST, Length:=LN).Font .Color = RGB(0, 0, 255) .Bold = True End With End Sub

Можно сделать что бы искало и не с начала слова, а по части слова. — добавить ещё один цикл Do-Loop. Только смещать начало(ST) влево до пробела (http://www.cyberforum.ru/vba/thread567588.html)

How to: Match a String against a Pattern (Visual Basic)

Проверка соответствия строки шаблону String Data Type (Visual Basic) — оператор Like (Visual Basic) . левый операнд оператора Like- строковое выражение, а правый — строка шаблона Like возвращает значение типа Boolean

Проверка символа

? — один любой символ

  • myString состоит из символа W, за которым следуют 2 любых символа

    Dim sMatch As Boolean = myString Like "W??"

Любой символ из списка и диапазона

Любой символ и затем один из символов A, C или E

    Dim sMatch As Boolean = myString Like "?" учитывается регистр символов

  • myString = символы num и затем один символ из диапазона: i, j, k, l, m или n:

    Dim sMatch As Boolean = myString Like "num" учитывается регистр символов

Like работает с как с о строковым массивом нулевой длины string («»). позволяет проверить, что строка является пустой

Символ из списка или отсутствие символа

  1. Оператор Like используется дважды, и результаты объединяются с помощью оператора Or Operator (Visual Basic) или OrElse Operator (Visual Basic) .
  2. В шаблон первого оператора вставьте список символов в квадратных скобках ().
  3. В шаблон второго оператора в место проверки не помещайте ничегоПример: проверка семизначного номера телефона phoneNum, который должен содержать точно три цифры, после которых следует пробел, дефис точка или никакого символа и затем четыре цифры. (первые три цифры могут быть не отделены от четырех последних — «никакого символа») Null , возникает ошибка. Если задан аргумент тип_сравнения , аргумент начальная_позиция является обязательным. строка_1 Обязательный. Строковое выражение , по которому выполняется поиск. строка_2 Обязательный. Искомое строковое выражение. тип_сравнения Необязательный. Определяет тип сравнения строк . Если значением аргументатип_сравнения является Null, возникает ошибка. Если аргумент тип_сравнения опущен, тип сравнения определяется параметром Значение Ср авнение . Укажите допустимый параметр LCID (LocaleID) для использования правил сравнения, заданных в языковых параметрах.

    Параметры

    Аргумент тип_сравнения использует следующие параметры:

    Возвращаемые значения

    Замечания

    Функция InStrB используется с байтовыми данными, содержащимися в строке. Функция InStrB возвращает позицию байта, а не позицию знака первого вхождения одной строки в другую.

    Примеры

    Использование функции InStr в выражении Каждый раз при использовании выражений можно использовать функцию InStr . Например, если требуется определить позицию первой точки (. ) в поле, которое содержит IP-адрес (названное «IPAddress»), можно использовать функцию InStr для его поиска:

    InStr(1,,».»)

    Функция InStr рассматривает каждое значение в поле «IPAddress» и возвращает позицию первой точки. Следовательно, если значение первого октета IP-адреса равно 10. , функция возвращает значение 3.

    Можно использовать другие функции, использующие результат функции InStr , для извлечения значения октета IP-адреса, который предшествует первой точке, например:

    Left(,(InStr(1,,».»)-1))

    В этом примере функция InStr(1,,».») возвращает позицию первой точки. В результате вычитания 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.

InStr

Функция InStr

InStr(String1,String2[,Compare])
InStrB(String1,String2[,Compare])

Функция InStr (In Str ing) служит для поиска номера символа(номера байта для InStrB ), с которого начинается в заданной строке образец поиска. Поиск идет от указанной позиции слева направо. Поиск вхождения одной строки в другую весьма часто используемая операция. Нумерация символов всегда начинается с единицы

Примечание

В функции InStr при очень длинных строках при текстовом методе сравнения, возможно возникновение ошибки времени исполнения Stack overflow. Избежать этой ошибки можно, переведя исходную строку и образец в один регистр и перейдя на бинарное сравнение

Возвращаемое значение

Возвращает значение типа Variant(Long) , указывающее позицию первого появления одной строки внутри другой

Перечень возвращаемых значений
Вариант Значение, возвращаемое функцией InStr
String1 имеет нулевую длину 0
String1 имеет значение Null Null
String2 имеет нулевую длину Start
String2 имеет значение Null Null
String2 не найдена 0
String2 найдена внутри String1 Позиция, в которой обнаружено совпадение
Start > String2 0

Параметры
Элемент Описание
Start Необязательный. Числовое выражение, которое задает первую позицию для каждого поиска. Если параметр опущен, поиск начинается с позиции первого символа. В том случае, когда значение параметра Start Параметр Start является обязательным, если задан параметр Compare
String1 Обязательный. Строковое выражение,в котором ведется поиск
String2 Обязательный. Отыскиваемое строковое выражение
Compare Необязательный. Задает тип сравнения для строк. Если значение параметра Compare равно Null, возникает ошибка. В том случае, когда параметр Compare опущен,тип сравнения определяется установками оператора Option Compare

Установки

Для параметра Compare используются следующие установки:


Пример " В данном примере функция InStr " возвращает позицию первого появления " одной строки внутри другой строки Dim SearchString, SearchChar, MyPos SearchString ="Русский_Проект" " Исходная строка SearchChar = "Р" " Следует найти "P" " Посимвольное сравнение, начиная с позиции 4. Возвращает 10 MyPos = Instr (4, SearchString, SearchChar, vbTextCompare) " Двоичное сравнение, начиная с позиции 1. Возвращает 1 MyPos = Instr (1, SearchString, SearchChar, 0) " Сравнение является двоичным по умолчанию (последний аргумент опущен) MyPos = Instr (SearchString, SearchChar) " Возвращает 1 MyPos = Instr (1, SearchString, "W") " Возвращает 0 Категория
  • 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)

    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" )

    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)

    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 ().

Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать "неполадки" в работе программы.

В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim . Следует иметь ввиду, что эти функции на самом деле не изменяют исходную строку, а возвращают копию строки с удаленными лишними пробелами.

Определение длины строки

Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len . В приведенным ниже листинге между знаками круглых скобок и словом присутствует по два пробела.



Следует быть внимательными со строками фиксированной длины. Поскольку строка фиксированной длины имеет всегда одну и ту же длину, функция Len всегда возвращает объявленную длину строки, независимо от фактической длины строки. Например, если в строковой переменной фиксированной длины StrokeName, имеющей длину 15 символов, фактически находится слово "солнце", то функция Len(StrokeName) возвратит результат 15. Чтобы в таком случае узнать фактическую длину строки (в нашем случае - 6), необходимо использовать следующую комбинацию функций: Len(Trim(StrokeName)) .

Сравнение и поиск строк

В VBA имеются две функции, помогающих сравнивать строки: StrComp, InStr .

Функция StrComp

Синтаксис


StrComp (String1, String2 [, Compare])


String1, String2 - любые два строковых выражения, которые необходимо сравнивать.

При выполнении StrComp возвращается одно из следующих значений:

  • -1, если String1 меньше String2;
  • 0, если String1 и String2 равны;
  • 1, если String1 больше String2.


В вышеприведенном листинге в текстовом режиме сравниваются две строки: "Строка по умолчанию" и " Строка по умолчанию". Результат сравнения = 1, т.е. "Строка по умолчанию" больше, чем " Строка по умолчанию".

Поэкспериментируйте с разнообразными строками для лучшего понимания работы функции StrComp.

Функция InStr

Функция InStr дает возможность определить, содержит ли одна строка другую строку.

Синтаксис


StrComp ( String1, String2 [, Compare])


String1, String2 - любые допустимые строковые выражения. Функция проверяет содержится ли String1 в String2.

Compare - необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare):

  • vbBinaryCompare - бинарное сравнение двух строк;
  • vbTextCompare - текстовое сравнение двух строк;
  • vbDatabaseCompare - используется только в Microsoft Access.

Start - необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка.


InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. Если InStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null, то функция также возвращает Null.



Разбиение строки

Иногда возникает необходимость разбиения строки на составляющие части. В VBA эту задачу решают три функции: Left, Right, Mid .

Функция Left

Синтаксис


Left (String, Length)


Функция возвращает копию String, начиная с первого символа и включая количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается все строковое выражение String.

Функция Right

Синтаксис


Right (String, Length)


String - любое допустимое строковое выражение.

Length - любое численное значение.


Функция возвращает копию String, начиная с последнего символа и включая справа налево количество символов, заданных с помощью Length. Если Length является числом, большим, чем фактическая длина String, то возвращается все строковое выражение String. Функция Right всегда копирует символы от конца строки к ее началу.

Функция Mid

Синтаксис


Mid (String, Start, [, Length])


String - любое допустимое строковое выражение.

Length, Start - любые численные значения.


Функция Mid возвращает копию String, начиная с положения символа в String, задаваемого с помощью аргумента Start . Необязательный аргумент Length определяет количество копируемых в Mid символов из String. Если Start содержит большее число, чем фактическая длина String, то возвращается пустая строка.



Символы, которые нельзя ввести с клавиатуры

Зачастую случается, что надо ввести какой-либо символ, для которого отсутствует клавиша на клавиатуре (например, символ копирайта). Другая ситуация - когда надо в строку включить служебный символ VBA (самый распространенный случай - включение двойных кавычек).

Чтобы включить в строку символы, которые невозможно ввести с клавиатуры, или которые имеют особое значение для VBA, используется функция Chr .

Синтаксис


Chr (Charcode)


Charcode - любое численное выражение, являющееся допустимым кодом для набора символов, используемого компьютером. Должен быть целым числом от 0 до 255.

Функция Chr принимает код отдельного символа в качестве аргумента и возвращает строку, содержащую соответствующий этому коду символ. Данная функция использована в вышеприведенных листингах для перевода строки при выводе сообщения на экран Chr (13).


Поскольку символы, используемые для начала новой строки, являются очень важными при форматировании сообщений и других строковых данных, которыми манипулируют VBA-процедуры, имеется несколько предопределенных констант для этих символов, чтобы не было необходимости использовать функцию Chr:

  • vbCr - символ возврата каретки. Эквивалент Chr(13)
  • vbLf - символ смещения на одну строку. Эквивалент Chr(10)
  • vbCrLf - символ возврата каретки+смещения на одну строку. Эквивалент Chr(13)+ Chr(10)
  • vbTab - символ табуляции. Эквивалент Chr(9)

Для просмотра списка код-символ надо открыть справочную систему VBA и по запросу "character sets" будет представлена соответствующая таблица.



Форматирование значений данных

Очень часто формат данных на выходе программы по тем или иным причинам нас не совсем устраивает. Эту задачу решает функция Format .

VBA-функция Format идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.

Синтаксис


Format (Expression [, Format[, Firstdayofweek [, Firstweekofyear]]])


Expression - любое допустимое выражение (обязательный аргумент).

Format - допустимое выражение именованного или определенного пользователем формата.

Firstdayofweek - константа, которая определяет первый день недели.

Firstweekofyear - константа, которая определяет первую неделю года.


Чтобы использовать функцию Format, надо либо задать предопределенный формат , либо создать образ определенного формата , используя символы-заполнители.


Именованные форматы для использования с функцией Format

Именованный формат Действие
General Date Форматирует информацию о дате и времени в последовательное число даты, используя установки формата даты и времени для данного компьютера.
Long Date Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Long-формата даты.
Medium Date Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Medium-формата даты.
Short Date Форматирует в последовательной дате только часть, содержащую дату, используя установки компьютера для Short-формата даты.
Long Time Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Long-формата времени.
Medium Time Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Medium -формата времени.
Short Time Форматирует в последовательной дате только часть, содержащую время, используя установки компьютера для Short -формата времени.
General Number Форматирует число в строку без каких-либо особых символов.
Currency Форматирует число с символом денежной единицы, разделителем тысяч и только двумя десятичными разрядами.
Fixed Форматирует число так, чтобы всегда была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него.
Standart Форматирует число с разделителем тысяч так, чтобы была, по крайней мере, одна цифра перед десятичным разделителем и, по крайней мере, две цифры после него.
Percent Форматирует число как процентное отношение, умножая его на 100 и добавляя символ процента.
Scientific Форматирует число в обычный экспоненциальный формат.
Yes/No Возвращается строка "Да" если форматируемое число ненулевое, иначе - "Нет".
True/False Возвращается строка "Истина" если форматируемое число ненулевое, иначе - "Ложь".
On/Off Возвращается строка "Вкл" если форматируемое число ненулевое, иначе - "Выкл".

Символы-заполнители для создания пользовательских форматов

Символ-заполнитель Действие (в качестве примера используется число 1234.45)
0 Цифровой символ, отображает цифру, если таковая находится в этой позиции, или 0, если - нет. Можно использовать символ 0 для отображения начальных нулей для целых чисел и конечных нулей в десятичных дробях: 00000.000 отображает 01234.450
# Цифровой символ, отображает цифру, если таковая находится в этой позиции, иначе - не отображает ничего. Символ-заполнитель # эквивалентен 0, кроме того, что начальные и конечные нули не отображаются: #####.### отображает 1234.45
$ Отображает знак доллара: $###,###.00 отображает $1 234,45
. Десятичный символ-заполнитель, отображает десятичную точку в обозначенной позиции в строке символов-заполнителей 0: #.##.## отображает 1234.45
% Символ процента, умножает значение на 100 и добавляет знак процента в позицию, указанную символами-заполнителями 0:#.#0.00% отображает число 0.12345 как 12.35% (происходит округление)
, Разделитель тысяч, добавляет запятые как разделители тысяч в строках символов-заполнителей 0 и #: ###,###,###.00 отображает 1 234,45
E- e- Отображает значение в экспоненциальном формате со знаком порядка только для отрицательных значений: #.####E-00 отображает 1.23445Е03
E+ e+ Отображает значение в экспоненциальном формате со знаком порядка как для отрицательных, так и для положительных значений: #.####E+00 отображает 1.23445Е+03
/ Отделяет день, месяц и год для форматирования значений дат.
m Указывает, как отображать месяцы в датах: m отображает 1, mm - 01, mmm - янв, mmmm - Январь
d Указывает, как отображать дни в датах: d отображает 1, dd - 01, ddd - Вс, dddd - воскресенье
y Отображает день года как число от 1 до 366
yy Указывает, как отображать годы в датах: yy - 66, yyyy - 1966
q Отображает квартал года как число от 1 до 4
w Отображает день недели как число (1 - воскресенье)
ww Отображает неделю года как число от 1 до 54
: Отделяет часы, минуты и секунды в значениях формата времени: hh:mm:ss - 01:01:01, h:m:s - 1:1:1
h Указывает, как отображать часы: hh - 01, h - 1
m Указывает, как отображать минуты: mm - 01, m - 1
s Указывает, как отображать секунды: ss - 01, s - 1
AM/PM Отображает время в 12-часовом формате времени с добавленными АМ или РМ
@ Символьный заполнитель, отображает пробел, если не имеется соответствующего символа в форматируемой строке.
Отображает все символы в верхнем регистре.
> Отображает все символы в нижнем регистре.

Похожие публикации