Функции за манипулиране на низове на VBA & Operaтори

⚡ Умно обобщение

Функции за манипулиране на низове във VBA и Operaинструменти комбинират, измерват и извличатtracтекст в макроси на Excel. Тази страница обяснява оператора за конкатенация, функциите Left, Right, Mid, Len и InStr, разделянето и обединяването, както и грешките, които най-често нарушават кода на низове.

  • 🔤 Данни за низове: Стойност, изградена от знаци, символи и числа, като например текста юли-2015.
  • наниз OperaТор: Амперсандът свързва два низа, така че „John“ и „Doe“ връща John Doe.
  • ✂️ ExtracФункции на цията: Left, Right и Mid изтеглят подниз от началото, края или средата на стойност.
  • 📏 Функции за измерване: Len брои знаците, а InStr връща позицията, където започва подниз.
  • 🧩 Разделяне и присъединяване: Split разделя един разделен низ в масив, а Join възстановява масив в един низ.
  • ⚠️ Често срещани грешки: Несъответствието на типовете, връщането на нула от InStr и интервалите в края причиняват повечето неуспешни сравнения.

Функции за манипулиране на низове във VBA и Operaтори

VBA низ Operaтори

Низовите данни се използват за съхраняване на данни, които са съставени от числа, знаци и символи. „Jul-2015“ е пример за низови данни. Съставен е от

  • Герои (юли)
  • символ (-)
  • Numbers S

Стринговите оператори се използват за манипулиране на низови данни. Например, можете да свържете стойността на юли-2015 г. от първите 3 букви на месеца и годината като „юли-2015 г.“.

Следната таблица показва конкатенационния оператор на VBA низ.

S / N OperaTor Descriptйон Пример Продукция
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 String Manipulation е важен елемент в Excel VBA за макро програмиране и операции с низове. Excel предоставя различни видове функции за манипулиране на низове на VBA като:

  • Left: се използва за extract символа от лявата страна на низа
  • прав: се използва за extract символа от дясната страна на низа
  • Среден: се използва за extracподниз от средата на низ
  • Len: използва се за намиране на дължината на низ
  • InStr: използва се за намиране на позицията на подниз в низ
  • подреден: се използва за премахване на интервали от двата края на низ
  • Сменете: се използва за замяна на всяко появяване на един подниз с друг
  • UCase / LCase: се използват за преобразуване на низ в главни или малки букви

Таблицата по-долу показва синтаксиса на всяка функция с работен пример, така че можете да копирате шаблона директно в макрос.

функция Синтаксис Пример Продукция
Left Left(низ, дължина) Ляво („Юли 2015 г.“, 3) юли
прав Right(низ, дължина) Дясно („юли 2015 г.“, 4) 2015
Среден Mid(низ, начало, дължина) Среда („юли 2015 г.“, 5, 4) 2015
Len Лен(низ) Лен („юли 2015 г.“) 8
InStr InStr(начало, низ, подниз) InStr(1, „Jul-2015“, „-“) 4
подреден Trim(низ) Подрязване(" Guru99“) Guru99
Сменете Замяна(низ, намиране, замяна) Замяна („юли-2015“, „-“, „/“) юли/2015
UCase UCase(низ) UCase („гуру99“) ГУРУ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. Запазете стойностите числови и първо ги добавете, след което конкатенирайте резултата, ако е необходимо да се появи в съобщение.

Да. Опишете входните данни и желания изход, напримерtract кода преди първото тире и асистент с изкуствен интелект връща израз Left и InStr. Тествайте го спрямо гранични случаи, като например липсващо тире.

Да. Поставете вложен израз, например Mid с InStr вътре в него, и асистент с изкуствен интелект го разделя на стъпки, назовава всеки аргумент и маркира случая, в който InStr връща нула и извикването е неуспешно.

Обобщете тази публикация с: