Извлечение (вырезание) части строки с помощью кода VBA Excel из значения ячейки или переменной. Функции Left, Mid и Right, их синтаксис и аргументы. Пример.
Эта функция извлекает левую часть строки с заданным количеством символов.
Синтаксис функции Left:
Left(строка, длина)
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается левая часть;
- длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.
Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.
Функция Mid
Эта функция извлекает часть строки с заданным количеством символов, начиная с указанного символа (по номеру).
Синтаксис функции Mid:
Mid(строка, начало, [длина])
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается часть строки;
- начало — обязательный аргумент: числовое выражение, указывающее положение символа в строке, с которого начинается извлекаемая часть;
- длина — необязательный аргумент: числовое выражение, указывающее количество вырезаемых символов.
Если аргумент «начало» больше, чем количество символов в строке, функция Mid возвращает пустую строку. Если аргумент «длина» опущен или его значение превышает количество символов в строке, начиная с начального, возвращаются все символы от начальной позиции до конца строки.
Функция Right
Эта функция извлекает правую часть строки с заданным количеством символов.
Синтаксис функции Right:
Right(строка, длина)
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается правая часть;
- длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.
Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.
Пример
В этом примере будем использовать все три представленные выше функции для извлечения из ФИО его составных частей. Для этого запишем в ячейку «A1» строку «Иванов Сидор Петрович», из которой вырежем отдельные компоненты и запишем их в ячейки «A2:A4».
Sub Primer() Dim n1 As Long, n2 As Long Range(«A1») = «Иванов Сидор Петрович» ‘Определяем позицию первого пробела n1 = InStr(1, Range(«A1»), » «) ‘Определяем позицию второго пробела n2 = InStr(n1 + 1, Range(«A1»), » «) ‘Извлекаем фамилию Range(«A2») = Left(Range(«A1»), n1 — 1) ‘Извлекаем имя Range(«A3») = Mid(Range(«A1»), n1 + 1, n2 — n1 — 1) ‘Извлекаем отчество Range(«A4») = Right(Range(«A1»), Len(Range(«A1»)) — n2) End Sub |
На практике часто встречаются строки с лишними пробелами, которые необходимо удалить перед извлечением отдельных слов.
На чтение 12 мин. Просмотров 18.2k.
Функция VBA InStr является одной из наиболее часто используемых функций в VBA. Он используется для нахождения текста внутри строки и действительно отлично справляется с работой.
Тем не менее, она часто используется, чтобы помочь извлечь часть строки, и эту задачу она выполняет плохо.
Если вы обнаружили, что извлечение текста в VBA является болезненным процессом, тогда читайте дальше. Эта статья покажет вам более простой и лучший способ, используя три реальных примера!
Содержание
- Краткое руководство к статье
- Краткая справка
- Введение
- Когда VBA InStr, Left, Right и Mid полезны
- Работа со строками различной длины
- Использование функции VBA InStr с Mid
- Функция Split
- Пример 1: Получение части имени файла
- Пример 2: диапазон IP-адресов
- Пример 3. Проверьте правильность имени файла
- Заключение
Краткое руководство к статье
В следующей таблице приведено краткое руководство к тому, что рассматривается в этой статье.
Строка | Тип | Задача | Как |
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
Эти три функции работают нормально, если требуемый текст всегда одинакового размера и в одном и том же месте. Для других сценариев они требуют использования 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, т.е.
Затем мы даем 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 с 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
Как видите, это сложно сделать и требует немного усилий, чтобы выяснить. Нам нужно найти первое место. Тогда нам нужно найти второе место. Затем мы должны вычесть одно из другого, чтобы дать нам количество символов, которые нужно взять.
Если у вас есть строка с большим количеством слов, то это может быть очень сложно. К счастью для нас, гораздо проще было извлечь символы из строки. Это называется функцией 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. Как это работает:
- Функция Split разбивает строку везде, где есть пробел.
- Каждый элемент помещается в массив, начиная с нуля.
- Используя номер местоположения, мы можем получить доступ к элементу массива.
В следующей таблице показано, как может выглядеть массив после использования 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. Проверьте правильность имени файла
В этом последнем примере мы хотим проверить правильность имени файла. Есть три правила.
- Должно заканчиваться на .pdf
- Он должен содержать АА
- Он должен содержать 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 (т.е. Сопоставление с образцом) обычно обеспечивает более простое решение.
Содержание
- Функция Right
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- VBA Right Function
- Right Function in VBA Excel
- Examples of Excel VBA Right Function
- Example #1
- Example #2
- Dynamic Right Function in Excel VBA
- Loops with Right Function in Excel VBA
- Recommended Articles
- Примеры использования функций VBA
- Удаление ненужных символов
- Определение длины строки
- Сравнение и поиск строк
- Функция StrComp
- Функция InStr
- Разбиение строки
- Функция Left
- Функция Right
- Функция Mid
- Символы, которые нельзя ввести с клавиатуры
- Форматирование значений данных
- Именованные форматы для использования с функцией Format
- Символы-заполнители для создания пользовательских форматов
Функция Right
Возвращает переменную типа Variant (String), содержащую указанное число символов из правой части строки.
Синтаксис
Right(string, length)
Синтаксис функции Right содержит эти именованные аргументы.
Part | Описание |
---|---|
строка | Обязательный аргумент. Строковое выражение, из которого возвращаются самые правые символы. Если строка содержит значение NULL, возвращается NULL. |
длина | Обязательный элемент; Variant (Long). Числовое выражение, указывающее, сколько знаков должно быть возвращено. Если его значение равняется 0, возвращается пустая строка («»). Если его значение равняется или превышает число знаков в элементе строка, возвращается вся строка целиком. |
Замечания
Чтобы определить количество символов в строке, используйте функцию Len .
Используйте функцию RightB, если в строке содержатся байтовые данные. В этом случае аргумент length задает число возвращаемых байтов, а не символов.
Пример
В этом примере используется функция Right для возврата указанного количества знаков из правой части строки.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Right Function
Right Function in VBA Excel
The Right function is the same as in the Worksheet function and VBA. The use of this function is that it gives us the substring from a given string, but one can search from right to left of the string. This type of string function in VBA one may use with application.worksheet function method.
The RIGHT function in Excel VBA extracts characters from the right side of the supplied text values. In Excel, we have many text functions to deal with text-based data. Some useful functions are LEN, LEFT, RIGHT, and MID functions to extract characters from the text values. A common example of using these functions is extracting the first and last names separately from the full names.
The RIGHT formula is also there in the worksheet. In VBA, we need to rely on the worksheet function class to access the VBA RIGHT function. Therefore, we also have the built-in RIGHT function in VBA.
Table of contents
Now, look at the syntax below of the VBA RIGHT formula.
- String: It is our value. We are trying to extract the characters from the right side of the string from this value.
- Length: From the supplied String, how many characters do we need? If we need four characters from the right side, we can supply the argument as 4.
For example, if the string is “Mobile Phone.” We want to extract only the word “Phone,” so we can supply the argument like the one below.
RIGHT (“Mobile Phone,” 5)
We mentioned 5 because the word “Phone” has 5 letters. In the article’s next section, we will see how we can use it in VBA.
You are free to use this image on your website, templates, etc., Please provide us with an attribution link How to Provide Attribution? Article Link to be Hyperlinked
For eg:
Source: VBA Right Function (wallstreetmojo.com)
Examples of Excel VBA Right Function
The following are examples of Right function VBA Excel.
Example #1
We will show you a simple example to start the proceedings. Assume you have the string “New York,” and if you want to extract 3 characters from the right, follow the below steps to write the code.
Code:
Step 2: Now, we will assign the value by applying the RIGHT function for this variable.
Code:
Step 3: The first argument is String, and our string for this example is “New York.”
Code:
Step 4: Next is how many characters we need from the supplied string. In this example, we need 3 characters.
Code:
Code:
Run the code using the F5 key or manually and see the result in a message box.
In the word “New York” from the right side 3 characters are “ork.”
We will change the length from 3 to 4 to get the full value.
Code:
Run this code manually or using the F5 key. Then, we will get “York.”
Example #2
Now, look at one more example. This time, consider the string value as “Michael Clarke.”
If you supply the length as 6, we will get “Clarke.”
Code:
Run this code using the F5 key or manually to see the result.
Dynamic Right Function in Excel VBA
We have supplied the length argument numbers manually if you observe our previous two examples. But this is not the right process to do the job.
In each of the strings, right-side characters are different in each case. Therefore, we cannot refer to the length of the characters manually for each value differently. It is where the other string function, “Instr,” plays a vital role.
The Instr function returns the supplied character position in the supplied string value. For example, Instr (1,” Bangalore,” a”) returns the position of the letter “a” in the string “Bangalore” from the first (1) character.
In this case, the result is 2 because the first character position of the letter “a” is 2nd.
If we change the starting position from 1 to 3, it will return 5.
Instr (3,” Bangalore,” a”).
It returns 5 because we mentioned the starting position to look for the letter “a” only from the 3rd letter. So the position of the second appeared “a” is 5.
So, to find the space character of each string, we can use this. Once we find the space character position, we need to minus that from the total length of the string by using LEN.
For example, in the string “New York,” the total number of characters is 8, including space, and the position of the space character is 4th. So 8-4 = 4 right will extract 4 characters from the right.
Now, look at the below code for your reference.
Code:
In the above code variable, “L” will return 14, and the variable “S” will return 8.
In the VBA right formula, we have applied L – S, i.e., 14-8 = 6. So, from the right side, 6 characters, i.e., “Clarke.”
Loops with Right Function in Excel VBA
When we apply the VBA RIGHT function with many cells, we need to include this inside the loops. For example, look at the below image.
We cannot apply many lines of code to extract a string from the right side. So, we need to include loops. The below code will do it for the above data.
Code:
The result of this code is as follows.
Recommended Articles
This article has been a guide to VBA Right Function. Here, we learn how to use the Right function in Excel VBA to extract characters from the right side of text values, along with some simple to advanced examples and a downloadable Excel template. Below are some useful Excel articles related to VBA: –
Источник
Примеры использования функций VBA
Удаление ненужных символов
Зачастую строки в программе содержат ненужные символы пробелов в конце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать «неполадки» в работе программы.
В 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 — любые два строковых выражения, которые необходимо сравнивать.
Compare — необязательный аргумент, может быть любой из следующих предопределенных констант (если он опускается, то используется текущая установка Option Compare):
- vbBinaryCompare — бинарное сравнение двух строк;
- vbTextCompare — текстовое сравнение двух строк;
- vbDatabaseCompare — используется только в Microsoft Access.
При выполнении StrComp возвращается одно из следующих значений:
- -1, если String1 меньше String2;
- 0, если String1 и String2 равны;
- 1, если String1 больше String2.
В вышеприведенном листинге в текстовом режиме сравниваются две строки: «Строка по умолчанию» и » Строка по умолчанию». Результат сравнения = 1, т.е. «Строка по умолчанию» больше, чем » Строка по умолчанию».
Поэкспериментируйте с разнообразными строками для лучшего понимания работы функции StrComp.
Функция InStr
Функция InStr дает возможность определить, содержит ли одна строка другую строку.
StrComp ([Start, ] 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 — любое численное значение.
Функция возвращает копию 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.
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» будет представлена соответствующая таблица.
Форматирование значений данных
Очень часто формат данных на выходе программы по тем или иным причинам нас не совсем устраивает. Эту задачу решает функция Format.
VBA-функция Format идентична функции Format в Excel и использует те же символы-заполнители форматирования данных.
Format (Expression [, Format[, Firstdayofweek [, Firstweekofyear]]])
Expression — любое допустимое выражение (обязательный аргумент).
Format — допустимое выражение именованного или определенного пользователем формата.
Firstdayofweek — константа, которая определяет первый день недели.
Firstweekofyear — константа, которая определяет первую неделю года.
Чтобы использовать функцию 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.23445Е+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-часовом формате времени с добавленными АМ или РМ |
@ | Символьный заполнитель, отображает пробел, если не имеется соответствующего символа в форматируемой строке. |
Отображает все символы в верхнем регистре. | |
> | Отображает все символы в нижнем регистре. |
В начало страницы
В начало страницы
Источник
Right Function in VBA Excel
The Right function is the same as in the Worksheet function and VBA. The use of this function is that it gives us the substring from a given string, but one can search from right to left of the string. This type of string function in VBA one may use with application.worksheet function method.
The RIGHT function in Excel VBA extracts characters from the right side of the supplied text values. In Excel, we have many text functions to deal with text-based data. Some useful functions are LEN, LEFT, RIGHT, and MID functions to extract characters from the text values. A common example of using these functions is extracting the first and last names separately from the full names.
The RIGHT formula is also there in the worksheet. In VBA, we need to rely on the worksheet function class to access the VBA RIGHT function. Therefore, we also have the built-in RIGHT function in VBA.
Table of contents
- Right Function in VBA Excel
- Examples of Excel VBA Right Function
- Example #1
- Example #2
- Dynamic Right Function in Excel VBA
- Loops with Right Function in Excel VBA
- Recommended Articles
- Examples of Excel VBA Right Function
Now, look at the syntax below of the VBA RIGHT formula.
- String: It is our value. We are trying to extract the characters from the right side of the string from this value.
- Length: From the supplied String, how many characters do we need? If we need four characters from the right side, we can supply the argument as 4.
For example, if the string is “Mobile Phone.” We want to extract only the word “Phone,” so we can supply the argument like the one below.
RIGHT (“Mobile Phone,” 5)
We mentioned 5 because the word “Phone” has 5 letters. In the article’s next section, we will see how we can use it in VBA.
You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Right Function (wallstreetmojo.com)
Examples of Excel VBA Right Function
The following are examples of Right function VBA Excel.
You can download this VBA Right Function Excel Template here – VBA Right Function Excel Template
Example #1
We will show you a simple example to start the proceedings. Assume you have the string “New York,” and if you want to extract 3 characters from the right, follow the below steps to write the code.
Step 1: Declare the variable as VBA StringString functions in VBA do not replace the string; instead, this function creates a new string. There are numerous string functions in VBA, all of which are classified as string or text functions.read more.
Code:
Sub Right_Example1() Dim k As String End Sub
Step 2: Now, we will assign the value by applying the RIGHT function for this variable.
Code:
Sub Right_Example1() Dim k As String k = Right( End Sub
Step 3: The first argument is String, and our string for this example is “New York.”
Code:
Sub Right_Example1() Dim k As String k = Right("New York", End Sub
Step 4: Next is how many characters we need from the supplied string. In this example, we need 3 characters.
Code:
Sub Right_Example1() Dim k As String k = Right("New York", 3) End Sub
Step 5: We have 2 arguments to deal with, so we are done. Now, assign the value of this variable in the message box in VBAVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more.
Code:
Sub Right_Example1() Dim k As String k = Right("New York", 3) MsgBox k End Sub
Run the code using the F5 key or manually and see the result in a message box.
In the word “New York” from the right side 3 characters are “ork.”
We will change the length from 3 to 4 to get the full value.
Code:
Sub Right_Example1() Dim k As String k = Right("New York", 4) MsgBox k End Sub
Run this code manually or using the F5 key. Then, we will get “York.”
Example #2
Now, look at one more example. This time, consider the string value as “Michael Clarke.”
If you supply the length as 6, we will get “Clarke.”
Code:
Sub Right_Example1() Dim k As String k = Right("Michael Clarke", 6) MsgBox k End Sub
Run this code using the F5 key or manually to see the result.
Dynamic Right Function in Excel VBA
We have supplied the length argument numbers manually if you observe our previous two examples. But this is not the right process to do the job.
In each of the strings, right-side characters are different in each case. Therefore, we cannot refer to the length of the characters manually for each value differently. It is where the other string function, “Instr,” plays a vital role.
The Instr function returns the supplied character position in the supplied string value. For example, Instr (1,” Bangalore,” a”) returns the position of the letter “a” in the string “Bangalore” from the first (1) character.
In this case, the result is 2 because the first character position of the letter “a” is 2nd.
If we change the starting position from 1 to 3, it will return 5.
Instr (3,” Bangalore,” a”).
It returns 5 because we mentioned the starting position to look for the letter “a” only from the 3rd letter. So the position of the second appeared “a” is 5.
So, to find the space character of each string, we can use this. Once we find the space character position, we need to minus that from the total length of the string by using LEN.
For example, in the string “New York,” the total number of characters is 8, including space, and the position of the space character is 4th. So 8-4 = 4 right will extract 4 characters from the right.
Now, look at the below code for your reference.
Code:
Sub Right_Example3() Dim k As String Dim L As String Dim S As String L = Len("Michael Clarke") S = InStr(1, "Michael Clarke", " ") k = Right("Michael Clarke", L - S) MsgBox k End Sub
In the above code variable, “L” will return 14, and the variable “S” will return 8.
In the VBA right formula, we have applied L – S, i.e., 14-8 = 6. So, from the right side, 6 characters, i.e., “Clarke.”
Loops with Right Function in Excel VBA
When we apply the VBA RIGHT function with many cells, we need to include this inside the loops. For example, look at the below image.
We cannot apply many lines of code to extract a string from the right side. So, we need to include loops. The below code will do it for the above data.
Code:
Sub Right_Example4() Dim k As String Dim L As String Dim S As String Dim a As Integer For a = 2 To 5 L = Len(Cells(a, 1).Value) S = InStr(1, Cells(a, 1).Value, " ") Cells(a, 2).Value = Right(Cells(a, 1), L - S) Next a End Sub
The result of this code is as follows.
Recommended Articles
This article has been a guide to VBA Right Function. Here, we learn how to use the Right function in Excel VBA to extract characters from the right side of text values, along with some simple to advanced examples and a downloadable Excel template. Below are some useful Excel articles related to VBA: –
- VBA WorkBook
- VBA Split
- VBA End
- Call Sub in VBA
- VBA Double
In this Article
- Right Function
- VBA Right function Last n Characters
- VBA Right Function Last n Characters in a Variable
- VBA Right Function Last n Characters from a Cell
- VBA Right Function Trim off First Letter
- VBA Right to Extract Text after Space
- VBA Right to Extract Last Word
This tutorial will demonstrate how to use the Right VBA function to extract text from the right.
Right Function
VBA Right function Last n Characters
The VBA Right function returns the last n characters from a string:
Sub RightExample_1()
MsgBox Right("ABCDEFGHI", 4) 'Result is: "FGHI"
MsgBox Right("ABCDEFGHI", 2) 'Result is: "HI"
MsgBox Right("ABCDEFGHI", 1) 'Result is: "I"
MsgBox Right("ABCDEFGHI", 100) 'Result is: "ABCDEFGHI"
End Sub
VBA Right Function Last n Characters in a Variable
As shown above, you can define a string simply by entering text surrounded by quotation marks. But the RIGHT Function will also work with string variables. These examples will extract the last n characters from a string variable.
Sub RightExample_2()
Dim StrEx As String 'Define a string variable
StrEx = "ABCDEFGHI"
MsgBox Right(StrEx, 4) 'Result is: "FGHI"
MsgBox Right(StrEx, 2) 'Result is: "HI"
MsgBox Right(StrEx, 1) 'Result is: "I"
MsgBox Right(StrEx, 100) 'Result is: "ABCDEFGHI"
End Sub
VBA Right Function Last n Characters from a Cell
Strings can be defined in VBA code but also you can use values from cells. Read the value of a cell, keep it in a string variable, and extract last n characters from that Worksheet Cell value.
Sub RightExample_3()
Dim StrEx As String 'Define a string variable
'Read the value of cell A1 in worksheet Sheet1
StrEx = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value
'For this example the value of cell A1 is "ABCDEFG hI"
MsgBox Right(StrEx, 4) 'Result is: "G hI"
MsgBox Right(StrEx, 2) 'Result is: "hI"
MsgBox Right(StrEx, 1) 'Result is: "I"
MsgBox Right(StrEx, 100) 'Result is: "ABCDEFG hI"
End Sub
VBA Right Function Trim off First Letter
To remove letters from the beginning of a string, use the RIGHT Function along with the LEN Function.
The VBA LEN function counts the number of characters in a string:
Len(StrEx)
By combining the functions, we can remove a certain number of characters from the start of the string:
Sub RightExample_4()
Dim StrEx As String 'Define a string variable
StrEx = "ABCDEF"
MsgBox Right(StrEx, Len(StrEx)) 'Result is: "ABCDEF"
MsgBox Right(StrEx, Len(StrEx) - 1) 'Result is: "BCDEF"
MsgBox Right(StrEx, Len(StrEx) - 2) 'Result is: "CDEF"
End Sub
To extract the last name from a string with a full name, use the Right Function along with Len and Instr Function.
The VBA LEN function counts the number of characters in a string:
Len(StrEx)
The VBA InStr function searches for a substring inside a string and returns the position number of the substring.
InStr(StrEx, " ")
By combining the functions, we can extract the part after the first space from a phrase:
Sub RightExample_5()
Dim StrEx As String 'Define a string variable
StrEx = "Luke Skywalker"
MsgBox Right(StrEx, Len(StrEx) - InStr(StrEx, " "))
'Result is: "Skywalker"
StrEx = "Leonardo da Vinci"
MsgBox Right(StrEx, Len(StrEx) - InStr(StrEx, " "))
'Result is: "da Vinci"
StrEx = "May the Force be with you"
MsgBox Right(StrEx, Len(StrEx) - InStr(StrEx, " "))
'Result is: "the Force be with you "
End Sub
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
To extract the last word from a string with a phrase, use the Right Function along with Len and InstrRev Function.
As we have seen above, VBA LEN function counts the number of characters in a string:
Len(StrEx)
The VBA InStrRev Function searches for a substring inside a string and returns the position number of the substring. It starts the search from the end of the phrase (right to left) but returns the position from the start of the string (left to right).
InStrRev(StrEx, " ")
By combining the functions, we can extract the part after the last space from a phrase:
Sub RightExample_6()
Dim StrEx As String 'Define a string variable
StrEx = "Luke Skywalker"
MsgBox Right(StrEx, Len(StrEx) - InStrRev(StrEx, " "))
'Result is: "Skywalker"
StrEx = "Leonardo da Vinci"
MsgBox Right(StrEx, Len(StrEx) - InStrRev(StrEx, " "))
'Result is: "da Vinci"
StrEx = "May the Force be with you"
MsgBox Right(StrEx, Len(StrEx) - InStrRev(StrEx, " "))
'Result is: "you"
End Sub