Vba функция замены символа в строке. Встроенные функции Oracle

Итак, продолжаем наши уроки Паскаль для начинающих. В прошлом уроке мы разобрали , но там мы упомянули про символы, поэтому прежде чем глубоко изучать тип данных , мы узнаем о типе Char. Символьный тип данных Char — тип данных, значениями которого являются одиночные символы. Данный тип может содержать всего один любой символ (Например: «*», «/», «.», «!» и другие). Каждый такой символ занимает 8 бит памяти, всего существует 256 восьмибитовых символов. Все символы, используемые символьным типом Char записаны в таблице символов ASCII (American Standart Code for Information Interchange) или Американский стандарт кода для обмена информацией.

Символьные константы заключаются в апострофы, например ".", "*", "7", "s". Также символьную константу можно записать с помощью символа — «решетки», например #185 — выведет символ под номером 185 из таблицы ASCII (это символ "№").

К символьному типу применимы 5 функций: Ord, Chr, Pred, Succ и Upcase.

Функция Ord преобразовывает символ в её числовой код из таблицы ASCII . Например для символа "№" она возвратит значение 185. Функция Chr обратна функции Ord. Функция Chr преобразует числовой код символа в сам символ, например, если взять числовой код 64, то функция Chr (64) возвратит символ "@".

Пример программы на Паскаль с использованием функции Ord:


Begin //Начало программы

writeln (ord (x)); //Вывод номера в таблице ASCII
end. //Конец программы

Пример программы на Паскаль с использованием функции Chr:

Var x:integer; // Описание переменных (x - целочисленный тип)
Begin //Начало программы
readln (x); //Считывание переменной
writeln (chr (x)); //Вывод символа по номеру в таблице ASCII
end. //Конец программы

Функция Pred возвращает значение предыдущего символа из таблицы ASCII, например для символа "P" (Pred (P)) эта функция возвратит символ "O". Функция Succ обратная функции Pred. Для символа "P" функция Succ (P) возвратит символ "Q", то есть следующий символ из вышеописанной таблицы ASCII.

Пример программы на Паскаль с использованием функций Pred и Succ:

Var x:char; // Описание переменных (x - символьный тип)
Begin //Начало программы
readln (x); //Считывание переменной
writeln (pred (x)); //Вывод предыдущего символа в таблице ASCII
writeln (succ (x)); //Вывод следующего символа в таблице ASCII
end. //Конец программы

Функция UpCase применима только для строчных букв английского алфавита. Данная функция преобразует строчные английские буквы в заглавные.

Пример программы на Паскаль с использованием функции UpCase:

Приложение к уроку - таблицы символов ASCII:

На сегодня урок окончен. Помните, что программирование на паскале просто и является основой для многих языков программирования.

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

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 Категория

Работа со строками

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

Таблица 11.3. Операторы и функции для обработки строк

Не забывайте, что буквальные строковые значения (в отличие от переменных, содержащих строковые значения) должны заключаться в кавычки.

Оператор или функция

Asc (строка)

Числовой код первого символа в строке

Chr (код_символа)

Символ, соответствующий значению параметра код_символа

Filter (массив_источник, эталон, включает, метод сравнения)

Функция (только в VBA6)

Массив, состоящий только из тех строк из массива источника, которые содержат эталон. Аргумент массив_истчник должен быть массивом строковых значений. Если необязательный аргумент включает равен False, то функция возвратит только строки, которые не включают эталон

Format (строка)

См. выше раздел "Форматирование данных"

Hex (число)

InStr (старт, строка1, строка2)

Число, соответствующее позиции строки 2 в строке 1; поиск начинается с позиции старт, этот аргумент не обязателен

InStrRev (строка 1, строка2, старт)

функция (только в VBA6)

Число, соответствующее позиции строки 2 в строке 1, считая с правого края строки 1; поиск начинается с позиции старт, этот аргумент не обязателен

Join (массив_строк, разделитель)

функция (только B VBA6)

Одна строка, комбинирующая все строки из массив_строк, который должен быть массивом строковых данных. По умолчанию Join вставляет пробел между строками, взятыми из массива строк, но можно задать и другой символ разделителя (символ необходимо заключить в кавычки)

Left (строка, длина)

Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с левого края последней

Len (строка)

Число символов в строке

LCase (строка)

Копия строки, представленная символами нижнего регистра

LSet строковая_

переменная = строка

Оператор

Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки начиная с левого края переменной

LTrim (строка)

Новая строка, содержащая копию данной строки без пробелов в начале

Mid(строка, старт, длина)

Новая строка заданной длины из символов данной строки, взятых подряд, начиная с позиции старт

Mid(строковая переменная, старт, длина) = строка

Оператор

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

Replace(строка, найти, заменить, старт, число_замен, метод_сравнения)

Функция (только в VBA6)

Новая строка, получаемая в результате замены в заданной строке текста найти текстом заменить. Аргументы старт, число_замен и метод_сравнения не обязательны. Используйте число_замен, чтобы указать, сколько замен следует сделать, если текст найти встречается несколько раз (по умолчанию заменяются все случаи появления текста найти в строке)

Right (строка, длина)

Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с правого края последней

RSet строковая_ переменсная = строка

Оператор

Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки с правого края переменной

RTrim (строка)

Новая строка, содержащая копию данной строки без пробелов в конце

Space (число)

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

Split(строка, разделитель, предел, метод сравнения)

Функция (только B VBA6)

Массив строк, полученный в результате разделения в заданной строки. По умолчанию оригинальная строка разделяется по пробелам, но можно задать разделитель, отличный от пробела (для задания разделителя используйте символ, заключенный в кавычки). Необязательный аргумент предел задает максимальное число строк в возвращаемом массиве

StrComp(строка1, строка2)

О, если две строки равны; -1,если строка 1 меньше, чем строка 2; 1, если строка! больше, чем строка 2 (о сравнении строк говорилось в главе 9)

StrConv(строка, метод перевода)

Новая строка, созданная на основе заданной указанным методом перевода

String(число, символ)

Строка, состоящая из заданного числа повторяющихся символов

StrReverse (строка)

Функция(только VBA 6)

Trim(строка)

Новая строка, содержащая копию данной строки без пробелов в начале и конце

UCase(строка)

Копия строки, представленная символами верхнего регистра

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

Представим, например, что у вас есть список полных имен в виде следующих строк:

"Самодур, Иван Акакиевич, акад."

"Невеселый, Степан Федорович, проф."

"Шутник, Василий Степанович, канд."

(такой список должен храниться в массиве строк; массивы будут рассматриваться в главе 13).

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

Но если предположить, что оригинальное имя содержится в переменной str-Старая, то поможет следующий трюк:

strНовая = Left(strСтарая, Len(strСтарая) - 7)

Если бы VBA читал книги вместо программного кода, я объяснил бы ему, что эти действия можно выполнить следующим образом.

1. Сначала вызывается функция Len, которая вычисляет длину оригинальной строки.

2. Из результата, полученного в п. 1, вычитается 7, поскольку каждое из званий занимает семь символов в конце строки (включая запятую и пробел).

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

3. Вызывается функция Left, использующая вычисленную длину в качестве значения второго аргумента.

Функция Left читает столько символов, сколько задано вторым аргументом, из строки, указанной первым аргументом, возвращая только эти прочитанные символы.

4. Новая, более короткая строка, возвращенная функцией Left, присваивается переменной

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

strMMfl = Mid (strHoBafl, InStr (str-Новая, ",") + 2)

Функция Mid извлекает символы из любого места в строке, которую вы укажете в виде аргумента. Второй же аргумент этой функции говорит, с какого места в этой строке следует начать извлечение символов. В данном случае этот аргумент представляет собой выражение, состоящее из функции InStr плюс 2.

Функция InStr ищет в заданной строке (первый аргумент) другую строку (второй аргумент).

В данном случае второй аргумент - это запятая, которая в списке следует за фамилией. Значение, которое возвращает InStr, соответствует номеру позиции в первой строке, где встречается вторая строка, - теперь вы знаете, где заканчивается фамилия.

К значению, возвращенному функцией InStr, добавляется 2, чтобы пропустить запятую и следующий за ней пробел и найти позицию, с которой начинается имя. Теперь функция Mid извлечет символы, начиная с этого места и до конца строки (поскольку не указан третий, необязательный аргумент длина).

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

В табл. 11.4 представлено описание таких команд. У некоторых функций в этой таблице опущены необязательные аргументы - вы всегда сможете уточнить детали по справке VBA.

После таблицы несколько наиболее важных команд, относящихся к датам и времени, рассматриваются подробнее.

Чтобы воспользоваться предоставляемым здесь материалом, вы должны ясно представлять, как VBA обрабатывает значения дат и времени и как работать с переменными, хранящими даты (см. главу 7).

Таблица 11.4. Операторы и функции для работы с датами и временем

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

Выполняемые действия (для операторов) или возвращаемые значения (для функций)

Текущая системная дата

Оператор

Устанавливает системную дату по значению аргумента дата

DateAdd (интервал, число, дата)

Новое значение даты, равное сумме исходной даты и казенного числа заданных интервалов даты или времени

DateDiff (интервал, дата1, дата2)

Число указанных интервалов даты или времени, помещающихся в отрезке времени между датами 1 и 2

DatePart (интервал, дата)

Целое значение, представляющее указанный интервал даты

DateSerial (год, месяц, день)

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

DateValue (строка с датой)

Значение даты, соответствующее строке с датой

Целое значение, соответствующее дню месяца, заданного датой

Hour (время)

Целое значение между 0 и 23 включительно, представляющее час суток, заданный указанным временем

Minute (время)

Целое значение между 0 и 59 включительно, представляющее минуты, заданные указанным временем

Month (дата)

Целое значение между 0 и 12 включительно, представляющее месяц, заданный указанной датой

MonthName (месяц, сократить)

Функция (только в VBA 6)

Значение, представляющее текущие системные дату и время

Second(время)

Целое значение между 0 и 59 включительно, представляющее секунды, заданные указанным временем

Значение, представляющее текущее системное время

Time (время)

Оператор

Устанавливает системное время по значению аргумента время

Число секунд, прошедших с полуночи

TimeSerial (часы, минуты, секунды)

Значение времени, заданное аргументами часы, минуты, секунды

TimeValue (строка_с_временем)

Значение времени, соответствующее строке со временем (вся информация о дате будет отброшена)

Weekday (дата)

Целое число, представляющее день недели, соответствующий указанной дате

(день_не дели, сократить, первый день недели)

VBA 6) быть целым числом от 1 до 7. Если необязательный аргумент с о к р а т и т ь указан и равен True, то возвращаемая строка будет содержать сокращенное название дня недели. Нумерацию дней недели можно менять, задавая необязательный аргумент первый _ день _ недели равным константам типа vbMonday, vbTuesday и т.д.

Целое число, представляющее год, соответствующий указанной дате

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

Функция Now возвращает текущие системные дату и время в формате переменной типа Data, как, например, в случае datЛовиМомент = Now.

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

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

datЭтоMoeBpeмя = Time " функция Time возвращает значение

" системного времени

Time (113:15 АМ#) " оператор Time устанавливает системное время

Подобным образом работают и различаются соответствующие функции Date и оператор Date.

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

ASC (строковое значение) – применяется для получения числового ASCII кода заданного символа. В качестве параметра можно передать как целую строку (проверка произойдет для первого символа в строке), так и один символ или пробел.

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

InStr (строка1, строка2, [старт]) – предназначена для поиска последовательности знаков (строка2) в заданной строке (строка1). Можно также задать начальную позицию для поиска вхождения (необязательный параметр “старт”).

InStrRev (строка1, строка2, [старт]) – аналог предыдущей функции, но поиск происходит в обратном порядке.

Left (строка, длина) – позволяет вернуть заданное количество знаков (параметр “длина”) для выбранной строки (параметр “ строка ”), начиная слева.

Right (строка, длина) – позволяет вернуть заданное количество знаков для выбранной строки, начиная справа.

Mid (строка, длина, старт) – позволяет вернуть заданное количество знаков (параметр “длина”) для выбранной строки, начиная с заданной позиции (параметр “старт”).

Len (строка) – определяет численное количество символов в строке.

LCase (строка) – предназначена для преобразования всех символов в переданной строке в нижний регистр.

UCase (строка) – предназначена для преобразования всех символов в переданной строке в верхний регистр.

LSet (строка, длина) – заполняет содержимое переменной символами из другой переменной начиная слева, длина не изменяется, лишние знаки будут обрезаны, а вместо недостающих, будут подставляться пробелы.

RSet (строка, длина) – логика работы та же, что и для предыдущей vba функции работы со строками, но процесс происходит справа.

LTrim (строка) – удалить пробелы слева в строке

RTrim (строка) – удалить пробелы справа в строке

Trim (строка) – удалить пробелы справа и слева в строке

Replace () – замена в строке одних символов на другие

Space (количество_пробелов) – формирование строки из заданного количества пробелов

String (количество, символ) – формирование строки из заданного количества прописанных символов

Spc () – применяется для формирования вывода данных в консольном окне командной строки. Происходит размножение пробелов, учитывая ширину командной строки.

StrComp (строка1, строка2) – сравнение двух строк, вернет 0 при равенстве, и -1 в противном случае.

StrConv (строка, метод, ) – данная функция vba является универсальной, так как позволяет преобразовать заданную строку в различные вариации (верхний и нижний регистр, кодировка, перевод байт).

  • Строка – собственно, строковое значение, над которым нужно провести преобразование.
  • Метод – задает метод преобразования, данный параметр может принимать следующие значения:
  1. vbUpperCase – перевод в верхний регистр, значение 1
  2. vbLowerCase – перевод в нижний регистр, значение 2
  3. vbPropperCase – перевод первых символов всех слов в верхний регистр, а остальные символы – в нижний, значение 3.
  4. vbWide – применяется для кодировки восточных языков. Перевод символов в один байт с двухбайтовых. Значение 4.
  5. vbNarrow – аналог предыдущему параметру, но тут происходит перевод двух байт в один, значение 8.
  6. vbKatakana – происходит преобразование символов алфавита Хирагана в символы для алфавита Катана, применим для японского языка, значение 16.
  7. vbHiragana – аналог предыдущего параметра, но тут происходит преобразования вида Катана в Хирагана, значение 32. VBA строковые функции
  8. vbUnicode – перевод заданной строки в Unicode кодировку, значение 64.
  9. vbFormatUnicode – перевод из кодировки Unicode в стандартную, значение 128.
  • LCID – параметр не является обязательным, (vba строковые функции) он задает идентификатор региональных настроек. По умолчанию значение LocaleId, то есть, то значение, что установлено в панели управления.

StrReverse (строка) – инвертировать расположение знаков в строке, проще говоря, “отзеркаливает”.