Funcția Excel VBA Split - explicată cu exemple

Când lucrați cu VBA în Excel, este posibil să aveți nevoie să împărțiți un șir în diferite părți pe baza unui delimitator.

De exemplu, dacă aveți o adresă, puteți utiliza funcția VBA Split pentru a obține diferite părți ale adresei care sunt separate printr-o virgulă (care ar fi delimitatorul în acest caz).

SPLIT este o funcție de șir încorporată în Excel VBA pe care o puteți utiliza pentru a împărți un șir de text pe baza delimitatorului.

Funcția Excel VBA SPLIT - Sintaxă

Split (Expresie, [Delimitator], [Limită], [Comparare])
  • Expresie: Acesta este șirul pe care doriți să îl împărțiți pe baza delimitatorului. De exemplu, în cazul exemplului de adresă, întreaga adresă ar fi „expresia”. În cazul în care acesta este un șir de lungime zero („”), funcția SPLIT ar returna o matrice goală.
  • Delimitator: Acesta este un argument opțional. Acesta este delimitatorul care este folosit pentru a împărți argumentul „Expresie”. În cazul exemplului de adresă, o virgulă este un delimitator care este utilizat pentru a împărți adresa în diferite părți. Dacă nu specificați acest argument, un caracter spațial este considerat delimitatorul implicit. În cazul în care dați un șir de lungime zero („”), întregul șir ‘Expresie’ este returnat de funcție.
  • Limită: Acesta este un argument opțional. Aici specificați numărul total de șiruri pe care doriți să le returnați. De exemplu, dacă doriți să returnați primele trei șiruri de caractere din argumentul „Expresie”, acesta ar fi 3. Dacă nu specificați acest argument, valoarea implicită este -1, care returnează toate șirurile de caractere.
  • Comparaţie: Acesta este un argument opțional. Aici specificați tipul de comparație pe care doriți să îl efectueze funcția SPLIT atunci când evaluați șirurile. Sunt disponibile următoarele opțiuni:
    • Când Comparația este 0: Aceasta este o comparație binară. Aceasta înseamnă că dacă delimitatorul dvs. este un șir de text (să spunem ABC), atunci acesta ar fi sensibil la majuscule. „ABC” nu ar fi egal cu „abc”.
    • Când Comparația este 1: Aceasta este o comparație de text. Aceasta înseamnă că, dacă delimitatorul dvs. este un șir de text (să zicem ABC), atunci chiar dacă aveți „abc” în șirul „Expresie”, acesta ar fi considerat un delimitator.

Acum, că am abordat elementele de bază ale funcției SPLIT, să vedem câteva exemple practice.

Exemplul 1 - Împarte cuvintele într-o propoziție

Să presupunem că am textul - „Vulpea brună rapidă sare peste câinele leneș”.

Pot folosi funcția SPLIT pentru a obține fiecare cuvânt din această propoziție ca element separat dintr-o matrice.

Codul de mai jos ar face acest lucru:

Sub SplitWords () Dim TextStrng As String Dim Result () As String TextStrng = "The Brown Brown Fox Jumps Over the Lazy Dog" Result () = Split (TextStrng) End Sub

Deși codul nu face nimic util, acesta vă va ajuta să înțelegeți ce face funcția Split în VBA.

Funcția Split împarte șirul de text și atribuie fiecare cuvânt matricei de rezultate.

Deci, în acest caz:

  • Rezultatul (0) stochează valoarea „The”
  • Rezultatul (1) stochează valoarea „Rapid”
  • Rezultatul (2) stochează valoarea „Brown” și așa mai departe.

În acest exemplu, am specificat doar primul argument - care este textul care trebuie divizat. Deoarece nu a fost specificat niciun delimitator, acesta ia caracterul spațiu ca delimitator implicit.

Notă importantă:

  1. Funcția VBA SPLIT returnează o matrice care începe de la baza 0.
  2. Când rezultatul funcției SPLIT este atribuit unui tablou, tabloul respectiv trebuie declarat ca un tip de date String. Dacă îl declarați ca tip de date Variant, acesta va afișa o eroare de nepotrivire de tip). În exemplul de mai sus, rețineți că am declarat Result () ca tip de date String.

Exemplul 2 - Numărați numărul de cuvinte dintr-o propoziție

Puteți utiliza funcția SPLIT pentru a obține numărul total de cuvinte dintr-o propoziție. Trucul aici este să numărați numărul de elemente din matrice pe care le obțineți atunci când împărțiți textul.

Codul de mai jos va afișa o casetă de mesaj cu numărul de cuvinte:

Sub WordCount () Dim TextStrng As String Dim WordCount As Integer Dim Result () As String TextStrng = "The Brown Brown Fox Jumps Over The Lazy Dog" Result = Split (TextStrng) WordCount = UBound (Result ()) + 1 MsgBox "The Numărul de cuvinte este „& WordCount End Sub

În acest caz, funcția UBound ne spune limita superioară a matricei (adică, numărul maxim de elemente pe care matricea le are). Deoarece baza matricei este 0, se adaugă 1 pentru a obține numărul total de cuvinte.

Puteți utiliza un cod similar pentru a crea o funcție personalizată în VBA care va lua textul ca intrare și va returna numărul de cuvinte.

Codul de mai jos va crea această funcție:

Funcție WordCount (CellRef As Range) Dim TextStrng As String Dim Result () As String Result = Split (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 End Function

Odată creată, puteți utiliza funcția WordCount la fel ca orice altă funcție obișnuită.

Această funcție gestionează, de asemenea, spațiile principale, finale și duble între cuvinte. Acest lucru a fost posibil prin utilizarea funcției TRIM în codul VBA.

În cazul în care doriți să aflați mai multe despre modul în care funcționează această formulă pentru a număra numărul de cuvinte dintr-o propoziție sau doriți să aflați despre o formulă non-VBA pentru a obține numărul de cuvinte, consultați acest tutorial.

Exemplul 3 - Utilizarea unui alt delimitator decât caracterul spațial

În cele două exemple anterioare, am folosit un singur argument în funcția SPLIT, iar restul au fost argumentele implicite.

Când utilizați un alt delimitator, trebuie să specificați acest lucru în formula SPLIT.

În codul de mai jos, funcția SPLIT returnează o matrice bazată pe o virgulă ca delimitator și apoi afișează un mesaj cu fiecare cuvânt într-o linie separată.

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, ",") Pentru i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

În codul de mai sus, am folosit bucla For Next pentru a parcurge fiecare element al matricei „Rezultat”, atribuindu-l variabilei „DisplayText”.

Exemplul 4 - Împărțiți o adresă în trei părți

Cu funcția SPLIT, puteți specifica câte numere de împărțiri doriți să obțineți. De exemplu, dacă nu specific nimic, fiecare instanță a delimitatorului va fi utilizată pentru a împărți șirul.

Dar dacă specific 3 ca limită, atunci șirul va fi împărțit numai în trei părți.

De exemplu, dacă am următoarea adresă:

2703 Winifred Way, Indianapolis, Indiana, 46204

Pot folosi funcția Split în VBA pentru a împărți această adresă în trei părți.

Împarte primele două pe baza delimitatorului de virgule și partea rămasă devine al treilea element al matricei.

Codul de mai jos ar arăta adresa în trei rânduri diferite într-o casetă de mesaj:

Sub CommaSeparator () Dim TextStrng As String Dim Result () As String Dim DisplayText As String TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Result = Split (TextStrng, ",", 3) For i = LBound (Result ( )) La UBound (Rezultat ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

Una dintre utilizările practice ale acestui lucru ar putea fi atunci când doriți să împărțiți o singură adresă de linie în formatul afișat în caseta de mesaj. Apoi, puteți crea o funcție personalizată care returnează adresa împărțită în trei părți (cu fiecare parte într-o nouă linie).

Următorul cod ar face acest lucru:

Funcția 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 (Result (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Funcția de finalizare

După ce aveți acest cod în modul, puteți utiliza funcția (ThreePartAddress) în registrul de lucru la fel ca orice altă funcție Excel.

Această funcție acceptă un argument - referința celulei care are adresa.

Rețineți că, pentru ca adresa rezultată să apară în trei rânduri diferite, trebuie să aplicați formatul textului de ambalare la celule (se află în fila Acasă din grupul Alignment). Dacă formatul „Wrap Text” nu este activat, veți vedea întreaga adresă ca o singură linie.

Exemplul 5 - Obțineți numele orașului din adresă

Cu funcția Split în VBA, puteți specifica ce parte a matricei rezultate doriți să utilizați.

De exemplu, să presupunem că împart următoarea adresă pe baza virgulei ca delimitator:

2703 Winifred Way, Indianapolis, Indiana, 46204

Matricea rezultată ar arăta ceva așa cum se arată mai jos:

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

Deoarece acesta este un tablou, pot alege să afișez sau să returnez o anumită parte a acestui tablou.

Mai jos este un cod pentru o funcție personalizată, unde puteți specifica un număr și acesta va returna acel element din matrice. De exemplu, dacă vreau numele stării, pot specifica 3 (deoarece este al treilea element din matrice).

Funcție ReturnNthElement (CellRef Ca Range, ElementNumber Ca Integer) Dim Result () Ca String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) End Function

Funcția de mai sus ia două argumente, referința celulei care are adresa și numărul elementului pe care doriți să îl returnați. Funcția Split împarte elementele de adresă și le atribuie variabilei Result.

Apoi returnează numărul de element pe care l-ați specificat ca al doilea argument. Rețineți că, deoarece baza este 0, ElementNumber-1 este utilizat pentru a returna partea corectă a adresei.

Această formulă personalizată este cea mai potrivită atunci când aveți un format consistent în toată adresa - adică, orașul este întotdeauna menționat după cele două virgule. Dacă datele nu sunt consistente, nu veți obține rezultatul dorit.

În cazul în care doriți numele orașului, puteți utiliza 2 ca al doilea argument. În cazul în care utilizați un număr care este mai mare decât numărul total de elemente, acesta va returna #VALUE! eroare.

Puteți simplifica și mai mult codul, așa cum se arată mai jos:

Funcție ReturnNthElement (CellRef ca interval, ElementNumber ca întreg) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Funcție de sfârșit

În codul de mai sus, în loc să utilizeze variabila Result, returnează doar numărul elementului specificat.

Deci, dacă aveți Split („Bună dimineața”) (0), acesta va returna doar primul element, care este „Bun”.

În mod similar, în codul de mai sus, returnează doar numărul elementului specificat.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave