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

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

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

1) Функция определения длины строки LENGTH(строка), возвращает количество символов в строке, включая концевые пробелы.

SELECT LENGTH(‘string ’) FROM DUAL вернет значение 7.

2) Функции преобразования регистров символов UPPER(строка), LOWER(строка), INITCAP(строка). Для преобразования символов к верхнему регистру используется функция UPPER().

SELECT UPPER(‘string’) FROM DUAL вернет STRING.

Если необходимо преобразовать символы строки к нижнему регистру используется функция LOWER().

SELECT LOWER(‘STrinG’) FROM DUAL вернет string.

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

SELECT INITCAP(‘string1 string2’) FROM DUAL вернет строку String1 String2.

3) Функции для обрезания начальных и концевых пробелов LTRIM(строка), RTRIM(строка), TRIM(строка). Соответственно первая функция обрезает все начальные пробелы строки, вторая – все концевые, а третья все начальные и концевые.

SELECT LTRIM(‘ str1’) FROM DUAL вернет строку str1,
SELECT RTRIM(‘str2 ’) FROM DUAL вернет строку str2,
SELECT TRIM(‘ str3 ’) FROM DUAL вернет строку str3.

4) Функция замены части строки другой строкой REPLACE(исходная_строка, заменяемая_подстрока, заменяющая_подстрока). Для большей ясности рассмотрим пример, в некотором текстовом поле таблицы хранится число. Причем символ-разделитель между целой и дробной частью в некоторых полях «.», а нам для дальнейшей обработки данных нужно, чтобы он во всех полях должен быть «,». Для этого воспользуемся функцией REPLACE следующим образом. REPLACE(field1, ’.’, ’,’) и все символы «.» в поле field будут заменены на символ «,».

SELECT REPLACE(‘My_string’,’_’,’@’) FROM DUAL вернет строку My@string.

5) Функции преобразования данных к другим типам данных. TO_CHAR(число) преобразует число в текст. TO_NUMBER(строка) преобразует текст в число. TO_DATE(строка, формат_даты) преобразует строку в дату определенного формата.

SELECT TO_CHAR(123) FROM DUAL вернет строку 123,
SELECT TO_NUMBER(‘12345’) FROM DUAL вернет число 12345,
SELECT TO_DATE(’01.01.2010’,’dd.mon.yyyy’) FROM DUAL вернет дату 01.JAN.2010.

6) Функция определения вхождения подстроки в строку INSTR(исходная_строка, подстрока, номер_символа). Даная функция позволяет определять номер символа в исходной строке с которого начинается искомая подстрока (если такая есть). Иначе возвращается 0. Например нам нужно определить все должности в таблице Table1, в наименовании которых встречается подстрока «менеджер». Для этого вполне подойдет следующий оператор

SELECT * FROM TABLE1 WHERE INSTR(POST, ‘менеджер’, 1) > 0.

То есть оператор SELECT выведет только те записи из таблицы TABLE1 где искомая подстрока «менеджер» будет найдена. Причем поиск будет осуществляться с первого символа. Если поиск нужно осуществлять с другой позиции, то номер символа для начала поиска указывается в третьем параметре.

SELECT INSTR(‘Small string’, ‘string’, 1) FROM DUAL вернет значение 7,
SELECT INSTR(‘Small string’, ‘String’, 1) FROM DUAL вернет значение 0.

7) Функция выделения в исходной строке подстроки SUBSTR(исходная_строка, номер_начального_символа, количество_символов). Рассмотрим такой пример, в пользовательской таблице хранится адрес в виде наименование населенного пункта, название улицы, номер дома. Причем мы точно знаем, что для наименования населенного пункта отводится строго 20 символов (если наименовании населенного пункта меньше чем 20 символов, то остальная часть заполняется пробелами), для наименования улицы 30 символов, для номера дома 3 символа. Далее нам необходимо перенести все адреса из нашей таблицы в другую и при этом все 3 компонента адреса должны быть в разных полях. Для выделения компонент адреса применим функцию SUBSTR().

SELECT SUBSTR(TABLE_1.ADDRESS, 1, 20) CITY, SUBSTR(TABLE_1.ADDRESS, 21, 30) STREET, SUBSTR(TABLE_1.ADDRESS, 52, 3) TOWN FROM TABLE_1

Конечно для переноса данных необходимо воспользоваться оператором INSERT, но для понимания работы функции SUBSTR вполне подойдет рассмотренный пример.
SELECT SUBSTR(‘My_string’, 4, 3) FROM DUAL вернет строку str.

Рассмотренные выше функции можно использовать во входных параметрах. Так если нам нужно выделить все символы, после какого-то определенного, то в функцию SUBSTR можно передать номер искомого символа из функции INSTR. Например если нужно перенести все символы из поля таблицы, которые расположены после «,» то можно использовать такую конструкцию
SELECT SUBSTR(My_string, INSTR(My_string, ‘,’, 1), LENGTH(My_string)- INSTR(My_string, ‘,’, 1)+1) FROM DUAL.
Для определения начального символа мы вызываем функцию INSTR(), которая вернет номер символа первого вхождения подстрок «,». Далее мы определяем количество символов до конца строки как разницу длины строки и номера первого вхождения подстроки.

8) Для определения кода символа используется функция ASCII(строка), которая возвращает код 1 символа строки. Например

SELECT ASCII(W) FROM DUAL вернет значение 87.

9) Обратная функция преобразования кода символа в символ CHR(число).

SELECT CHR(87) FROM DUAL вернет символ W.

Функции для работы с числами в Oracle.

В СУБД Oracle имеется ряд функций для работы с числами. К ним относятся функции возведение числа в степень POWER(), округление ROUND() и т. д.

1) Функция ABS(число) возвращает абсолютное значение аргумента.
SELECT ABS(-3) FROM DUAL вернет значение 3.

2) Функция CEIL(число) возвращает наименьшее целое, большее или равное переданному параметру.
SELECT CEIL(4.5) FROM DUAL вернет значение 5.

3) Функция FLOOR(число) возвращает наибольшее целое, меньшее или равное переданному параметру.
SELECT FLOOR(3.8) FROM DUAL вернет значение 3.

4) Функция MOD(число_1, число_2) возвращает остаток от деления первого параметра на второй.
SELECT MOD(5, 3) FROM DUAL вернет значение 2. Примечание. Если второй параметр равен 0, то функция возвращает первый параметр.

5) Функция округления ROUND(число_1, число_2). Округляет первый переданный параметр до количества разрядов, переданного во втором параметре. Если второй параметр не указан, то он принимается равным 0, то есть округление производится до целого значения. Примеры
SELECT ROUND(101.34) FROM DUAL вернет значение 101,
SELECT ROUND(100.1268, 2) FROM DUAL вернет значение 100.13
SELECT ROUND(1234000.3254, -2) FROM DUAL вернет значение 1234000,
SELECT ROUND(-100.122, 2) FROM DUAL вернет значение -100.12.

6) Функция усечения значения TRUNC(число_1, число_2). Возвращает усеченное значение первого параметра до количества десятичных разрядов, указанного во втором параметре. Примеры
SELECT TRUNC(150.58) FROM DUAL вернет значение 150
SELECT TRUNC(235.4587, 2) FROM DUAL вернет значение 235.45
SELECT TRUNC(101.23, -1) FROM DUAL вернет значение 100

7) В СУБД Oracle имеется ряд тригонометрических функций SIN(число), COS(число), TAN(число) и обратные им ACOS(число), ASIN(число), ATAN(число). Они возвращают значение соответствующей названию тригонометрической функции. Для прямых функции параметром является значение угла в радианах, а для обратных – значение функции. Примеры
SELECT COS(0.5) FROM DUAL вернет значение 0.877582561890373
SELECT SIN(0.5) FROM DUAL вернет значение 0.479425538604203
SELECT TAN(0.5) FROM DUAL вернет значение 0.546302489843791
SELECT ACOS(0.5) FROM DUAL вернет значение 1.0471975511966
SELECT ASIN(0.5) FROM DUAL вернет значение 0.523598775598299
SELECT ATAN(0.5) FROM DUAL вернет значение 0.463647609000806

8) Гиперболические функции. SINH(число),
COSH(число), TANH(число). SINH() возвращает гиперболический синус переданного параметра, COSH() возвращает гиперболический косинус переданного параметра, TANH() возвращает гиперболический тангенс переданного параметра. Примеры
SELECT COSH(0.5) FROM DUAL вернет значение 1.12762596520638
SELECT SINH(0.5) FROM DUAL вернет значение 0.521095305493747 SELECT TANH(0.5) FROM DUAL вернет значение 0.46211715726001

9) Функция возведения в степень POWER(число_1, число_2). Примеры
SELECT POWER(10, 2) FROM DUAL вернет значение 100
SELECT POWER(100, -2) FROM DUAL вернет значение 0.0001

10) Логарифмические функции. LN(число) возвращает натуральный логарифм переданного параметра, LOG(число_1, число_2) возвращает логарифм второго переданного параметра по основанию, переданному первом параметре. Причем первый параметр должен быть больше нуля и не равен 1. Примеры
SELECT LN(5) FROM DUAL вернет значение 1.6094379124341
SELECT LOG(10, 3) FROM DUAL вернет значение 0.477121254719662

11) Функция извлечения квадратного корня SQRT(число). Пример
SELECT SQRT(4) FROM DUAL вернет значение 2.

12) Функция возведение числа е в степень EXP(число). Пример
SELECT EXP(2) FROM DUAL вернет значение 7.38905609893065.

Функции для работы с датами в Oracle

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

1) ADD_MONTHS(дата, количество_месяцев) возвращает дату, отстоящую от даты, переданной в первом параметре на количество месяцев, указанном во втором параметре. Примеры
SELECT ADD_MONTHS(’01-JAN-2010’, 2) FROM DUAL вернет дату ’01.03.2010’
SELECT ADD_MONTHS(’01-JAN-2010’, -3) FROM DUAL вернет дату ’01.10.2009’
SELECT ADD_MONTHS(’30-JAN-2010’, 1) FROM DUAL вернет дату ’28.02.2010’

2) Для определения текущей даты и времени применяется функция SYSDATE. Область применения данной функции намного шире чем может показаться на первый взгляд. В первую очередь это контроль за вводом данных в БД. Во многих таблицах выделяется отдельное поля для сохранения даты последнего внесения изменений. Также очень удобно контролировать некие входные параметры для отчетов, особенно если они не должны быть больше чем текущая дата. Помимо даты данная функция возвращает еще и время с точностью до секунд. Пример
SELECT SYSDATE FROM DUAL вернет дату ‘22.05.2010 14:51:20’

3) Если необходимо определить последний день месяца, то для этого вполне подойдет функции LAST_DAY(дата). Её можно использовать для определения количества дней, оставшихся в месяце.
SELECT LAST_DAY(SYSDATE) – SYSDATE FROM DUAL.
В результате выполнения данного оператора будет выведено количество дней от текущей даты до конца месяца. Пример
SELECT LAST_DAY(’15-FEB-2010’) FROM DUAL вернет дату ’28.02.2010’.

4) Функция для определения количества месяцев между датами MONTHS_BETWEEN(дата_1, дата_2). Примеры
SELECT MONTHS_BETWEEN(’01-JUL-2009’, ’01-JAN-2010’) FROM DUAL вернет значение -6
SELECT MONTHS_BETWEEN(’01-JUL-2009’, ’10-JAN-2010’) FROM DUAL вернет значение -6.29032258064516.
Примечание. Если дни месяцев совпадают, то функция возвращает целое число, в противном случае результат будет дробным, причем количество дней в месяце будет принято 31.

5) Функция NEXT_DAY(дата, день_недели) позволяет определить следующую дату от даты, переданной в первом параметре, которая соответствует дню недели, переданном во втором параметре. Пример
SELECT NEXT_DAY(’01-JUL-2009’, ’mon’) FROM DUAL вернет дату ‘06.07.2009’, то есть следующий понедельник после 1 июля 2009 наступил 6 числа.

6) Округление даты ROUND(дата, формат). Второй параметр не обязателен, если его не указывать, то он принимается за ‘DD’, то есть округление будет произведено до ближайшего дня. Примеры
SELECT ROUND(SYSDATE) FROM DUAL вернет дату ‘23.05.2010’
SELECT ROUND(SYSDATE, MONTH) FROM DUAL вернет дату ‘01.06.2010’, округляется до ближайшего первого дня месяца.

7) Усечение даты. Функция TRUNC(дата, формат). Также как и рассмотренная выше может не иметь второго параметра. В таком случае усечение будет производиться до ближайшего дня. Примеры
SELECT TRUNC(SYSDATE) FROM DUAL вернет дату ’22.05.2010’
SELECT TRUNC(SYSDATE, ‘WW’) FROM DUAL вернет дату ’01.05.2010’
SELECT TRUNC(SYSDATE, ‘Day’) FROM DUAL вернет дату ‘16.05.2010’.

Функции преобразования данных в Oracle

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

1) TO_CHAR(данные, формат). На первый взгляд синтаксис довольно прост, но за счет второго параметра можно очень точно описать в какой формат преобразовать данные. Итак в строку можно преобразовать как дату, так и числовое значение. Рассмотрим вариант преобразования даты к строке. Значения самых распространенных форматов приведены в таблице, более полная информация содержится в технической документации.

Таблица значений форматов для преобразования числа в строку.

SELECT TO_CHAR(SYSDATE, ‘D-MONTH-YY’) FROM DUAL вернет строку ‘7-MAY -10’
SELECT TO_CHAR(SYSDATE, ‘DDD-MM-YYYY’) FROM DUAL вернет строку ‘142-05-2010’
SELECT TO_CHAR(SYSDATE, ‘Q-D-MM-YYY’) FROM DUAL вернет строку ‘2-7-05-010’
SELECT TO_CHAR(1050, ‘9.99EEEE) FROM DUAL вернет строку ‘ 1.050E+03’
SELECT TO_CHAR(1400, ‘9999V999’) FROM DUAL вернет строку ‘1400000’
SELECT TO_CHAR(48, ‘RM’) FROM DUAL вернет строку ‘ XLVIII’

2) Функция преобразования строки в дату TO_DATE(строка, формат). Возможные значения форматов уже рассмотрены выше, поэтому приведу несколько примеров использования данной функции. Примеры
SELECT TO_DATE(’01.01.2010’, ‘DD.MM.YYYY’) FROM DUAL вернет дату ‘01.01.2010’
SELECT TO_DATE(’01.JAN.2010’, ‘DD.MON.YYYY’) FROM DUAL вернет дату ‘01.01.2009’
SELECT TO_DATE(’15-01-10’, ‘DD-MM-YY’) FROM DUAL вернет дату ‘15.01.2010’.

3) Функция преобразования строки в числовое значение TO_NUMBER(строка, формат). Самые распространенные значения форматов перечислены в таблице, поэтому рассмотрим применение данной функции на примерах. Примеры
SELECT TO_NUMBER(‘100’) FROM DUAL вернет число 100
SELECT TO_NUMBER(‘0010.01’, ’9999D99’) FROM DUAL вернет число 10.01
SELECT TO_NUMBER("500,000","999G999") FROM DUAL вернет число 500000.

Буквы от ‘A’ до ‘Z’ следуют в возрастающем порядке, иными словами, каждая буква имеет порядковое значение, соответствующее ее месту в алфавите. Это порядковое значение может быть получено посредством функции ord .
ord(выражение) – возвращает порядковый номер литеры или значения другого дискретного типа.
ord(‘I’), ord(‘J’). Результат: 73, 74 (код ASCII)

Порядковый номер литеры зависит от используемого кода. Но, независимо от используемого кода, порядковые значения букв следуют по возрастанию:
ord(‘A’) < ord(‘B’) < ord(‘C’) … < ord(‘Z’)
хотя ord(‘Z’) – ord(‘A’) и не обязательно равно 25. То же самое и со строчными буквами:
ord(‘a’) < ord(‘b’) < ord(‘c’) … < ord(‘z’)

Определенной связи между прописными и соответствующими строчными буквами нет, но можно без опасений полагаться на то, что ord(‘a’) – ord(‘A’) имеет то же значение, что и ord(‘z’) – ord(‘Z’).

Независимо от используемого кода, порядковые значения цифр также расположены по возрастанию:
ord(‘0’) < ord(‘1’) < ord(‘2’) … < ord(‘9’)
и, более того, порядковые значения соседних цифр отличаются на 1; так, ord(‘9’) – ord(‘0’) = 9. Отсюда следует, что численное значение цифры d (типа char) может быть получено так
value:= ord(d) – ord(‘0’).

Паскаль поддерживает типы char, integer и т.д. В дополнение к ним программист вправе определить и другие типы путем перечисления последовательности констант. Например, тип, заданный перечислением:
type days = (mon, tue, wed, thu, fri, sat, sun);

Константы типа, заданного перечислением, имеют порядковые значения, отсчитываемые от нуля. Например, ord(mon) возвращает 0, ord(sun) возвращает 6; mon < sun.

Тип boolean – перечисляемый тип, который автоматически задается как
type boolean = (false, true);
следовательно, ord(false) дает 0, ord(true) дает 1; false < true.

Функция chr

Обратной для ord является функция chr .
chr(выражение) – возвращает литеру, порядковое значение которой задается параметром; неправильное значение влечет ошибку.
chr(73), chr(74). Результат: I, J (кодировка ASCII)
chr(1000). Результат: ошибка

Функции succ и pred

Порядковые значения редко бывают нужны сами по себе. Часто достаточно знать следующий или предыдущий элемент в установленном порядке. Для этой цели служат функции succ и pred .
succ(выражение) – возвращает элемент, следующий за тем, который указан в качестве параметра.
succ(‘A’), succ(‘0’), succ(0). Результат: B, 1 (символ), 1 (число)
succ(false). Результат: true
pred(выражение) – возвращает элемент, предшествующий тому, который указан в качестве параметра.
pred(‘Z’), pred(‘9’), pred(9). Результат: Y, 8 (символ), 8 (число)
pred(true). Результат: false

Эти две функции можно использовать для определения следующих и предшествующих элементов для типа, заданного перечислением. Возьмем тип days , определенный ранее: pred(sun) возвращает sat, succ(mon) возвращает tue.

Однако было бы неверно писать writeln(pred(sun)), поскольку элементы перечисляемого типа нельзя читать или печатать, что, конечно, снижает выгоду от использования таких типов. Наилучшее приближение к writeln(pred(sun) – это оператор writeln(ord(pred(sun))), печатающий число 5 (порядковое значение элемента sat).

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

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

В разделе на вопрос Люди,объясните подробно,пожалуйста,что значит в Паскале функция ord(x) и ей обратная chr(x) ? заданный автором Nick Brown лучший ответ это Есть специальная таблица символов (расширенного кода ASCII, когда каждому символу принадлежит числовое значение, всего в таблице имеется 255 значений, то есть каждому символу присвоено число,
chr(0..254) преобразует число (один байт) в символ которому принадлежит данное число, например chr(71) результатом будет буква "G", так же нажатие клавиш на клавиатуре выдаёт свой код вот как раз этот код при постановке в данный оператор и выдаст результатом какая клавиша нажата, это я к примеру. А вот оператор ORD(x) делает данный процесс в обратном порядке.
Задаём значение символ и получаем число от 0 до 254 (один байт)
например ORD("G") даст нам результат 71 (в десятичном формате)
Вот вроде и всё !!!

Ответ от Katyonachik [новичек]
Все просто, на самом деле)
Орд ("Х") - вернет код символа Х из таблицы АСКИИ.
Результатом обратной ей функции будет символ, который соответствует введенному коду (от которого берется функция) из той же таблицы АСКИИ.


Ответ от Jurii [гуру]
Это не взаимообратные функции!
Функция Ord возвращает порядковый номер значения перечислимого типа.
Счёт начинается с ноля.
Для типа byte функция вернёт собственно значение -- порядковый номер совпадает со значением.
Для типа char функция вернёт порядковый номер символа, который (число случайно) совпадает с ASCII кодом.
Функция chr возвращает символ с заданным кодом в ASCII.
Вывод: Просто, в отношении символьных значений, они действительно работают как обратные друг другу.. .
Поэтому можно сказать, что функция ord обратная функции chr, но не наоборот - функция chr не является обратной для функции ord, т. к. область применения функции ord не ограничивается работой с символами!