Функция Excel VBA Split - обяснено с примери

Когато работите с VBA в Excel, може да имате нужда да разделите низ на различни части въз основа на разделител.

Например, ако имате адрес, можете да използвате функцията VBA Split, за да получите различни части от адреса, които са разделени със запетая (което би било разделителят в този случай).

SPLIT е вградена низова функция в Excel VBA, която можете да използвате за разделяне на текстов низ въз основа на разделителя.

Функция Excel VBA SPLIT - Синтаксис

Разделяне (израз, [разделител], [граница], [сравнение])
  • Израз: Това е низът, който искате да разделите въз основа на разделителя. Например, в случая с адрес, целият адрес ще бъде „изразът“. В случай, че това е низ с нулева дължина (“”), функцията SPLIT ще върне празен масив.
  • Разделител: Това е незадължителен аргумент. Това е разделителят, който се използва за разделяне на аргумента „израз“. В нашия пример за адрес запетая е разделител, който се използва за разделяне на адреса на различни части. Ако не посочите този аргумент, интервалът се счита за разделител по подразбиране. В случай, че дадете низ с нулева дължина („”), целият низ „Expression” се връща от функцията.
  • Ограничение: Това е незадължителен аргумент. Тук указвате общия брой поднизове, които искате да върнете. Например, ако искате само да върнете първите три подниза от аргумента „Expression“, това ще бъде 3. Ако не посочите този аргумент, по подразбиране е -1, което връща всички поднизове.
  • Сравнете: Това е незадължителен аргумент. Тук определяте типа сравнение, което искате функцията SPLIT да изпълнява при оценката на поднизовете. Налични са следните опции:
    • Когато Сравни е 0: Това е двоично сравнение. Това означава, че ако вашият разделител е текстов низ (да речем ABC), това ще е чувствително към регистъра. „ABC“ не би било равно на „abc“.
    • Когато Сравни е 1: Това е сравнение на текст. Това означава, че ако вашият разделител е текстов низ (да речем ABC), тогава дори ако имате „abc“ в низа „Expression“, той ще се счита за разделител.

Сега, когато разгледахме основите на функцията SPLIT, нека видим няколко практически примера.

Пример 1 - Разделете думите в изречение

Да предположим, че имам текста - „Бързата кафява лисица прескача мързеливото куче“.

Мога да използвам функцията SPLIT, за да вкарам всяка дума от това изречение като отделен елемент в масив.

Кодът по -долу би направил това:

Sub SplitWords () Dim TextStrng As String Dim Result () As String TextStrng = "Бързата кафява лисица прескача мързеливото куче" Резултат () = Разделяне (TextStrng) End Sub

Въпреки че кодът не прави нищо полезно, той ще ви помогне да разберете какво прави функцията Split в VBA.

Функцията Split разделя текстовия низ и присвоява всяка дума на масива Result.

Така че в този случай:

  • Резултат (0) съхранява стойността „The“
  • Резултат (1) съхранява стойността „Бързо“
  • Резултат (2) съхранява стойността „Браун“ и т.н.

В този пример сме посочили само първия аргумент - който е текстът, който трябва да бъде разделен. Тъй като не е посочен разделител, той приема интервал като разделител по подразбиране.

Важна забележка:

  1. Функцията VBA SPLIT връща масив, който започва от база 0.
  2. Когато резултатът от функцията SPLIT е присвоен на масив, този масив трябва да бъде деклариран като тип данни String. Ако го декларирате като тип данни Variant, той ще покаже грешка при несъответствие на типа). В горния пример имайте предвид, че декларирах Result () като тип данни String.

Пример 2 - Пребройте броя на думите в изречение

Можете да използвате функцията SPLIT, за да получите общия брой думи в изречение. Номерът тук е да преброите броя на елементите в масива, които получавате, когато разделяте текста.

Кодът по -долу ще покаже поле за съобщение с броя на думите:

Sub WordCount () Dim TextStrng As String Dim WordCount As Integer Dim Result () As String TextStrng = "Бързата кафява лисица прескача мързеливото куче" Резултат = Split (TextStrng) WordCount = UBound (Result ()) + 1 MsgBox "The Броят на думите е „& Краен подс. На WordCount

В този случай функцията UBound ни казва горната граница на масива (т.е. максималния брой елементи, които масивът има). Тъй като основата на масива е 0, се добавя 1, за да се получи общият брой думи.

Можете да използвате подобен код, за да създадете персонализирана функция във VBA, която да приема текста като вход и да връща броя на думите.

Кодът по -долу ще създаде тази функция:

Функция WordCount (CellRef като диапазон) Dim TextStrng As String Dim Result () As String Result = Split (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 End Function

Веднъж създадена, можете да използвате функцията WordCount, както всяка друга обикновена функция.

Тази функция също така обработва водещи, последни и двойни интервали между думите. Това стана възможно с помощта на функцията TRIM във VBA кода.

В случай, че искате да научите повече за това как тази формула работи за преброяване на броя думи в изречение или искате да научите за начин, по който формулата не е VBA, за да получите броя на думите, разгледайте този урок.

Пример 3 - Използване на разделител, различен от космически знак

В предишните два примера използвахме само един аргумент във функцията SPLIT, а останалите бяха аргументи по подразбиране.

Когато използвате друг разделител, трябва да го посочите във формулата SPLIT.

В кода по -долу функцията SPLIT връща масив, базиран на запетая като разделител, и след това показва съобщение с всяка дума в отделен ред.

Sub CommaSeparator () Dim TextStrng As String Dim Result () As String Dim DisplayText As String TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Result = Split (TextStrng, ",") For i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

В горния код използвах цикъла For Next, за да премина през всеки елемент от масива „Result“, присвоявайки го на променливата „DisplayText“.

Пример 4 - Разделете адрес на три части

С функцията SPLIT можете да посочите колко числа разделяния искате да получите. Например, ако не посоча нищо, всеки екземпляр на разделителя ще се използва за разделяне на низа.

Но ако посоча 3 като ограничение, тогава низът ще бъде разделен само на три части.

Например, ако имам следния адрес:

2703 Уинифред Уей, Индианаполис, Индиана, 46204

Мога да използвам функцията Split в VBA, за да разделя този адрес на три части.

Той разделя първите две въз основа на разделителя на запетаите и останалата част става третият елемент на масива.

Кодът по -долу ще показва адреса в три различни реда в поле за съобщение:

Sub CommaSeparator () Dim TextStrng As String Dim Result () As String Dim DisplayText As String TextStrng = "2703 Winifred Way, Индианаполис, Индиана, 46204" Резултат = Разделяне (TextStrng, ",", 3) За i = LBound (Резултат ( )) Към UBound (Резултат ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

Една от практическите приложения на това може да бъде, когато искате да разделите адрес от един ред във формата, показан в полето за съобщение. След това можете да създадете персонализирана функция, която връща адреса, разделен на три части (с всяка част в нов ред).

Следният код би направил това:

Функция ThreePartAddress (cellRef As Range) Dim TextStrng As String Dim Result () As String Dim DisplayText As String Result = Split (cellRef, ",", 3) For i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Trim (Резултат (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Крайна функция

След като имате този код в модула, можете да използвате функцията (ThreePartAddress) в работната книга, както всяка друга функция на Excel.

Тази функция приема един аргумент - препратката към клетката, която има адреса.

Обърнете внимание, че за да се получи полученият адрес в три различни реда, трябва да приложите текстовия формат на обвивка към клетките (той е в раздела Начало в групата Подравняване). Ако форматът „Wrap Text“ не е активиран, ще видите целия адрес като един ред.

Пример 5 - Вземете името на града от адреса

С функцията Split в VBA можете да посочите каква част от получения масив искате да използвате.

Да предположим например, че разделям следния адрес въз основа на запетаята като разделител:

2703 Уинифред Уей, Индианаполис, Индиана, 46204

Полученият масив ще изглежда така, както е показано по -долу:

{"2703 Winifred Way", "Indianapolis", "Indiana", "46204"}

Тъй като това е масив, мога да избирам да покажа или върна определена част от този масив.

По -долу е код за персонализирана функция, където можете да посочите номер и той ще върне този елемент от масива. Например, ако искам името на състоянието, мога да посоча 3 (тъй като това е третият елемент в масива).

Функция ReturnNthElement (CellRef As Range, ElementNumber As Integer) Dim Result () As String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) End Функция

Горната функция приема два аргумента, препратката към клетката с адреса и номера на елемента, който искате да върнете. Функцията Split разделя адресните елементи и я присвоява на променливата Result.

След това връща номера на елемента, който сте посочили като втори аргумент. Имайте предвид, че тъй като основата е 0, ElementNumber-1 се използва за връщане на правилната част от адреса.

Тази персонализирана формула е най -подходяща, когато имате последователен формат във всички адреси - т.е. градът винаги се споменава след двете запетаи. Ако данните не са последователни, няма да получите желания резултат.

В случай, че искате името на града, можете да използвате 2 като втори аргумент. В случай, че използвате число, което е по -голямо от общия брой елементи, то ще върне #VALUE! грешка.

Можете допълнително да опростите кода, както е показано по -долу:

Функция ReturnNthElement (CellRef As Range, ElementNumber As Integer) ReturnNthElement = Разделяне (CellRef, ",") (ElementNumber - 1) Крайна функция

В горния код, вместо да използва променливата Result, тя връща само посочения номер на елемент.

Така че, ако имате Split („Добро утро“) (0), той ще върне само първия елемент, който е „Добър“.

По същия начин, в горния код, той връща само посочения номер на елемент.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave