Excel миф все символы

Содержание

  1. Функции VBA для работы с текстом
  2. VBA Excel. Работа с текстом (функции)
  3. Функции для работы с текстом
  4. Ключевые слова для работы с текстом
  5. Примеры
  6. Вывод прямых парных кавычек
  7. VBA Excel. Функции Left, Mid, Right (вырезать часть строки)
  8. Функция Left
  9. Функция Mid
  10. Функция Right
  11. Пример
  12. Как очистить данные от непечатаемых символов в Excel
  13. Как макрос работает
  14. Код макроса
  15. Как этот код работает
  16. Как использовать

Функции 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 Replace(sStr, «Hello», «Bay»)

    Dim sStr As String sStr = «Hello, World!» MsgBox StrConv(«Hello, World!», vbUpperCase)

    В качестве второго параметра параметра могут применяться константы:

    • vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
    • vbLowerCase: Преобразует все текстовые символы в нижний регистр
    • vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
    • *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
    • *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
    • **vbKatakana: Преобразует символы Hiragana в символы Katakana
    • **vbHiragana: Преобразует символы Katakana в символы Hiragana
    • ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
    • ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию

    * применимо для локализацией Дальнего востока
    ** применимо только для Японии
    *** не поддерживается операционными системами под управлением Macintosh

  • StrReverse () — «перевернуть» строку, разместив ее символы в обратном порядке. Функция работает только начиная от Excel 2000 и выше. Пример использования функции, а так же иные методы переворачивания слова можно посмотреть в этой статье: Как перевернуть слово?
  • Tab () — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
  • String () — позволяет получить строку из указанного количества символов (которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().
  • Источник

    VBA Excel. Работа с текстом (функции)

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

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

    Основные функции для работы с текстом в VBA Excel:

    Функция Описание
    Asc(строка) Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/».
    Chr(код символа) Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/».
    Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее…
    InStr([начало], строка1, строка2, [сравнение]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее…
    InstrRev(строка1, строка2, [начало, [сравнение]]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее…
    Join(SourceArray,[Delimiter]) Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее…
    LCase(строка) Преобразует буквенные символы строки в нижний регистр.
    Left(строка, длина) Возвращает левую часть строки с заданным количеством символов. Подробнее…
    Len(строка) Возвращает число символов, содержащихся в строке.
    LTrim(строка) Возвращает строку без начальных пробелов (слева). Подробнее…
    Mid(строка, начало, [длина]) Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее…
    Replace(expression, find, replace, [start], [count], [compare]) Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее…
    Right(строка, длина) Возвращает правую часть строки с заданным количеством символов. Подробнее…
    RTrim(строка) Возвращает строку без конечных пробелов (справа). Подробнее…
    Space(число) Возвращает строку, состоящую из указанного числа пробелов. Подробнее…
    Split(Expression,[Delimiter],[Limit],[Compare]) Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее…
    StrComp(строка1, строка2, [сравнение]) Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее…
    StrConv(string, conversion) Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее…
    String(число, символ) Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее…
    StrReverse(строка) Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее…
    Trim(строка) Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее…
    UCase(строка) Преобразует буквенные символы строки в верхний регистр.
    Val(строка) Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее…
    WorksheetFunction.Trim(строка) Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы.

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

    Ключевые слова для работы с текстом

    Ключевое слово Описание
    & Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String.
    vbCrLf Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2).
    vbNewLine Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2).

    Примеры

    Вывод прямых парных кавычек

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

    Источник

    VBA Excel. Функции Left, Mid, Right (вырезать часть строки)

    Извлечение (вырезание) части строки с помощью кода VBA Excel из значения ячейки или переменной. Функции Left, Mid и Right, их синтаксис и аргументы. Пример.

    Функция Left

    Эта функция извлекает левую часть строки с заданным количеством символов.

    Синтаксис функции Left:

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

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

    Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.

    Функция Mid

    Эта функция извлекает часть строки с заданным количеством символов, начиная с указанного символа (по номеру).

    Синтаксис функции Mid:

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

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

    Если аргумент «начало» больше, чем количество символов в строке, функция Mid возвращает пустую строку. Если аргумент «длина» опущен или его значение превышает количество символов в строке, начиная с начального, возвращаются все символы от начальной позиции до конца строки.

    Функция Right

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

    Синтаксис функции Right:

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

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

    Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.

    Пример

    В этом примере будем использовать все три представленные выше функции для извлечения из ФИО его составных частей. Для этого запишем в ячейку «A1» строку «Иванов Сидор Петрович», из которой вырежем отдельные компоненты и запишем их в ячейки «A2:A4».

    Источник

    Как очистить данные от непечатаемых символов в Excel

    Что макрос делает: Иногда у вас есть непечатаемые символы в ваших данных. Эти символы должны быть удалены, прежде чем можно будет использовать данные для серьезного анализа.
    Вы, можете записывать макрос выполнения поиска и замены (записанный макрос является отличным способом для автоматизации поиска и замены процедур). Таким образом, ваша первая реакция может быть, чтобы просто найти и заменить эти символы. Проблема состоит в том, что эти непечатаемые символы являются по большей части невидимым и, таким образом, трудно очистить обычной функцией поиска и замены. Самый простой способ, чтобы очистить их через VBA.
    Если вы боретесь с невидимыми символами, используйте этот общий макрос, чтобы найти и удалить все непечатаемые символы.

    Как макрос работает

    Этот макрос является относительно простым, поиск и замена обычное дело. Мы используем метод Replace, говоря Excel найти и заменить. Это похоже на синтаксис ручного выполнения поиска и замены.
    Разница заключается в том, что кодирование текста использует коды символов, чтобы указать наш текст для поиска. Каждый символ имеет исходный код ASCII, похожий на серийный номер. Например, строчная буква А имеет ASCII-код 97, строчной букве С соответствует ASCII-код 99.
    Аналогичным образом, невидимые символы также имеют код:
    Код символа перевода строки — 10.
    Код возврата каретки — 13.
    Код неразрывного пробела — 160.
    Этот макрос использует метод Replace, передавая код ASCII каждого символа в качестве поискового элемента. Затем каждый код символа заменяется пустой строкой:

    Код макроса

    Как этот код работает

    1. Шаг 1 ищет и удаляет символы перевода строки. Код этого символа равен 10. Мы можем определить код символа 10, передавая идентификатор с помощью функции Chr. После того, как Chr (10) определяется как поисковый элемент, то макрос передает пустую строку к замене аргумента.
      Обратите внимание на использование ActiveSheet.UsedRange. Excel ищет во всех ячейках, которые имели данные, введенные в них. Вы можете заменить объект UsedRange с реальным диапазоном, если это необходимо.
    2. Шаг 2 находит и удаляет символ возврата каретки.
    3. Шаг 3 находит и удаляет неразрывные пробелы.

    Символы, описанные в этом макросе лишь некоторые из многих непечатаемых символов.
    Если вы работаете с другими, вы можете просто добавить новую строку кода, указав соответствующий код символа. Список ASCII-кодов можно найти в любой поисковой системе.

    Как использовать

    Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

    1. Активируйте редактор Visual Basic, нажав ALT + F11.
    2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
    3. Выберите Insert➜Module.
    4. Введите или вставьте код.

    Источник

    На чтение 12 мин. Просмотров 18.1k.

    VBA Instr

    Функция VBA InStr является одной из наиболее часто используемых функций в VBA. Он используется для нахождения текста внутри строки и действительно отлично справляется с работой.

    Тем не менее, она часто используется, чтобы помочь извлечь часть строки, и эту задачу она выполняет плохо.

    Если вы обнаружили, что извлечение текста в VBA является болезненным процессом, тогда читайте дальше. Эта статья покажет вам более простой и лучший способ, используя три реальных примера!

    Содержание

    1. Краткое руководство к статье
    2. Краткая справка
    3. Введение
    4. Когда VBA InStr, Left, Right и Mid полезны
    5. Работа со строками различной длины
    6. Использование функции VBA InStr с Mid
    7. Функция Split
    8. Пример 1: Получение части имени файла
    9. Пример 2: диапазон IP-адресов
    10. Пример 3. Проверьте правильность имени файла
    11. Заключение

    Краткое руководство к статье

    В следующей таблице приведено краткое руководство к тому, что рассматривается в этой статье.

    Строка Тип Задача Как
    1234ABC334 Фиксированный размер Оставить слева 4 символа Left(s,4)
    1234ABC334 Фиксированный размер Оставить
    справа 3
    символа
    Right(s,3)
    1234ABC334 Фиксированный размер Оставить 5, 6, 7 символы Mid(s,5,3)
    «Иван
    Петрович
    Сидоров»
    Переменный
    размер
    Оставить имя Split(s,» «)(0)
    «Иван
    Петрович
    Сидоров»
    Переменный
    размер
    Оставить
    отчество
    Split(s,» «)(1)
    «Иван
    Петрович
    Сидоров»
    Переменный
    размер
    Оставить
    фамилию
    Split(s,» «)(2)
    «Иван
    Петрович
    Сидоров»
    Переменный
    размер
    Оставить
    фамилию
    Dim v As
    Variant
    v = Split(s, » «)
    lastname= v(UBound(v))

    Краткая справка

    Чтобы узнать больше об элементах, упомянутых в статье, перейдите по следующим ссылкам:

    • Если вы хотите узнать больше о функциях InStr или InStrRev, пожалуйста, прочитайте Поиск в строке.
    • Если вы хотите узнать больше о функциях Mid, Left или Right, посмотрите раздел Извлечение части строки.
    • Для получения дополнительной информации о функции Split проверьте Строка в массив, используя Split.
    • Оператор Like включен в Сравнение строк с шаблоном

    Я использую Debug.Print в моих примерах. Он печатает значения в Immediate Window, которое вы можете просмотреть, нажав Ctrl + G (или выберите View-> Immediate Window)

    Введение

    В этой статье я собираюсь показать вам лучший способ извлечения символов из строки, чем использование функции VBA InStr с Left, Right или Mid.

    Эта статья разбита следующим образом:

    • Раздел 1: Как извлечь из строк фиксированного размера.
    • Раздел 2: Как извлечь из строк переменного размера.
    • Раздел 3: Как извлечь из строки переменного размера, используя функцию Split.
    • Разделы с 4 по 6: некоторые примеры из реальной жизни.

    Когда VBA InStr, Left, Right и Mid полезны

    Если вы хотите проверить, содержит ли строка значение, InStr подходит для этой работы. Если вы хотите сделать простое извлечение, то отлично подойдут Left, Right и Mid.

    Использование InStr для проверки, содержит ли строка текст

    В следующем примере мы проверяем, содержит ли ФИО «Петрович». Если возвращаемое значение InStr больше нуля, то строка содержит значение, которое мы проверяем.

    ' Проверьте, содержит ли строка Петрович
        If InStr("Иван Петрович Сидоров", "Петрович") > 0 Then
            Debug.Print "Найдено"
        End If
    

    Извлечение с Left, Right и Mid

    Функция Left используется для получения символов слева от строки.
    Функция Right используется для получения символов справа от строки.
    Функция Mid используется для середины строки. Она такая же, как
    Left, за исключением того, что вы даете ему стартовую позицию.

    Sub IzvlechTekst()
    
        Dim s As String: s = "ABCD-7789.WXYZ"
    
        Debug.Print Left(s, 2) ' Печатает AB
        Debug.Print Left(s, 4) ' Печатает ABCD
    
        Debug.Print Right(s, 2) ' Печатает YZ
        Debug.Print Right(s, 4) ' Печатает WXYZ
    
        Debug.Print Mid(s, 1, 2) ' Печатает AB
        Debug.Print Mid(s, 6, 4) ' Печатает 7789
    
    End Sub
    

    VBA Left, Right and Mid

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

    Используйте Left, Right или Mid, когда символы всегда будут в одной и той же позиции.

    Работа со строками различной длины

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

    Brooke Hilt
    Pamela Jurado
    Zack Kinzel
    Eddy Wormley
    Kaitlyn Rainer
    Jacque Trickett
    Kandra Stanbery
    Margo Hoppes
    Berenice Meier
    Garrett Hyre

    (Если вам нужен случайный список имен, попробуйте этот генератор случайных имен)

    Использование функции VBA InStr с Left

    В следующем примере мы собираемся получить имя из строки. В этой строке первое имя — это имя перед первым пробелом.

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

    Sub PoluchitImya()
    
        Dim s As String, lPosition As Long
    
        s = "John Henry Smith"
        ' Печатает John
        lPosition = InStr(s, " ") - 1
        Debug.Print Left(s, lPosition)
    
        s = "Lorraine Huggard"
        ' Печатает Lorraine
        lPosition = InStr(s, " ") - 1
        Debug.Print Left(s, lPosition)
    
    End Sub
    

    Давайте посмотрим на первый пример в приведенном выше коде. Первый пробел находится в позиции 5. Мы вычтем 1, что дает нам позицию 4. Это позиция последней буквы John, т.е.

    VBA InStr and Left

    Затем мы даем 4 функции Left, и она возвращает первые четыре символа, например, «John»

    Мы можем выполнить ту же задачу в одной строке, передав возвращаемое значение из InStr в функцию Left.

     Dim s As String
        s = "John Henry Smith"
    
        ' Печатает John
        Debug.Print Left(s, InStr(s, " ") - 1)
    

    Использование функции VBA InStr с Right

    В этом примере мы получим последнее слово в строке, то есть Smith. Мы можем использовать функцию InStrRev. Это то же самое, что InStr, за исключением того, что поиск выполняется с конца строки.

    Важно отметить, что InStrRev дает нам позицию с начала строки. Поэтому нам нужно использовать его немного иначе, чем мы использовали InStr и Left.

    Sub PoluchitFamiliyu()
    
        Dim s As String: s = "John,Henry,Smith"
        Dim Position As Long, Length As Long
    
        Position = InStrRev(s, ",")
        Length = Len(s)
    
        ' Печатает Smith
        Debug.Print Right(s, Length - Position)
    
        ' Альтернативный метод. Печатает Smith - делает в одну строку
        Debug.Print Right(s, Len(s) - InStrRev(s, ","))
    
    End Sub
    

    Как работает приведенный выше пример:

    • Мы получаем позицию последнего пробела, используя InStrRev: 11
    • Мы получаем длину строки: 16.
    • Вычитаем позицию из длины: 16-11 = 5
    • Мы даем 5 функции Right и возвращаем Smith

    VBA Instr and Right

    Использование функции VBA InStr с Mid

    В следующем примере мы получим «Henry» из строки. Слово, которое мы ищем, находится между первым и вторым пробелом.

    Мы будем использовать функцию Mid здесь.

    Sub PoluchitVtoroeImya()
    
        Dim s As String: s = "John Henry Smith"
    
        Dim firstChar As Long, secondChar As Long
        Dim count As Long
    
        ' Найти пробел плюс 1. Результат 6
        firstChar = InStr(s, " ") + 1
        ' Найти 2-й пробел. Результат 11
        secondChar = InStr(firstChar, s, " ")
        ' Получить число символов. Результат 5
        count = secondChar - firstChar
    
        ' Печатает Henry
        Debug.Print Mid(s, firstChar, count)
    
    End Sub
    

    Как видите, это сложно сделать и требует немного усилий, чтобы выяснить. Нам нужно найти первое место. Тогда нам нужно найти второе место. Затем мы должны вычесть одно из другого, чтобы дать нам количество символов, которые нужно взять.

    VBA Instr and Mid

    Если у вас есть строка с большим количеством слов, то это может быть очень сложно. К счастью для нас, гораздо проще было извлечь символы из строки. Это называется функцией Split.

    Функция Split

    Мы можем использовать функцию Split для выполнения приведенных выше примеров. Функция Split разбивает строку на массив. Тогда мы можем легко получить доступ к каждому элементу.

    Давайте попробуем те же три примера еще раз, и на этот раз мы будем использовать Split.

      Dim s As String: s = "John Henry Smith"
    
        Debug.Print Split(s, " ")(0) ' John
        Debug.Print Split(s, " ")(1) ' Henry
        Debug.Print Split(s, " ")(2) ' Smith
    

    Ого! Какая разница с использованием Split. Как это работает:

    1. Функция Split разбивает строку везде, где есть пробел.
    2. Каждый элемент помещается в массив, начиная с нуля.
    3. Используя номер местоположения, мы можем получить доступ к элементу массива.  

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

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

    0 1 2
    John Henry Smith

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

    Sub SplitName()
        Dim s As String: s = "John Henry Smith"
        Dim arr() As String
        arr = Split(s, " ")
    
        Debug.Print arr(0) ' John
        Debug.Print arr(1) ' Henry
        Debug.Print arr(2) ' Smith
    End Sub
    

    Если вы хотите узнать больше о массивах, я написал о них целую статью под названием «Полное руководство по использованию массивов в Excel VBA».

    В следующих разделах мы рассмотрим примеры из реальной жизни. Вы увидите преимущество использования Split вместо функции InStr.

    Пожалуйста, не стесняйтесь попробовать это сами. Это отличный способ учиться, и вы можете повеселиться, пытаясь понять их (или, может быть, только у меня так!)

    Пример 1: Получение части имени файла

    Представьте, что мы хотим извлечь числа из следующих имен файлов

    «VB_23476_Val.xls»
    «VV_987_Val.txt»
    «VZZA_12223_Val.doc»

    Это похоже на пример, где мы получаем второй элемент. Чтобы получить значения здесь, мы используем подчеркивание (то есть «_»), чтобы разбить строку. Смотрите пример кода ниже:

    Sub PoluchitNomer()
    
        ' Печатает 23476
        Debug.Print Split("VB_23476_Val.xls", "_")(1)
        ' Печатает 987
        Debug.Print Split("VV_987_Val.txt", "_")(1)
        ' Печатает 12223
        Debug.Print Split("ABBZA_12223_Val.doc", "_")(1)
    
    End Sub
    

    В реальном мире вы обычно читаете такие строки из разных ячеек. Допустим, эти имена файлов хранятся в ячейках от А1 до А3. Мы немного изменим приведенный выше код:

    Sub ChitatNomera()
    
        Dim c As Range
        For Each c In Range("A1:A3")
            ' Разделите каждый элемент по мере его прочтения
            Debug.Print Split(c, "_")(1)
        Next c
    
    End Sub
    

    Пример 2: диапазон IP-адресов

    Пример здесь взят из вопроса на веб-сайте StackOverflow.

    У пользователя есть строка с IP-адресом в формате «BE-ABCDDD-DDS 172.16.23.3».

    Он хочет, чтобы IP в диапазоне от 172,16 до 172,31 был действительным. Так например:

    • «BE-ABCDDD-DDS 172.16.23.3» действителен
    • «BE-ABCDDD-DDS 172.25.23.3» действителен
    • «BE-ABCDDED-DDS 172.14.23.3» не действителен
    • «BE-ABCDDDZZ-DDS 172.32.23.3» не действителен

    Вот как бы я это сделал. Сначала я разбил строку по периодам. Число, которое мы ищем, находится между первым и вторым периодом. Поэтому это второй пункт. Когда мы разделяем строку, она помещается на первую позицию в массиве (помните, что массив начинается с нулевой позиции).

    Полученный массив будет выглядеть так:

    0 1 2 3
    BE-ABCDDD-DDS 172 31 23 3

    Код ниже показывает, как это сделать.

    Sub IPAdd()
    
        ' Проверьте номер, чтобы проверить разные IP-адреса
        Dim s1 As String: s1 = "BE-ABCDDD-DDS 172.31.23.3"
    
        ' Разбить строку, используя символ точки
        Dim num As Long
        num = Split(s1, ".")(1)
    
        ' Проверьте правильность номера
        Debug.Print num >= 16 And num <= 31
    
    End Sub
    

    Пример 3. Проверьте правильность имени файла

    В этом последнем примере мы хотим проверить правильность имени файла. Есть три правила.

    1. Должно заканчиваться на .pdf
    2. Он должен содержать АА
    3. Он должен содержать 1234 после А

    В следующих таблицах показаны некоторые допустимые и недействительные элементы:

    Имя файла Статус
    AA1234.pdf Действителен
    AA_ljgslf_1234.pdf Действителен
    AA1234.pdf1 Недействительно — не заканчивается на .pdf
    1234 AA.pdf Недействительно — АА не до 1234
    12_AA_1234_NM.pdf Действителен

    Сначала мы сделаем это, используя функции InStr и Right.

    Sub IspInstr()
    
        Dim f As String: f = "AA_1234_(5).pdf"
    
        ' Сначала найдите АА, так как 1234 должен идти после
        Dim lPos As Long: lPos = InStr(f, "AA")
        ' Ищите 1234 и убедитесь, что последние четыре символа - .pdf
        Debug.Print InStr(lPos, f, "1234") > 0 And Right(f, 4) = ".pdf"
    
    End Sub
    

    Этот код очень грязный. К счастью для нас, у VBA есть Сравнение с шаблоном. Мы можем проверить шаблон строки без необходимости искать элементы и позиции и т.д. Мы используем оператор Like в VBA для сопоставления с шаблоном. Пример ниже показывает, как это сделать.

    Sub IspSravnenie()
    
        Dim f As String: f = "AA_1234_(5).pdf"
    
        ' Определить шаблон
        Dim pattern As String: pattern = "*AA*1234*.pdf"
        ' Проверьте каждый элемент по шаблону
        Debug.Print f Like pattern   ' ИСТИНА
    
    End Sub
    

    В приведенном выше примере звездочка в шаблоне относится к любому количеству символов.

    Давайте разберем этот паттерн * AA * 1234 * .pdf

    *- любая группа символов
    AA — точные символы AА

    *- любая группа символов
    1234 — точные символы 1234

    *- любая группа символов
    .pdf — точные символы .pdf

    Чтобы показать, что это работает правильно, давайте попробуем это на всех именах примеров в таблице.

    Sub IspSravnenieTest()
    
        ' Создать коллекцию имен файлов
        Dim coll As New Collection
        coll.Add "AA1234.pdf"
        coll.Add "AA_ljgslf_1234.pdf"
        coll.Add "AA1234.pdf1"
        coll.Add "1234 AA.pdf"
        coll.Add "12_AA_1234_NM.pdf"
    
        ' Определить шаблон
        Dim pattern As String: pattern = "*AA*1234*.pdf"
    
        ' Проверьте каждый элемент по шаблону
        Dim f As Variant
        For Each f In coll
            Debug.Print f Like pattern
        Next f
    
    End Sub
    

    На выходе:

    ИСТИНА
    ИСТИНА
    ЛОЖЬ
    ЛОЖЬ
    ИСТИНА

    Чтобы узнать больше о сопоставлении с шаблоном и ключевом слове Like, ознакомьтесь с этой публикацией.

    Заключение

    InStr и InStrRev действительно полезны только для простых задач, таких как проверка наличия текста в строке.

    Left, Right и Mid полезны, когда положение текста всегда одинаково.

    Функция Split — лучший способ извлечь переменную строку.

    При попытке проверить формат строки, которая не является фиксированной по размеру, ключевое слово Like (т.е. Сопоставление с образцом) обычно обеспечивает более простое решение.

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

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

    Основные функции для работы с текстом в VBA Excel:

    Функция Описание
    Asc(строка) Возвращает числовой код символа, соответствующий первому символу строки. Например: MsgBox Asc(«/Stop»). Ответ: 47, что соответствует символу «/».
    Chr(код символа) Возвращает строковый символ по указанному коду. Например: MsgBox Chr(47). Ответ: «/».
    Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear]) Преобразует число, дату, время в строку (тип данных Variant (String)), отформатированную в соответствии с инструкциями, включенными в выражение формата. Подробнее…
    InStr([начало], строка1, строка2, [сравнение]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с начала строки. Подробнее…
    InstrRev(строка1, строка2, [начало, [сравнение]]) Возвращает порядковый номер символа, соответствующий первому вхождению одной строки (строка2) в другую (строка1) с конца строки. Подробнее…
    Join(SourceArray,[Delimiter]) Возвращает строку, созданную путем объединения нескольких подстрок из массива. Подробнее…
    LCase(строка) Преобразует буквенные символы строки в нижний регистр.
    Left(строка, длина) Возвращает левую часть строки с заданным количеством символов. Подробнее…
    Len(строка) Возвращает число символов, содержащихся в строке.
    LTrim(строка) Возвращает строку без начальных пробелов (слева). Подробнее…
    Mid(строка, начало, [длина]) Возвращает часть строки с заданным количеством символов, начиная с указанного символа (по номеру). Подробнее…
    Replace(expression, find, replace, [start], [count], [compare]) Возвращает строку, полученную в результате замены одной подстроки в исходном строковом выражении другой подстрокой указанное количество раз. Подробнее…
    Right(строка, длина) Возвращает правую часть строки с заданным количеством символов. Подробнее…
    RTrim(строка) Возвращает строку без конечных пробелов (справа). Подробнее…
    Space(число) Возвращает строку, состоящую из указанного числа пробелов. Подробнее…
    Split(Expression,[Delimiter],[Limit],[Compare]) Возвращает одномерный массив подстрок, извлеченных из указанной строки с разделителями. Подробнее…
    StrComp(строка1, строка2, [сравнение]) Возвращает числовое значение Variant (Integer), показывающее результат сравнения двух строк. Подробнее…
    StrConv(string, conversion) Изменяет регистр символов исходной строки в соответствии с заданным параметром «conversion». Подробнее…
    String(число, символ) Возвращает строку, состоящую из указанного числа символов. В выражении «символ» может быть указан кодом символа или строкой, первый символ которой будет использован в качестве параметра «символ». Подробнее…
    StrReverse(строка) Возвращает строку с обратным порядком следования знаков по сравнению с исходной строкой. Подробнее…
    Trim(строка) Возвращает строку без начальных (слева) и конечных (справа) пробелов. Подробнее…
    UCase(строка) Преобразует буквенные символы строки в верхний регистр.
    Val(строка) Возвращает символы, распознанные как цифры с начала строки и до первого нецифрового символа, в виде числового значения соответствующего типа. Подробнее…
    WorksheetFunction.Trim(строка) Функция рабочего листа, которая удаляет все лишние пробелы (начальные, конечные и внутренние), оставляя внутри строки одиночные пробелы.

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

    Ключевые слова для работы с текстом

    Ключевое слово Описание
    & Оператор & объединяет два выражения (результат = выражение1 & выражение2). Если выражение не является строкой, оно преобразуется в Variant (String), и результат возвращает значение Variant (String). Если оба выражения возвращают строку, результат возвращает значение String.
    vbCrLf Константа vbCrLf сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит последующий текст на новую строку (результат = строка1 & vbCrLf & строка2).
    vbNewLine Константа vbNewLine в VBA Excel аналогична константе vbCrLf, также сочетает в себе возврат каретки и перевод строки (Chr(13) + Chr(10)) и переносит текст на новую строку (результат = строка1 & vbNewLine & строка2).

    Примеры

    Вывод прямых парных кавычек

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

    Sub Primer1()

        ‘Вывод одной прямой парной кавычки

    MsgBox Chr(34)

        ‘Отображение текста в прямых кавычках

    MsgBox Chr(34) & «Волга» & Chr(34)

        ‘Вывод 10 прямых парных кавычек подряд

    MsgBox String(10, Chr(34))

    End Sub

    Смотрите интересное решение по выводу прямых кавычек с помощью прямых кавычек в первом комментарии.

    Отображение слов наоборот

    Преобразование слова «налим» в «Милан»:

    Sub Primer2()

    Dim stroka

        stroka = «налим»

        stroka = StrReverse(stroka) ‘милан

        stroka = StrConv(stroka, 3) ‘Милан

    MsgBox stroka

    End Sub

    или одной строкой:

    Sub Primer3()

    MsgBox StrConv(StrReverse(«налим»), 3)

    End Sub

    Преобразование слова «лето» в «отель»:

    Sub Primer4()

    Dim stroka

        stroka = «лето»

        stroka = StrReverse(stroka) ‘отел

        stroka = stroka & «ь» ‘отель

    MsgBox stroka

    End Sub

    или одной строкой:

    Sub Primer5()

    MsgBox StrReverse(«лето») & «ь»

    End Sub

    Печатная машинка

    Следующий код VBA Excel в замедленном режиме посимвольно печатает указанную строку на пользовательской форме, имитируя печатную машинку.

    Для реализации этого примера понадобится пользовательская форма (UserForm1) с надписью (Label1) и кнопкой (CommandButton1):

    Пользовательская форма с элементами управления Label и CommandButton

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    Sub StopSub(Pause As Single)

    Dim Start As Single

    Start = Timer

        Do While Timer < Start + Pause

           DoEvents

        Loop

    End Sub

    Private Sub CommandButton1_Click()

    Dim stroka As String, i As Byte

    stroka = «Печатная машинка!»

    Label1.Caption = «»

        For i = 1 To Len(stroka)

            Call StopSub(0.25) ‘пауза в секундах

            ‘следующая строка кода добавляет очередную букву

            Label1.Caption = Label1.Caption & Mid(stroka, i, 1)

        Next

    End Sub

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


    Главная » Функции VBA »

    28 Апрель 2011              351383 просмотров

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

    Статья помогла? Сделай твит, поделись ссылкой с друзьями!

    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    1

    Вытащить из ячейки символы

    03.03.2017, 20:25. Показов 3521. Ответов 30


    Студворк — интернет-сервис помощи студентам

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

    массив правильный ответ
    про 123456789 прот прот
    «12345678, 321 ,ййй ,ййй
    8777лл «п»ро лл «п»ро
    456 ро 123458  
    ццц 444 длдлд длдлд



    0



    pashulka

    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    03.03.2017, 20:43

    2

    Лучший ответ Сообщение было отмечено АЛКС как решение

    Решение

    Чем Вам так Like не понравился, что Вы отказываетесь от его использования …

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Public Function AfterNum$(Text$)
        If Text Like "*[0-9]*[!0-9]" Then '"*#*[!0-9]"
           For iCount% = Len(Text) - 1 To 1 Step -1
               If Mid(Text, iCount%, 1) Like "#" Then
                  AfterNum = Mid(Text, iCount% + 1): Exit For
               End If
           Next
        End If
    End Function



    1



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    03.03.2017, 21:02

     [ТС]

    3

    pashulka, что код про кавычки и все остальное забыл



    0



    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    03.03.2017, 21:09

    4

    это Вы о старой теме, или уже о новой



    0



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    03.03.2017, 21:16

     [ТС]

    5

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



    0



    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    03.03.2017, 21:23

    6

    Имею наглость утверждать, что моя функция так и делает. Если несогласны, то покажите «неправильный» результат в файле .xls(.xlsm)



    0



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    03.03.2017, 21:37

     [ТС]

    7

    pashulka, извиняюсь, ошибся все тянет лишь только ноль надо убрать (попытался через элси и реплас убрать не получилось)

    массив правильный ответ pashulka
    про 123456789 прот прот прот
    «12345678, 321 ,ййй ,ййй ,ййй
    8777лл «п»ро лл «п»ро лл «п»ро
    456 ро 123458   0
    ццц 444 длдлд длдлд длдлд
    zszs 5- www? , — www? , — www? ,



    0



    toiai

    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    03.03.2017, 21:38

    8

    Лучший ответ Сообщение было отмечено АЛКС как решение

    Решение

    Предложу вариант с регулярными выражениями:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Sub pr2()
        Dim x As Range
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = "D+$"
            For Each x In Selection
                If .test(x) Then x.Offset(, 1) = .Execute(x)(0) '.Replace(x, "")
            Next
        End With
    End Sub



    1



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    03.03.2017, 21:42

     [ТС]

    9

    toiai, что-то вы сегодня не вдухе (результат внизу, д.б. любые все символы после цифры)

    массив правильный ответ pashulka toiai
    про 123456789 прот прот прот прот
    «12345678, 321 ,ййй ,ййй ,ййй ййй
    8777лл «п»ро лл «п»ро лл «п»ро ро
    456 ро 123458   0  
    ццц 444 длдлд длдлд длдлд длдлд
    zszs 5- www? , — www? , — www? ,



    0



    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    03.03.2017, 21:44

    10

    Цитата
    Сообщение от АЛКС
    Посмотреть сообщение

    лишь только ноль надо убрать

    АЛКС, зачем заниматься фальсификацией ? Моя функция не может возвратить 0, другое дело, если Вы зачем-то изменили тип возвращаемого значения со String $ на Variant.



    0



    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    03.03.2017, 21:45

    11

    Проверьте еще раз (см. код моего #)



    0



    АЛКС

    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    03.03.2017, 21:52

     [ТС]

    12

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

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    
    ... AfterNum(Text$)
        If Text Like "*[0-9]*[!0-9]" Then '"*#*[!0-9]"
           For iCount% = Len(Text) - 1 To 1 Step -1
               If Mid(Text, iCount%, 1) Like "#" Then
                  AfterNum = Mid(Text, iCount% + 1): Exit For
               End If
           Next
           End If

    Добавлено через 4 минуты
    toiai, запятую и прочие символы не видит (результат внизу)

    массив правильный ответ pashulka toiai
    про 123456789 прот прот прот прот
    «12345678, 321 ,ййй ,ййй ,ййй ,ййй
    8777лл , «п»ро лл , «п»ро лл , «п»ро лл «п»ро
    456 ро 123458   0  
    ццц 444 длдлд ! длдлд ! длдлд ! длдлд
    zszs 5- www? , — www? , — www? , — www? ,

    надо любые символы после цифры



    0



    4131 / 2235 / 940

    Регистрация: 01.12.2010

    Сообщений: 4,624

    03.03.2017, 21:54

    13

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



    0



    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    03.03.2017, 21:56

    14

    Уважаемый АЛКС, что-то у вас проверкой не то, а в общем какой запрос, такой и ответ.



    0



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    04.03.2017, 09:33

     [ТС]

    15

    pashulka, понял, СПАСИБО!!!

    Добавлено через 6 минут
    toiai, извиняюсь, СПАСИБО!!! тоже все работает!!! это что-то сегодня у меня верхтармашками все (пятница, день тяжелый был)

    Добавлено через 7 минут
    сам незнаю почему убрал доллар, и почему-то макрос кнопку с функцией перепутал

    Добавлено через 11 часов 0 минут
    toiai, скинь пожалуйста первоначальный потерн (только на буквы и пробел — без знаков препинания и пр.)

    Добавлено через 18 минут
    toiai, галочка обязательно д.б. в Microsoft VBScript Regular Expressions 5.5 для отработки патерна (если галка не будет стоять ошибочный результат некогда не выдаст)?



    0



    toiai

    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    04.03.2017, 11:07

    16

    Цитата
    Сообщение от АЛКС
    Посмотреть сообщение

    (только на буквы и пробел — без знаков препинания и пр.)

    Вот пример:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Sub pr4()
        Dim x As Range
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = "[а-яё }+$"
            For Each x In Selection
                If .test(x) Then x.Offset(, 1) = .Execute(x)(0)
            Next
        End With
    End Sub

    Добавлено через 4 минуты

    Цитата
    Сообщение от АЛКС
    Посмотреть сообщение

    галочка обязательно д.б. в Microsoft VBScript Regular Expressions 5.5 для отработки патерна (если галка не будет стоять ошибочный результат некогда не выдаст)?

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



    1



    АЛКС

    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    04.03.2017, 16:35

     [ТС]

    17

    toiai, что-то не хочет — ошибка 5019, заменил на «[а-яё¸ ]+$» ошибка ушла но результат не верный, подскажи пожалуйста что не так (потерн вещь крутая, но разобраться что-то не могу)

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Sub pr4()
        Dim x As Range
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = "[а-яё }+$"
            For Each x In Selection
                If .test(x) Then x.Offset(, 4) = .Execute(x)(0)
            Next
        End With
    End Sub
    массив правильный ответ то что у меня получилось
    про 123456789 прот прот прот
    «12345678, 321 ,ййй э ж ж ййй э ж ж ййй э ж ж
    8777 лл , «п»ро лл «п»ро ро
    456 рол 123458    
    ццц 444 длдлд ! длдлд  
    zszs 5- www? , www



    0



    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    04.03.2017, 18:14

    18

    Уточните, какие символы необходимо исключить (по примеру — -?,!)?



    0



    5 / 3 / 2

    Регистрация: 17.02.2016

    Сообщений: 344

    04.03.2017, 18:39

     [ТС]

    19

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



    0



    3217 / 966 / 223

    Регистрация: 29.05.2010

    Сообщений: 2,085

    04.03.2017, 19:48

    20

    Смотрю #17 кавычки остаются. Приведи примеры с результатом (особенно то-что описано в скобках #19).



    0



    Понравилась статья? Поделить с друзьями:
  • Excel миф во всех листах книги
  • Excel миф активная ячейка
  • Excel миф with word
  • Excel миф with range cells
  • Excel миф with function