Функции управления строками VBA и OperaTORs
⚡ Умное резюме
Функции обработки строк в VBA и OperaТоры объединяют, измеряют и эксtracТекст внутри макросов Excel. На этой странице объясняется оператор конкатенации, функции Left, Right, Mid, Len и InStr, разделение и объединение строк, а также наиболее часто встречающиеся ошибки, приводящие к сбоям в строковом коде.
Строка VBA OperaTORs
Строковые данные используются для хранения данных, состоящих из чисел, символов и символов. «Июль-2015» — пример строковых данных. Он состоит из
- Персонажи (июль)
- Символ (-)
- Numbers (2015)
Строковые операторы используются для управления строковыми данными. Например, вы можете объединить значение июля-2015 из первых трех букв месяца и года, например «Июль-3».
В следующей таблице показан строковый оператор конкатенации VBA.
| S / N | оператор | Описание | Пример | Результат |
|---|---|---|---|---|
| 1 | & | Объединение: этот оператор используется для объединения строк вместе. | "Джон Доу" | Иван Иванов |
Пример источника Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
Выполнение приведенного выше кода дает следующий результат
Амперсанд — не единственный символ, который используется для соединения текста, и разница между ними имеет значение, когда речь идёт о числах.
Разница между & и + при конкатенации строк
VBA принимает как амперсанд, так и знак плюс между двумя текстовыми значениями, поэтому начинающие часто считают их взаимозаменяемыми. Однако, если один из операндов является числом или пустым значением, они ведут себя по-разному, и только один из них является безопасным.
| Поведение | & (Амперсанд) | + (Плюс) |
|---|---|---|
| Два текстовых значения | К ним присоединяется: «Guru«& 99» возвращаются Guru99 | К ним присоединяется: «Guru” + “99” возвращает Guru99 |
| Текст и число | Преобразует число в текст: “Age ” & 30 возвращает Age 30 | Вызывает ошибку несоответствия типов. |
| Две числовые строки | «10» и «5» возвращают 105 | «10» + «5» могут в сумме дать 15. |
| Нулевое значение | Обрабатывает значение Null как пустую строку. | Возвращает Null и отбрасывает весь результат. |
💡 Совет: Для конкатенации всегда используйте амперсанд, а знак плюс оставьте для арифметические операции. Поставьте пробел перед и после амперсанда, потому что VBA распознает Total& как символ объявления типа Long.
Функции управления строками VBA
Манипулирование строками VBA — важный элемент Excel VBA для программирования макросов и строковые операции. Excel предоставляет различные типы функций манипуляции строками VBA, например:
- левыйиспользуется для extract символов с левой стороны строки
- Правильноиспользуется для extract символов с правой стороны строки
- серединеиспользуется для extracподстрока из середины строки
- Лена: используется для определения длины строки
- ИнСтр: используется для поиска позиции подстроки в строке.
- Отделка: используется для удаления пробелов с обоих концов строки
- Замените: используется для замены каждого вхождения одной подстроки на другую.
- UCase / LCase: используются для преобразования строки в верхний или нижний регистр
В таблице ниже показан синтаксис каждой функции с примером, так что вы можете скопировать шаблон прямо в макрос.
| Функция | Синтаксис | Пример | Результат |
|---|---|---|---|
| левый | Left(string, length) | Слева («Июль-2015», 3) | июль |
| Правильно | Right(string, length) | Правильно («Июль-2015», 4) | 2015 |
| середине | Mid(string, start, length) | Середина ("июль-2015", 5, 4) | 2015 |
| Лена | Len(string) | Лен (июль 2015 г.) | 8 |
| ИнСтр | InStr(start, string, substring) | InStr(1, «июль-2015», «-») | 4 |
| Отделка | Обрезка (строка) | Подрезать(" Guru99 “) | Guru99 |
| Замените | Replace(string, find, replace) | Заменить("Июль-2015", "-", "/") | Июл / 2015 |
| UCase | UCase (строка) | UCase(“guru99”) | ГУРУ99 |
Приведённый ниже макрос объединяет несколько таких функций для восстановления метки даты из её частей.
Sub StringFunctionsDemo() Dim Source As String Dim MonthPart As String Dim YearPart As String Source = "July-2015" ' Take the first three characters MonthPart = Left(Source, 3) ' Take the last four characters YearPart = Right(Source, 4) MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions" End Sub
При запуске макроса отображается Jul-2015. Каждая функция возвращает новое значение, оставляя исходную строку неизменной, поэтому результаты можно безопасно объединить в одном выражении.
Все эти функции работают только с одной строкой за раз. Когда одно значение содержит весь список, две другие функции обрабатывают его лучше.
Как разделить и объединить строки в VBA
Данные, вставляемые в Excel, часто представляют собой одно длинное значение с разделителем между элементами, например, «Pepsi, Coke, Fanta, Juice». Чтение таких данных с помощью функций Mid и InStr происходит медленно и ненадежно. VBA предоставляет пару функций, идеально подходящих именно для этой задачи.
Split Функция принимает строку, разделенную разделителями, и возвращает массив, начинающийся с нуля, с одним элементом на каждый элемент. Присоединяйся Функция Join выполняет обратную операцию, принимая массив и возвращая одну строку с разделителем между элементами. Обратите внимание, что Join работает с массивом, а не с двумя отдельными строками.
Sub SplitAndJoinDemo() Dim Source As String Dim Items() As String Dim i As Long Source = "Pepsi,Coke,Fanta,Juice" ' Break the value into an array on every comma Items = Split(Source, ",") For i = LBound(Items) To UBound(Items) Sheet1.Cells(i + 1, 1).Value = Items(i) Next i ' Rebuild the list with a different separator MsgBox Join(Items, " | "), vbOKOnly, "Joined List" End Sub
Цикл записывает каждый напиток в отдельную строку рабочего листа, после чего в окне сообщения отображается Pepsi | Coke | Fanta | Juice. Три момента делают этот шаблон надежным в рабочем коде:
- Результат, полученный с нуля: Функция Split всегда возвращает массив с номерами, начинающимися с 0, независимо от значения параметра Option Base, поэтому управляйте циклом с помощью параметров LBound и UBound, а не фиксированного числа.
- Объявить как String(): Присвойте результат динамическому строковому массиву. Указание фиксированного размера в начале приведет к ошибке компиляции.
- Пустой ввод: Разделение пустой строки возвращает массив без элементов, поэтому перед чтением Items(0) проверьте с помощью UBound.
Даже при правильном выборе функции строковый код дает сбои в ряде предсказуемых ситуаций.
Распространенные ошибки при работе со строками в VBA и способы их исправления.
Большинство строковых ошибок в Excel VBA возникают по ряду причин. Распознавание симптома позволяет избежать длительной отладки.
- Несоответствие типов при конкатенации: Между текстом и числом стоял знак плюс. Замените его амперсандом, который автоматически преобразует число.
- Функция InStr возвращает 0: Подстрока не найдена. Функция InStr возвращает 0, а не -1 в случае ошибки, поэтому перед передачей результата в функцию Mid проверьте, не превышает ли значение нуля.
- Недопустимый вызов процедуры в Mid или Left: Запрошенная длина отрицательная, или начальная позиция меньше 1. Защитите вызов с помощью Len, чтобы длина никогда не превышала строку.
- Сравнения, которые должны совпадать, но не совпадают: Пробелы в конце импортированных данных нарушают равенство. Оберните обе части в Trim и используйте StrComp, когда регистр следует игнорировать.
- Текст, который не станет числом: Значение типа «1,200» некорректно обрабатывается арифметическими операциями из-за разделителя. Удалите его с помощью функции Replace перед преобразованием с помощью CLng.
Загрузите Excel, содержащий приведенный выше код.
Скачайте указанный выше файл Excel. Code



