Функції маніпулювання рядками VBA & Operaторс
⚡ Розумний підсумок
Функції маніпулювання рядками VBA та Operaтори поєднують, вимірюють та визначаютьtracтекст у макросах Excel. На цій сторінці пояснюється оператор конкатенації, функції Left, Right, Mid, Len та InStr, розділення та об'єднання, а також помилки, які найчастіше порушують код рядків.

Рядок VBA Operaторс
Рядкові дані використовуються для зберігання даних, які складаються з чисел, символів і символів. «Липень 2015» є прикладом рядкових даних. Він складається з
- Персонажі (лип.)
- Символ (-)
- Numbers (2015)
Рядкові оператори використовуються для маніпулювання рядковими даними. Наприклад, ви можете об’єднати значення липня-2015 із перших 3 літер місяця та року, як «липень-2015».
У наведеній нижче таблиці показано рядковий оператор конкатенації VBA.
| S / N | Operaтор | Опис | Приклад | Вихід |
|---|---|---|---|---|
| 1 | & | Concatenate: цей оператор використовується для об’єднання рядків | «Джон» і «Лань» | Джон Доу |
Приклад джерела Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
Виконання наведеного вище коду дає наступний результат
Амперсанд — не єдиний символ, який з'єднує текст, і різниця між ними має значення, коли йдеться про числа.
Різниця між & та + для об'єднання рядків
VBA приймає як амперсанд, так і знак плюс між двома текстовими значеннями, тому новачки часто сприймають їх як взаємозамінні. Вони поводяться по-різному, щойно один операнд є числом або порожнім значенням, і лише один з них є безпечним.
| Поведінка | & (Амперсанд) | + (плюс) |
|---|---|---|
| Два текстові значення | Приєднується до них: «Guru«» та «99» повертається Guru99 | Приєднується до них: «Guru«+ повернення «99» Guru99 |
| Текст і число | Перетворює число на текст: «Вік» та 30 повертає Вік 30 | Викликає помилку невідповідності типів |
| Два числові рядки | «10» та «5» повертає 105 | «10» + «5» можуть додати та повернути 15 |
| Нульове значення | Обробляє Null як порожній рядок | Повертає Null та відкидає весь результат |
💡 Порада: Завжди використовуйте амперсанд для конкатенації та залиште знак плюс для арифметичні діїСтавте пробіл перед і після амперсанда, оскільки запис Total& зчитується VBA як символ оголошення типу Long.
Функції маніпулювання рядками VBA
Маніпуляції рядками VBA є важливим елементом у Excel VBA для програмування макросів і рядкові операції. Excel надає різні типи функцій обробки рядків VBA, наприклад:
- Ліве: використовується для колишньогоtract символів з лівого боку рядка
- правий: використовується для колишньогоtract символів з правого боку рядка
- В середині: використовується для колишньогоtracпідрядок із середини рядка
- Лена: використовується для визначення довжини рядка
- InStr: використовується для пошуку позиції підрядка в рядку
- Оздоблення: використовується для видалення пробілів з обох кінців рядка
- заміщати: використовується для заміни кожного входження одного підрядка на інший
- UCase / LCase: використовуються для перетворення рядка у верхній або нижній регістр
У таблиці нижче показано синтаксис кожної функції з розв'язаним прикладом, тож ви можете скопіювати шаблон безпосередньо в макрос.
| функція | синтаксис | Приклад | Вихід |
|---|---|---|---|
| Ліве | Ліворуч(рядок, довжина) | Ліворуч («Липень 2015», 3) | Липень |
| правий | Праворуч(рядок, довжина) | Праворуч («Липень 2015», 4) | 2015 |
| В середині | Середина(рядок, початок, довжина) | Середина («Липень 2015», 5, 4) | 2015 |
| Лена | Len(рядок) | Лен («Липень 2015») | 8 |
| InStr | InStr(початок, рядок, підрядок) | InStr(1, «Липень-2015», «-«) | 4 |
| Оздоблення | Обрізати (рядок) | Обрізати(” Guru99 “) | Guru99 |
| заміщати | Замінити(рядок, знайти, замінити) | Замінити («Липень-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
Запуск макросу відображає липень 2015 року. Кожна функція повертає нове значення та залишає початковий рядок недоторканим, тому результати можна безпечно об'єднати в одному виразі.
Ці функції працюють з одним рядком одночасно. Коли одне значення містить цілий список, дві інші функції обробляють його краще.
Як розділяти та об'єднувати рядки у VBA
Дані, вставлені в Excel, часто надходять у вигляді одного довгого значення з роздільником між кожним елементом, наприклад, «Pepsi, Coke, Fanta, Juice». Зчитування цього значення з Mid та InStr є повільним і нестабільним. VBA надає пару відповідних функцій саме для цього завдання.
розщеплений приймає рядок з роздільниками та повертає масив, що починається з нуля, з одним елементом на елемент. Приєднатися виконує зворотний процес, беручи масив і повертаючи один рядок з роздільником між елементами. Зверніть увагу, що 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(): Прив’яжіть результат до динамічного масиву String. Оголошення фіксованого розміру спочатку призведе до помилки компіляції.
- Порожній вхід: Розділення порожнього рядка повертає масив без елементів, тому перевірте за допомогою UBound перед читанням Items(0).
Навіть із правильно вибраною функцією, рядковий код дає збій кількома передбачуваними способами.
Поширені помилки рядків VBA та як їх виправити
Більшість помилок у рядках у Excel VBA виникають через короткий перелік причин. Розпізнавання симптому дозволяє зекономити на тривалому сеансі налагодження.
- Невідповідність типів при конкатенації: Між текстом і числом було використано знак плюс. Замініть його на амперсанд, який автоматично конвертує число.
- InStr повертає 0: Підрядок не знайдено. У разі невдачі InStr повертає 0, а не -1, тому перед передачею результату до Mid перевірте значення, більше нуля.
- Недійсний виклик процедури посередині або ліворуч: Запитана довжина від'ємна, або початкова позиція менша за 1. Захищайте виклик за допомогою Len, щоб довжина ніколи не перевищувала рядок.
- Порівняння, які повинні збігатися, але не збігаються: Кінцеві пробіли з імпортованих даних порушують рівність. Обведіть обидві сторони в Trim та використовуйте StrComp, коли регістр слід ігнорувати.
- Текст, який не стане числом: Таке значення, як «1,200», не вдається виконати в арифметичних операціях через роздільник. Видаліть його за допомогою команди Replace перед перетворенням за допомогою CLng.
Завантажте Excel із кодом вище
Завантажте вищевказаний Excel Code


