Приклади використання VBA. Вбудовані функції Oracle Vba excel функції роботи з рядками

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

(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) 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, «Це тестове речення») повертає масив із трьох рядкових значень: «Це», «тестове», «пропозиція». Join (<массивСтрок> [, <разделитель>]) – перетворює масив рядків в один рядок із зазначеним роздільником. Filter(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) - переглядає масив рядкових значень і шукає в ньому всі підрядки, що збігаються із заданим рядком. Ця функція має чотири аргументи:<строкаПоиск>- Шуканий рядок;<включение>– параметр (булівське значення), який вказує, чи будуть рядки, що повертаються, включати шуканий підрядок або, навпаки, повертатися будуть тільки ті рядки масиву, які не містять рядка, що шукається, як підрядок;<сравнение>- Параметр, що визначає метод порівняння рядків. Ще три функції забезпечують перетворення рядків: LCase(<строка>) – перетворює всі символи рядка до нижнього регістру, наприклад, функція LCase («ПОШТА») повертає рядок «пошта»; UCase(<строка>) – перетворює всі символи рядка до верхнього регістру; StrConv (<строка>, <преобразование>) – виконує кілька типів перетворень рядка залежно від другого параметра. Цей параметр описується вбудованими константами, наприклад, функція StrConv («poccia», 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)). ,") 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). , Len(m(R)) N = K + Len(m(R)) K = InStr(N, Cells(1, 1).Value, m(R)) Loop While K > 0 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 проти Pattern (Visual Basic)

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

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

? один будь-який символ

  • myString складається з символу W, за яким слідують 2 будь-які символи

    Dim sMatch As Boolean = myString Як ​​"W??"

Будь-який символ зі списку та діапазону

Будь-який символ, а потім один із символів A, C або E

    Dim sMatch As Boolean = myString Як ​​"?" враховується регістр символів

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

    Dim sMatch As Boolean = myString Як ​​"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) "Comparіson is binary by default" (last argument is omitted). MyPos = Instr( SearchString , SearchChar ) Returns 9. MyPos = Instr( 1, SearchString , "W" ) Returns 0.

Найчастіше рядки у програмі містять непотрібні символи пропусків наприкінці чи початку рядки, які потрібно видалити, т.к. сторонні початкові або кінцеві пробіли в рядку можуть викликати "несправності" в роботі програми.

VBA має три функції, призначені для видалення початкових і кінцевих пробілів з рядка: LTrim, RTrim, Trim. Слід мати на увазі, що ці функції не змінюють вихідний рядок, а повертають копію рядка з віддаленими зайвими пробілами.

Визначення довжини рядка

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



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

Порівняння та пошук рядків

У VBA є дві функції, які допомагають порівнювати рядки: StrComp, InStr.

Функція StrComp

Синтаксис


StrComp (String1, String2 [, Compare])


String1, String2 - будь-які два рядкові вирази, які необхідно порівнювати.

При виконанні StrComp повертається одне з наступних значень:

  • -1, якщо String1 менше String2;
  • 0, якщо String1 та String2 рівні;
  • 1, якщо String1 більше String2.


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

Поекспериментуйте з різними рядками для кращого розуміння функції StrComp.

Функція InStr

Функція InStr дає змогу визначити, чи один рядок містить інший рядок.

Синтаксис


StrComp (String1, String2 [, Compare])


String1, String2 - будь-які допустимі строкові вирази. Функція перевіряє чи міститься String1 в String2.

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

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

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


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



Розбиття рядка

Іноді виникає необхідність розбиття рядка на складові. У VBA це завдання вирішують три функції: Left, Right, Mid.

Функція Left

Синтаксис


Left (String, Length)


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

Функція Right

Синтаксис


Right (String, Length)


String - будь-який допустимий рядковий вираз.

Length – будь-яке чисельне значення.


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

Функція Mid

Синтаксис


Mid (String, Start, [, Length])


String - будь-який допустимий рядковий вираз.

Length, Start – будь-які чисельні значення.


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



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

Найчастіше трапляється, що потрібно ввести будь-який символ, для якого відсутня клавіша на клавіатурі (наприклад, символ копірайту). Інша ситуація – коли треба в рядок включити службовий символ VBA (найпоширеніший випадок – включення подвійних лапок).

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

Синтаксис


Chr (Charcode)


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

Функція Chr приймає код окремого символу як аргумент і повертає рядок, що містить відповідний код символ. Ця функція використана у наведених вище листингах для перекладу рядка при виведенні повідомлення на екран Chr (13).


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

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

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



Форматування значень даних

Дуже часто формат даних на виході програми з тих чи інших причин нас не зовсім влаштовує. Це завдання вирішує функція Формат.

VBA-функція Format ідентична функції Format в Excel і використовує самі символи-заповнювачі форматування даних.

Синтаксис


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


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

Format - припустимий вираз іменованого або визначеного користувачем формату.

Firstdayofweek - константа, яка визначає перший день тижня.

Перший вікофір - константа, яка визначає перший тиждень року.


Щоб використовувати функцію Format, потрібно або задати визначений формат, або створити образ певного форматуза допомогою символів заповнювачів.


Іменовані формати для використання з функцією Format

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

Символи-заповнювачі для створення форматів користувача

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

Функція Chr

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

Функція Chr(Ch aracte r)дозволяє отримати символ за значенням його числового коду 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 Категорія

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