Приклади роботи з рядками 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, то функція поверне лише рядки, які не включають стандарт.

Формат (рядок)

Див. розділ "Форматування даних"

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 AM#) " оператор 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 не обмежується роботою із символами!