Функції маніпулювання рядками VBA & Operaторс

⚡ Розумний підсумок

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

  • 🔤 Рядкові дані: Значення, що складається з символів, символів та чисел, наприклад, текст Липень-2015.
  • ➕ Сполучення Operaтор: Амперсанд об'єднує два рядки, тому «John» та «Doe» повертає John Doe.
  • ✂️ ExtracФункції: Ліворуч, праворуч та середина витягують підрядок з початку, кінця або середини значення.
  • 📏 Функції вимірювання: Len підраховує символи, а InStr повертає позицію, з якої починається підрядок.
  • 🧩 Розділити та об'єднати: Split розбиває один розділений рядок на масив, а Join перебудовує масив в один рядок.
  • ⚠️ Поширені помилки: Невідповідність типів, повернення InStr нуля та пробіли в кінці спричиняють більшість невдалих порівнянь.

Функції маніпулювання рядками VBA та Operaторс

Рядок VBA Operaторс

Рядкові дані використовуються для зберігання даних, які складаються з чисел, символів і символів. «Липень 2015» є прикладом рядкових даних. Він складається з

  • Персонажі (лип.)
  • Символ (-)
  • Numbers (2015)

Рядкові оператори використовуються для маніпулювання рядковими даними. Наприклад, ви можете об’єднати значення липня-2015 із перших 3 літер місяця та року, як «липень-2015».

У наведеній нижче таблиці показано рядковий оператор конкатенації VBA.

S / N Operaтор Опис Приклад Вихід
1 & Concatenate: цей оператор використовується для об’єднання рядків «Джон» і «Лань» Джон Доу

Приклад джерела Code

Рядок VBA OperaПриклад джерела Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

Виконання наведеного вище коду дає наступний результат

Рядок VBA OperaПриклад джерела Code

Амперсанд — не єдиний символ, який з'єднує текст, і різниця між ними має значення, коли йдеться про числа.

Різниця між & та + для об'єднання рядків

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

Поширені запитання

Рядок змінної довжини містить приблизно до двох мільярдів символів, а рядок фіксованої довжини — до 65 400. Однак комірка робочого аркуша зберігає лише 32 767 символів, тому довші значення обрізаються під час запису на аркуш.

Знак рівності порівнює їх з урахуванням регістру за замовчуванням. Використовуйте StrComp(a, b, vbTextCompare) для результату без урахування регістру або помістіть Option Compare Text у початок модуля, щоб змінити значення за замовчуванням для всього модуля.

Амперсанд перетворює кожен операнд на текст перед об'єднанням, тому 10 & 5 повертає рядок 105. Зберігайте значення числовими та спочатку додавайте їх, а потім об'єднуйте результат, якщо він має з'явитися в повідомленні.

Так. Опишіть вхідні дані та бажаний вихідний дані, наприклад,tracВведіть код перед першим тире, і помічник ШІ поверне вираз Left та InStr. Перевірте це на граничних випадках, таких як відсутність тире.

Так. Вставте вкладений вираз, наприклад Mid з InStr всередині, і помічник штучного інтелекту розіб'є його на кроки, назве кожен аргумент і позначить випадок, коли InStr повертає нуль, а виклик завершується невдачею.

Підсумуйте цей пост за допомогою: