Извлечение (вырезание) части строки с помощью кода 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 |
На практике часто встречаются строки с лишними пробелами, которые необходимо удалить перед извлечением отдельных слов.
удаление символов средствами vba |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Здравствуйте уважаемые любители и профессионалы программы excel, поделитесь пожалуйста может у кого то есть готовый макросик, задача в том, что есть прайс лист, в столбцах D и G нужно убирать определённое количество символов как справа так и слева , было бы очень удобно чтобы в макросе просто ставить количество символов и символы бы убирались с данных столбцов! Изменено: vikttur — 04.06.2021 10:13:24 |
|
evgeniygeo Пользователь Сообщений: 2272 |
#2 04.06.2021 08:42:38 Артём Москвитин,
Изменено: evgeniygeo — 04.06.2021 09:47:26 |
||
msi2102 Пользователь Сообщений: 3134 |
#3 04.06.2021 09:07:10 Или так
А вообще если вы не разбираетесь в макросах, то зачем они Вам, можно просто формулами, например ЛЕВСИМВ(), ПРАВСИМВ(), ПСТР(), ДЛСТР(). Аналог выше приведенного макроса =ПСТР(K17;2+1;ДЛСТР(K17)-2-2) Изменено: msi2102 — 04.06.2021 09:15:31 |
||
МатросНаЗебре Пользователь Сообщений: 5507 |
#4 04.06.2021 09:09:57 Ещё вариант, работающий по выделенному диапазону.
Изменено: МатросНаЗебре — 04.06.2021 09:14:10 |
||
msi2102 Пользователь Сообщений: 3134 |
#5 04.06.2021 10:04:51 Или ещё так, символы удаляются в выделенном диапазоне видимых ячеек (если строка скрыта, то в ней не удаляются)
|
||
Артём Москвитин Пользователь Сообщений: 46 |
#6 04.06.2021 10:12:13
Жалуется на предпоследнюю строку, жёлтым почему то выделяет! Изменено: Артём Москвитин — 04.06.2021 10:13:48 |
||
msi2102 Пользователь Сообщений: 3134 |
#7 04.06.2021 10:16:27
Просто число удаляемых символов меньше общего количества символов. Возьмите макрос из сообщения 5 там это учтено, если количество удаляемых символов больше то удаляется полностью |
||
Спасибо огромное с этим разобрался, только непонятно почему при выполнении макроса в некоторых строках повляются решётки! Изменено: vikttur — 05.06.2021 00:18:47 |
|
msi2102 Пользователь Сообщений: 3134 |
#9 04.06.2021 10:49:57 Из за формата ячеек. К примеру после удалении символов остается 01.21, Excel понимает это как дату и автоматом ее меняет на 01.01.2021 (в зависимости от формата даты). Поэтому перед началом установите формат ячеек «Текст»
Изменено: msi2102 — 04.06.2021 10:54:54 |
||
Артём Москвитин Пользователь Сообщений: 46 |
#10 04.06.2021 12:26:38 Спасибо Вам огромное, всё работает! И спасибо всем кто откликнулся!!! Изменено: vikttur — 05.06.2021 00:19:01 |
In this Article
- Left Function
- VBA Left Function n First Characters
- VBA Left Function n First Characters in a Variable
- VBA Left Function n First Characters in a Cell
- VBA Left Function Trim off the Last Letter
- VBA Left to Extract First Name
- VBA Left$ Function vs Left Function
This tutorial will demonstrate how to use the Left VBA Function.
Left Function
The VBA Left function returns the first n characters from a string.
VBA Left Function n First Characters
The VBA Left function returns the first n characters from a string:
Sub LeftExample_1()
MsgBox Left("ABCDEFGHI", 4) 'Result is: "ABCD"
MsgBox Left("ABCDEFGHI", 2) 'Result is: "AB"
MsgBox Left("ABCDEFGHI", 1) 'Result is: "A"
MsgBox Left("ABCDEFGHI", 100) 'Result is: "ABCDEFGHI"
End Sub
VBA Left Function n First Characters in a Variable
As shown above, you can define a string simply by entering text surrounded by quotation marks. But the LEFT Function will also work with string variables. These examples will extract the first n characters from a string variable.
Sub LeftExample_2()
Dim StrEx As String 'Define a string variable
StrEx = "ABCDEFGHI"
MsgBox Left(StrEx, 4) 'Result is: "ABCD"
MsgBox Left(StrEx, 2) 'Result is: "AB"
MsgBox Left(StrEx, 1) 'Result is: "A"
MsgBox Left(StrEx, 100) 'Result is: "ABCDEFGHI"
End Sub
VBA Left Function n First Characters in 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 n first characters from that Worksheet Cell value.
Sub LeftExample_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 "A bCDEFGHI"
MsgBox Left(StrEx, 4) 'Result is: "ABCD"
MsgBox Left(StrEx, 2) 'Result is: "AB"
MsgBox Left(StrEx, 1) 'Result is: "A"
MsgBox Left(StrEx, 100) 'Result is: "ABCDEFGHI"
End Sub
VBA Left Function Trim off the Last Letter
To remove letters from the end of a string, use the LEFT 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 end of the string:
Sub LeftExample_4()
Dim StrEx As String 'Define a string variable
StrEx = "ABCDEF"
MsgBox Left(StrEx, Len(StrEx)) 'Result is: "ABCDEF"
MsgBox Left(StrEx, Len(StrEx) - 1) 'Result is: "ABCDE"
MsgBox Left(StrEx, Len(StrEx) - 2) 'Result is: "ABCD"
End Sub
To extract the first name from a string with a full name, use the Left Function along with the Instr Function.
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 first word from a phrase:
Sub LeftExample_5()
Dim StrEx As String 'Define a string variable
StrEx = "Alexander Graham Bell"
MsgBox Left(StrEx, InStr(StrEx, " "))
'Result is: "Alexander " (notice the space at the end)
MsgBox Left(StrEx, InStr(StrEx, " ") - 1)
'Result is: "Alexander" (NO space at the end)
StrEx = "Leonardo da Vinci"
MsgBox InStr(StrEx, " ")
'Result is: 9 because space is found in position 9
MsgBox Left(StrEx, InStr(StrEx, " ") - 1)
'Result is: "Leonardo"
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
VBA Left$ Function vs Left Function
Both the Left and the Left$ function will return the same answer if the variable where the data is being returned to is declared as a string. However, if the variable has been declared as a variant, then the Left function is allowed to return NULL values whereas the Left$ function can only return string values.
If, for example, you are truing to return some data from an Access query, but the data returned is a NULL value, the Left$ function will return an error.
Have a look at the code below:
In the above example, even though our variable has been declared as a variant, the Left$ function prevents the variable being populated with the NULL value.
In the code below however, the variable is populated with the NULL value.
String manipulation is a crucial skill in VBA programming. The skill level of a VBA developer is often determined by how well he/she can manipulate string data. Excel is very strong in mathematics operations and comes with loads of built-in calculation functions. But text manipulation is less straightforward and always requires some creativity and experience.
In this article, I am going to show you how to remove characters from strings. We’ll go through a series of common scenarios, and you’ll learn about how to tackle them with the Replace, Left, Right, Trim, and Instr VBA functions.
Remove All Occurrences of Specific Characters from Strings
The basic VBA skill to remove characters from a string is with the Replace method.
The basic syntax of VBA Replace method you need to remember is:
Replace (inputString, findwhat, replace)
Example 1 is the most typical approach where the Replace method is used to remove all occurrences of specific character(s) from the input string.
Example 1 – The Most Common Approach, Case Sensitive
Here we want to remove all occurrence of “b” from variable input1,”aabbccAABBCC”, with the expected output of “aaccAABBCC”. In line 6 of the macro, the Replace method looks for “b” and replaces it with an empty string “”.
Sub removechar() Dim input1 As String Dim result As String input1 = "aabbccAABBCC" 'to remove all occurrences of b from input string result = Replace(input1, "b", "") MsgBox result End Sub
After running the macro, the answer is displayed in the message box:
However, this approach with the Replace method is case sensitive. Only the lower case “b” characters were removed but not the “B”. We can modify our macro to automatically handle both lower and upper cases.
Example 2 – Simple Non-Case Sensitive Approach
We can enhance the macro to remove both the lower case “b” and upper case “B” from the input string. In macro removechar2
below, the character to be remove is defined in line 6. Then, in line 7, we first remove the lower case, and then in line 8 the upper case is also removed.
Sub removechar2() Dim input1 As String Dim remove1 As String Dim result As String input1 = "aabbccaabbcc" remove1 = "b" 'this is the char to be removed result = Replace(input1, LCase(remove1), "") result = Replace(result, UCase(remove1), "") MsgBox result End Sub
Remove the First n Occurrences of Specific Characters from Strings
Sometimes we want to remove only the first n occurrences of specific characters. This is easy to do by using the optional argument “count” of the VBA Replace method:
Syntax:
Replace (inputString, findwhat, replace, start_position, count)
The following macro “removechar3” removes the first 3 occurrences of “b” from input1 “aabbccaabbcc”. The expected result is “aaccaabcc”.
Sub removechar3() Dim input1 As String Dim remove1 As String Dim result As String input1 = "aabbccaabbcc" remove1 = "b" 'remove the first 3 occurrences of "b" from input string result = Replace(input1, remove1, "", , 3) MsgBox result End Sub
After running the macro, the answer is displayed in the message box:
Remove Characters from Left of Strings
Here we have a list of staff IDs in the format “X12345678” with 9 characters each. We want to remove the leading letter from every ID in the list.
We can use the Right function for this purpose. While each staff ID is 9 characters long, removing 1 character from the left is equivalent to outputting 8 (9 minus 1) characters from the right.
Sub removeLeft() Dim cell As Range Dim MyRange As Range Dim tmp As String Set MyRange = Selection 'this is your range of data 'loop through every cell in range and remove 1 char from left For Each cell In MyRange.Cells tmp = cell.Value 'output n - 1 characters from the right cell.Value = Right(tmp, Len(tmp) - 1) Next End Sub
However, after running the above macro, we realize that it did not fully meet our expectations (see the picture below). Because some of the original IDs have numeric parts with leading zeros. (Lines 1, 5 and 7), Excel is too clever and automatically trims those zeros. (e.g. 021 is treated by Excel as 21.) We want to make sure the zeros remain after the leading letters were removed.
We can achieve this by forcing Excel to treat numeric data as strings by adding a leading apostrophe to the result. For example, ‘021 will be treated by Excel as string. To achieve this, we can modify line 9 of the macro as shown below:
Sub removeLeft() Dim cell As Range Dim MyRange As Range Dim tmp As String Set MyRange = Selection 'this is your range of data 'loop through every cell in range and remove 1 char from left For Each cell In MyRange.Cells tmp = cell.Value 'output n-1 char from the right, and add apostrophe cell.Value = "'" & Right(tmp, Len(tmp) - 1) Next End Sub
Remove Characters from Right of Strings
Example 1 – Remove a Fixed Number of Characters from the Right
To remove a fixed number of characters x from the right of strings, you can use the LEFT function. The macro is almost the same as the macro above for removing characters from the left.
Sub removeRight() Dim cell As Range Dim MyRange As Range Dim tmp As String Set MyRange = Selection 'this is your range of data 'loop through every cell in range and remove 1 char from right For Each cell In MyRange.Cells tmp = cell.Value 'output n - 1 characters from the left cell.Value = Left(tmp, Len(tmp)-3) Next End Sub
Example 2 – Remove a Variable Number of Characters from the Right
If we want to remove characters from the right based on the variable position of a certain character(s), we can use the INSTR function in conjunction with the LEFT function.
Here we have a list of email addresses. We want to remove the domain names on the right of each address.
We can find out the position of “@” with the following VBA statement, which in the case returns 9. Therefore, to remove the domain name, we have to extract the first 8 characters.
x = Instr("[email protected]","@")
The following macro loops through every cell in a selected range and removes the domain names.
Sub removeDomain() Dim cell As Range Dim MyRange As Range Dim tmp As String Set MyRange = Selection 'this is your range of data 'loop through every cell in range and remove characters after @ For Each cell In MyRange.Cells tmp = cell.Value ' cell.Value = Left(tmp, InStr(tmp, "@") - 1) Next End Sub
Here’s a couple key takeaways to remember about removing characters from one side or the other of strings:
Scenario | Function to be used |
Remove characters from the Left | RIGHT |
Remove characters from the Right | LEFT |
Position specific remove | INSTR (+ LEFT/RIGHT) |
Removing Unwanted Spaces from Strings
There are two common scenarios where we want to remove unwanted spaces from strings:
- Strings with leading and trailing spaces
- Unwanted extra spaces within string (e.g. double spaces)
Remove Leading and Trailing Spaces from Strings
We can use the Trim function to remove leading and trailing spaces. In the example below we have an input string of " This is my data "
(line 5). The Trim function is used in line 6. The macro produces a message box to show a comparison of the input and output.
Sub removespace1() Dim MyInput As String Dim result As String 'here is the input string with leading and trailing spaces MyInput = " This is my data " result = Trim(MyInput) 'remove leading and trailing spaces 'display result in msgbox MsgBox "Original text: >" & MyInput & "<" & Chr(10) & _ "Original length: " & Len(MyInput) & Chr(10) & _ "Final text: >" & result & "<" & Chr(10) & _ "Final length: " & Len(result) End Sub
Removing “extra spaces” is different from removing “all spaces.” You can visualize the difference here:
The macro removeAllUnwantedSpace
below removes leading and trailing spaces as well as all unwanted repeated spaces. Pay special attention to line 10 to 12. The same statement must be run 3 times to ensure all repeated spaces are replaced with single spaces.
Sub removeAllUnwantedSpace() Dim MyInput As String Dim result As String 'here is the input string with unwanted spaces MyInput = " This is my data " 'first remove leading and trailing spaces result = Trim(MyInput) 'then replace double spaces with single space 'this step has to be repeated 3 times result = Replace(result, " ", " ") result = Replace(result, " ", " ") result = Replace(result, " ", " ") 'display result in msgbox MsgBox "Original text: >" & MyInput & "<" & Chr(10) & _ "Original length: " & Len(MyInput) & Chr(10) & _ "Final text: >" & result & "<" & Chr(10) & _ "Final length: " & Len(result) End Sub
Remove Numbers from String
Sometimes we want to remove all numeric characters from strings. We can achieve this with a For-Next loop to remove each of the digits from 0 to 9.
The custom VBA function below shows how to remove all numeric characters from an input string.
Function removenumbers(ByVal input1 As String) As String Dim x Dim tmp As String tmp = input1 'remove numbers from 0 to 9 from input string For x = 0 To 9 tmp = Replace(tmp, x, "") Next 'return the result string removenumbers = tmp End Function
You could also consider using a regular expression for a task like this.
Remove line breaks from string
Sometimes our data may contain line breaks with the strings and we want to remove them. A line break is actually an invisible character. We can simply use the VBA Replace function to remove them.
There are 2 types of line break characters. The most common one is Chr(10). But a less common one is Chr(13). Chr(13) is more common on the Mac. We can use a statement like this to remove such line break characters:
result = Replace(myString, Chr(10)) 'or result = Replace(Replace(myString, Chr(10)), Chr(13))
Remove Accented Characters from Names
There is a special situation that we want to remove the “accent” from accented characters in names. As an example, we have a list of French names below. In this case, we want to stick to “regular” English letters. Our expected result is shown on the right.
The macro “removeAccented
” below loops through every cell in a selected range and replaces all accented characters with the corresponding regular English letters.
At the beginning of the macro, two constant strings were defined: “Accent” holds all accented characters; and “Normal” holds the corresponding regular English letters.
The For-Next loop (which begins in line 13 of code) loops through every accented character in the constant “Accent” and replaces with the alphabet in the same position in the constant “Normal”, e.g. “à” which is in position 1 of “Accent” will be replaced with “a” in position 1 of “Normal”.
Sub removeAccented() Const Accent = _ "àáâãäåçèéêëìíîïðñòóôõöùúûüýÿŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ" Const Normal = _ "aaaaaaceeeeiiiidnooooouuuuyySZszYAAAAAACEEEEIIIIDNOOOOOUUUUY" Dim cell As Range Dim x As Integer Dim tmp As String 'loop through each cell in selection For Each cell In Selection.Cells tmp = cell.Value 'loop through the constants, and replace For x = 1 To Len(Accent) tmp = Replace(tmp, Mid(Accent, x, 1), Mid(Normal, x, 1)) Next cell.Value = tmp Next End Sub
Conclusion
You can see in the above examples that text manipulation in Excel VBA indeed requires some creativity. There is no single universal approach to remove characters from strings which can serve all scenarios. The Replace function is the most important function to use. In some cases, you also have to apply the Left, Right, Trim, Instr functions.
The technique to loop through cells in a range has also been used in most of the examples above. You may refer to my article on this topic for more examples on the topic.
Tagged with: Characters, InStr, LEFT, Line Breaks, Replace, RIGHT, Spaces, String Processing, Strings, Substring, Trimming, VBA
Содержание
- Строковые функции (Visual Basic)
- Пример: UCase
- Пример: LTrim
- Пример: Mid
- Пример: Len
- Пример: InStr
- Пример: формат
- VBA Excel. Функции Left, Mid, Right (вырезать часть строки)
- Функция Left
- Функция Mid
- Функция Right
- Пример
- Примеры использования функций VBA
- Удаление ненужных символов
- Определение длины строки
- Сравнение и поиск строк
- Функция StrComp
- Функция InStr
- Разбиение строки
- Функция Left
- Функция Right
- Функция Mid
- Символы, которые нельзя ввести с клавиатуры
- Форматирование значений данных
- Именованные форматы для использования с функцией Format
- Символы-заполнители для создания пользовательских форматов
Строковые функции (Visual Basic)
В следующей таблице перечислены функции, предоставляемые Visual Basic в Microsoft.VisualBasic.Strings классе для поиска строк и управления ими. Их можно рассматривать как встроенные функции Visual Basic; то есть вам не нужно вызывать их как явные члены класса, как показано в примерах. В классе доступны System.String дополнительные методы, а в некоторых случаях — дополнительные.
Метод платформа .NET Framework | Описание |
---|---|
Asc, AscW | Возвращает значение, Integer представляющее код символа, соответствующий символу. |
Chr, ChrW | Возвращает знак, связанный с указанным кодом знака. |
Filter | Возвращает массив (с индексацией от нуля), который содержит подмножество массива типа String , выделяемое согласно указанным условиям фильтрации. |
Format | Возвращает строку, отформатированную в соответствии с инструкциями, содержащимися в формате выражения String . |
FormatCurrency | Возвращает выражение в формате денежной единицы с использованием символа денежной единицы, определенного в системной панели управления. |
FormatDateTime | Возвращает строковое выражение, представляющее значение даты и времени. |
FormatNumber | Возвращает выражение в формате числа. |
FormatPercent | Возвращает выражение в виде процента (умноженное на 100) с символом % в конце. |
InStr | Возвращает целое число, указывающее начальную позицию первого вхождения одной строки в другую. |
InStrRev | Возвращает позицию первого вхождения одной строки в другую, начиная с правого конца строки. |
Join | Возвращает строку, образуемую путем соединения нескольких подстрок, содержащихся в массиве. |
LCase | Возвращает строку или символ, преобразованные в нижний регистр. |
Left | Возвращает строку, содержащую указанное число знаков с левой стороны строки. |
Len | Возвращает целое число, содержащее количество символов в строке. |
LSet | Возвращает выровненную по левому краю строку запрашиваемой длины, содержащую указанную строку. |
LTrim | Возвращает строку, содержащую копию указанной строки без пробелов в начале. |
Mid | Возвращает строку, содержащую указанное число символов из строки. |
Replace | Возвращает строку, в которой указанная подстрока заданное число раз заменена другой подстрокой. |
Right | Возвращает строку, содержащую указанное число знаков с правой стороны строки. |
RSet | Возвращает выровненную по правому краю строку, содержащую указанную строку, настроенную под указанную длину. |
RTrim | Возвращает строку, содержащую копию указанной строки без пробелов в конце. |
Space | Возвращает строку, состоящую из указанного числа пробелов. |
Split | Возвращает одномерный массив (с индексацией от нуля), содержащий указанное число подстрок. |
StrComp | Возвращает -1, 0 или 1 в зависимости от результата сравнения строк. |
StrConv | Возвращает строку, преобразованную как указано. |
StrDup | Возвращает строку или объект, состоящие из указанного знака, повторенного определенное количество раз. |
StrReverse | Возвращает строку, содержащую те же знаки, что и в заданной строке, но в противоположном порядке. |
Trim | Возвращает строку, содержащую копию указанной строки без начальных или конечных пробелов. |
UCase | Возвращает строку или знак, содержащий указанную строку, преобразованную в верхний регистр. |
С помощью оператора Option Compare можно указать, сравниваются ли строки с помощью порядка сортировки текста без учета регистра, определяемого языковым стандартом системы ( Text ) или внутренним двоичным представлением символов ( Binary ). Метод сравнения текста по умолчанию — Binary .
Пример: UCase
В данном примере функция UCase используется для возврата строки в верхнем регистре.
Пример: LTrim
В данном примере функция LTrim используется, чтобы убрать пробелы в начале, а функция RTrim — чтобы убрать пробелы в конце строковой переменной. Функция Trim в примере используется для удаления обоих типов пробелов.
Пример: Mid
В этом примере функция используется Mid для возврата указанного количества символов из строки.
Пример: Len
В данном примере Len используется для возврата числа знаков в строке.
Пример: InStr
В данном примере функция InStr используется для возврата позиции первого вхождения одной строки в другую.
Пример: формат
В данном примере показаны различные способы использования функции Format для форматирования значений с применением как форматов String , так и определенных пользователем форматов. Фактическое отображение системой разделителя даты ( / ), разделителя времени ( : и индикаторов AM/PM ( t и tt ) зависит от региональных параметров, применяемых кодом. При отображении времени и даты в среде разработки используется короткий формат времени и даты региональных установок кода.
Для языков, использующих 24-часовой формат, индикаторы AM/PM ( t и tt ) не отображаются.
Источник
VBA Excel. Функции Left, Mid, Right (вырезать часть строки)
Извлечение (вырезание) части строки с помощью кода VBA Excel из значения ячейки или переменной. Функции Left, Mid и Right, их синтаксис и аргументы. Пример.
Функция Left
Эта функция извлекает левую часть строки с заданным количеством символов.
Синтаксис функции Left:
Left(строка, длина)
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается левая часть;
- длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.
Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.
Функция Mid
Эта функция извлекает часть строки с заданным количеством символов, начиная с указанного символа (по номеру).
Синтаксис функции Mid:
Mid(строка, начало, [длина])
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается часть строки;
- начало — обязательный аргумент: числовое выражение, указывающее положение символа в строке, с которого начинается извлекаемая часть;
- длина — необязательный аргумент: числовое выражение, указывающее количество вырезаемых символов.
Если аргумент «начало» больше, чем количество символов в строке, функция Mid возвращает пустую строку. Если аргумент «длина» опущен или его значение превышает количество символов в строке, начиная с начального, возвращаются все символы от начальной позиции до конца строки.
Функция Right
Эта функция извлекает правую часть строки с заданным количеством символов.
Синтаксис функции Right:
Right(строка, длина)
- строка — обязательный аргумент: строковое выражение, из значения которого вырезается правая часть;
- длина — обязательный аргумент: числовое выражение, указывающее количество извлекаемых символов.
Если аргумент «длина» равен нулю, возвращается пустая строка. Если аргумент «длина» равен или больше длины строки, возвращается строка полностью.
Пример
В этом примере будем использовать все три представленные выше функции для извлечения из ФИО его составных частей. Для этого запишем в ячейку «A1» строку «Иванов Сидор Петрович», из которой вырежем отдельные компоненты и запишем их в ячейки «A2:A4».
Источник
Примеры использования функций 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-часовом формате времени с добавленными АМ или РМ |
@ | Символьный заполнитель, отображает пробел, если не имеется соответствующего символа в форматируемой строке. |
Отображает все символы в верхнем регистре. | |
> | Отображает все символы в нижнем регистре. |
В начало страницы
В начало страницы
Источник
Excel VBA Left
VBA Left is also one of the worksheet functions categorized under the text functions used in VBA with the application.worksheet method. It returns the specified number of characters from the left part of the string.
Some of the excel functionsExcel functions help the users to save time and maintain extensive worksheets. There are 100+ excel functions categorized as financial, logical, text, date and time, Lookup & Reference, Math, Statistical and Information functions.read more are integrated with VBA as well. Of all the many text functions, VBA LEFT is one of those functions we use quite often than other formulas.
If you know the excel LEFT functionThe left function returns the number of characters from the start of the string. For example, if we use this function as =LEFT ( «ANAND»,2), the result will be AN.read more, then the VBA LEFT function is the same. It can extract the characters from the left side of the string or the value given by the user.
The syntax of the LEFT function is the same as in the worksheet function.
It has two arguments.
- String: This is nothing but the value or cell referenceCell reference in excel is referring the other cells to a cell to use its values or properties. For instance, if we have data in cell A2 and want to use that in cell A1, use =A2 in cell A1, and this will copy the A2 value in A1.read more. From this value, we are looking to chop the characters.
- Length: How many characters do you want to extract from the supplied string? It should be a numerical value.
Table of contents
- Excel VBA Left
- How to use Excel VBA Left Function?
- Example #1
- Example #2 – LEFT with Other Functions
- Things to Remember
- Recommended Articles
- How to use Excel VBA Left Function?
How to use Excel VBA Left Function?
You can download this VBA Left Function Template here – VBA Left Function Template
Example #1
Assume you have the word “Sachin Tendulkar,” and you want only the first 6 characters from this word. We will show how to extract from the left using the LEFT function in VBA.
Step 1: Create a macro name and define the variable as a string.
Code:
Sub Left_Example1() Dim MyValue As String End Sub
Step 2: Now, assign a value to this variable.
Code:
Sub Left_Example1() Dim MyValue As String MyValue = End Sub
Step 3: Open the LEFT function.
Code:
Sub Left_Example1() Dim MyValue As String MyValue = Left( End Sub
Step 4: The first argument is to tell what is the string or value. Our value here is “Sachin Tendulkar.”
Code:
Sub Left_Example1() Dim MyValue As String MyValue = Left("Sachin Tendulkar", End Sub
Step 5: Length is nothing but how many characters we need from the left. We need 6 characters.
Code:
Sub Left_Example1() Dim MyValue As String MyValue = Left("Sachin Tendulkar", 6) End Sub
Step 6: Show the value in the VBA MsgBoxVBA 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 Left_Example1() Dim MyValue As String MyValue = Left("Sachin Tendulkar", 6) MsgBox MyValue End Sub
Step 7: Run the macro using the F5 key or manually through a run option to get the result in a message box.
Output:
Instead of showing the result in a message box, we can store this result in one of the cells in our Excel worksheet. Then, we need to add the cell reference and variable value.
Code:
Sub Left_Example1() Dim MyValue As String MyValue = Left("Sachin Tendulkar", 6) Range("A1").Value = MyValue End Sub
We will get the value in cell A1 if you run this code.
Example #2 – LEFT with Other Functions
In the above case, we have directly supplied the length of the characters we need from the left direction, but this is more suitable for one or two values. For example, assume the list of values you have in your Excel sheet below.
In each case, first-name characters are different. Therefore, we cannot directly specify the number of characters we need from each name.
That is where the beauty of other functions will come into the picture. For example, we can use the “VBA Instr” function to dynamically supply the number of characters.
In the above names, we need all the characters from the left until we reach the space character. So, the Instr function can return those many characters.
Step 1: Start an excel macroA macro in excel is a series of instructions in the form of code that helps automate manual tasks, thereby saving time. Excel executes those instructions in a step-by-step manner on the given data. For example, it can be used to automate repetitive tasks such as summation, cell formatting, information copying, etc. thereby rapidly replacing repetitious operations with a few clicks.
read more name and define a variable as a string.
Code:
Sub Left_Example2() Dim FirstName As String End Sub
Step 2: Assign the value to the variable through the LEFT function.
Code:
Sub Left_Example2() Dim FirstName As String FirstName = Left( End Sub
Step 3: Here, we need to refer to the cell to get the value from the cells. So write the code as CELLE (2,1).Value.
Code:
Sub Left_Example2() Dim FirstName As String FirstName = Left(Cells(2,1).Value, End Sub
Step 4: The next thing is how many characters we need. After applying the LEFT function, do not manually enter the characters’ length. Apply the Instr function.
Code:
Sub Left_Example2() Dim FirstName As String FirstName = Left(Cells(2, 1).Value, InStr(1, Cells(2, 1).Value, " ")) End Sub
Step 5: Store this result in the B2 cell. So the code is CELLS (2,2).Value = FirstName.
Code:
Sub Left_Example2() Dim FirstName As String FirstName = Left(Cells(2, 1).Value, InStr(1, Cells(2, 1).Value, " ")) Cells(2, 2).Value = FirstName End Sub
Step 6: Run this code manually, or through F5, we will get the first name.
We got the first name for one name, but we also have several others. So, if we cannot write 100 lines of code to extract, then how do we extract?
It is where the beauty of loops comes into the picture. Below is the loop code, which can eliminate all the unwanted steps and do the job in 3 lines.
Code:
Sub Left_Example2() Dim FirstName As String Dim i As Integer For i = 2 To 9 FirstName = Left(Cells(i, 1).Value, InStr(1, Cells(i, 1).Value, " ") - 1) Cells(i, 2).Value = FirstName Next i End Sub
Note: The Instr function also returns space character, so we need to minus 1 from the Instr result.
If you run this code, we will get the first name values.
Output:
Things to Remember
- We can extract the LEFT function only from the left.
- VBA Instr function finds the position of the supplied character in the string.
Recommended Articles
This article has been a guide to VBA Left Function. Here, we learn how to use the Left function to extract the characters from the left side of the string, along with some examples and a downloadable Excel template. Below are some useful Excel articles related to VBA: –
- Select a Range in VBA
- Excel VBA Functions
- VBA DIR Function
- VBA Select Case