Exceli VBA poolitusfunktsioon - selgitatud näidetega

Lang L: none (table-of-contents)

Excelis VBA -ga töötades võib tekkida vajadus string eraldada eraldaja põhjal erinevateks osadeks.

Näiteks kui teil on aadress, võite kasutada funktsiooni VBA Split, et saada aadressi erinevad osad, mis on eraldatud komaga (mis oleks sel juhul eraldaja).

SPLIT on Excel VBA sisseehitatud stringifunktsioon, mida saate kasutada tekstistringi jagamiseks eraldaja põhjal.

Funktsioon Excel VBA SPLIT - süntaks

Poolitamine (avaldis, [eraldaja], [piir], [võrdlus])
  • Väljend: See on string, mille soovite eraldusmärgi alusel jagada. Näiteks aadressinäite puhul oleks kogu aadress „avaldis”. Kui see on nullpikkusega string (“”), tagastab SPLIT-funktsioon tühja massiivi.
  • Eraldaja: See on vabatahtlik argument. See on eraldaja, mida kasutatakse argumendi „Avaldis” jagamiseks. Meie aadressinäite puhul on koma eraldaja, mida kasutatakse aadressi jagamiseks erinevateks osadeks. Kui te seda argumenti ei määra, loetakse tühikukirjutaja vaikimisi eraldajaks. Kui annate nullpikkuse stringi (“”), tagastab funktsioon kogu “Expression” stringi.
  • Piirang: See on vabatahtlik argument. Siin saate määrata tagastatavate alamstringide koguarvu. Näiteks kui soovite argumendist „Avaldis” tagastada ainult kolm esimest alamstringi, oleks see 3. Kui te seda argumenti ei määra, on vaikimisi -1, mis tagastab kõik alamstringid.
  • Võrdlema: See on vabatahtlik argument. Siin saate määrata võrdluse tüübi, mida soovite funktsiooni SPLIT alamstringude hindamisel täita. Saadaval on järgmised valikud.
    • Kui võrdlus on 0: See on binaarne võrdlus. See tähendab, et kui teie eraldaja on tekstistring (oletame ABC), on see tõstutundlik. "ABC" ei võrduks "abc".
    • Kui võrdlus on 1: See on tekstide võrdlus. See tähendab, et kui teie eraldaja on tekstistring (oletame ABC), siis isegi kui teil on stringis „Avaldis” „abc”, loetakse see eraldajaks.

Nüüd, kui oleme käsitlenud funktsiooni SPLIT põhitõdesid, vaatame mõningaid praktilisi näiteid.

Näide 1 - jagage sõnad lauseks

Oletame, et mul on tekst - “Kiire pruun rebane hüppab üle laisa koera”.

Ma võin kasutada funktsiooni SPLIT, et saada selle lause iga sõna massiivi eraldi üksuseks.

Allolev kood oleks selline:

Sub SplitWords () Dim TextStrng stringina Dim Tulemus () Stringina TextStrng = "Kiire pruun rebane hüppab üle laisa koera" Tulemus () = Split (TextStrng) End Sub

Kuigi kood ei tee midagi kasulikku, aitab see teil mõista, mida VBA funktsioon Split teeb.

Funktsioon Split jagab tekstistringi ja määrab iga sõna tulemimassiivi.

Nii et sel juhul:

  • Tulemus (0) salvestab väärtuse „The”
  • Tulemus (1) salvestab väärtuse „Kiire”
  • Tulemus (2) salvestab väärtuse “Pruun” ja nii edasi.

Selles näites oleme täpsustanud ainult esimest argumenti - see on poolitatav tekst. Kuna eraldajat pole määratud, võtab see vaikimisi eraldajaks tühiku.

Oluline märkus:

  1. Funktsioon VBA SPLIT tagastab massiivi, mis algab alusest 0.
  2. Kui funktsiooni SPLIT tulemus on massiivile määratud, tuleb see massiiv deklareerida andmetüübina String. Kui deklareerite selle variandi andmetüübiks, näitab see tüübi mittevastavuse viga). Ülaltoodud näites pange tähele, et olen deklareerinud tulemi () stringi andmetüübiks.

Näide 2 - loendage lauses olevate sõnade arv

Funktsiooni SPLIT abil saate saada lauses olevate sõnade koguarvu. Siin on trikk selles, et loete massiivi elementide arvu, mille saate teksti jagamisel.

Allolev kood näitaks sõnade kasti sõnade arvuga:

Sub WordCount () Dim TextStrng stringina Dim WordCount täisarvuna Dim Result () Stringina TextStrng = "Kiire pruun rebane hüppab üle laisa koera" Tulemus = Split (TextStrng) WordCount = UBound (Result ()) + 1 MsgBox " Sõnaarv on "& WordCount End Sub

Sel juhul ütleb funktsioon UBound meile massiivi ülemise piiri (st maksimaalse massiivi elementide arvu). Kuna massiivi alus on 0, lisatakse sõnade koguarvu saamiseks 1.

Sarnase koodi abil saate luua VBA -s kohandatud funktsiooni, mis võtab teksti sisendiks ja tagastab sõnade arvu.

Selle funktsiooni loob järgmine kood:

Funktsioon WordCount (CellRef As Range) Dim TextStrng stringina Dim Result () Stringitulemusena = poolitatud (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 lõppfunktsioon

Kui olete loonud, saate kasutada WordCount funktsiooni nagu iga teine ​​tavaline funktsioon.

See funktsioon käsitleb ka sõnade vahel esi-, lõpp- ja topeltruume. Seda on võimaldanud VBA -koodi TRIM -funktsiooni kasutamine.

Kui soovite rohkem teada saada, kuidas see valem töötab, et loendada lauses olevate sõnade arvu, või soovite õppida mitte-VBA-valemite viisi sõnade arvu saamiseks, vaadake seda õpetust.

Näide 3 - eraldaja kasutamine peale tühimärgi

Kahes eelmises näites oleme funktsioonis SPLIT kasutanud ainult ühte argumenti ja ülejäänud olid vaikeargumendid.

Kui kasutate mõnda muud eraldajat, peate selle SPLIT valemis täpsustama.

Allolevas koodis tagastab funktsioon SPLIT eraldajaks koma põhjal põhineva massiivi ja kuvab seejärel sõnumi iga sõnaga eraldi real.

Sub CommaSeparator () Dim TextStrng stringina Dim Result () String Dim DisplayText Stringina TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Result = Split (TextStrng, ",") For i = LBound (tulemus ()) kuni UBound (tulemus ()) DisplayText = DisplayText & Result (i) & vbNewLine Järgmine i MsgBox DisplayText End Sub

Ülaltoodud koodis kasutasin masina „Tulemus” iga elemendi läbimiseks silmust Järgmine, et määrata see muutujale „DisplayText”.

Näide 4 - jagage aadress kolmeks osaks

Funktsiooni SPLIT abil saate määrata, kui palju jaotusi soovite saada. Näiteks kui ma midagi ei täpsusta, kasutatakse stringi jagamiseks iga eraldaja eksemplari.

Aga kui määran piiranguks 3, jagatakse string ainult kolmeks osaks.

Näiteks kui mul on järgmine aadress:

2703 Winifred Way, Indianapolis, Indiana, 46204

Ma saan kasutada VBA funktsiooni Split, et jagada see aadress kolmeks osaks.

See jagab kaks esimest koma eraldaja põhjal ja ülejäänud osast saab massiivi kolmas element.

Allolev kood näitaks aadressi sõnumikasti kolmes erinevas reas:

Sub CommaSeparator () Dim TextStrng stringina Dim Result () String Dim DisplayText Stringina TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Result = Split (TextStrng, ",", 3) I = LBound (Tulemus ( )) To UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

Selle üks praktilisi kasutusvõimalusi võib olla see, kui soovite jagada ühe rea aadressi sõnumikastis näidatud vormingusse. Seejärel saate luua kohandatud funktsiooni, mis tagastab aadressi, mis on jagatud kolmeks osaks (iga osa uuel real).

Seda teeks järgmine kood:

Funktsioon ThreePartAddress (cellRef As Range) Dim Tekst = DisplayText & Trim (Result (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Lõppfunktsioon

Kui see kood on moodulis olemas, saate töövihiku funktsiooni (ThreePartAddress) kasutada nagu iga teist Exceli funktsiooni.

See funktsioon võtab ühe argumendi - lahtri viite, millel on aadress.

Pange tähele, et tulemuseks oleva aadressi kuvamiseks kolmes erinevas reas peate lahtritele pakkimisteksti vormingu rakendama (see asub grupi Alignment vahekaardil Home). Kui vorming „Wrap Text” pole lubatud, näete kogu aadressi ühe reana.

Näide 5 - hankige linna nimi aadressilt

Funktsiooniga Split VBA -s saate määrata, millist osa saadud massiivist soovite kasutada.

Oletame näiteks, et jagan eraldajaks koma põhjal järgmise aadressi:

2703 Winifred Way, Indianapolis, Indiana, 46204

Tulemuseks olev massiiv näeks välja nagu allpool näidatud:

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

Kuna see on massiiv, võin valida selle massiivi konkreetse osa kuvamise või tagastamise.

Allpool on kohandatud funktsiooni kood, kus saate määrata numbri ja see tagastab selle elemendi massiivist. Näiteks kui tahan osariigi nime, saan määrata 3 (kuna see on massiivi kolmas element).

Funktsioon ReturnNthElement (CellRef kui vahemik, ElementNumber täisarvuna) Dim Result () Stringitulemusena = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) End Function

Ülaltoodud funktsioon võtab kaks argumenti, lahtri viide, millel on aadress ja tagastatava elemendi number. Funktsioon Split jagab aadressielemendid ja määrab need muutujale Result.

Seejärel tagastab see elemendi numbri, mille määrasite teise argumendina. Pange tähele, et kuna alus on 0, kasutatakse aadressi õige osa tagastamiseks ElementNumber-1.

See kohandatud valem sobib kõige paremini siis, kui teil on kogu aadressis ühtne vorming - st linna mainitakse alati pärast kahte koma. Kui andmed pole järjepidevad, ei saa te soovitud tulemust.

Kui soovite linna nime, võite teise argumendina kasutada 2. Kui kasutate arvu, mis on suurem kui elementide koguarv, tagastab see #VALUE! viga.

Saate koodi veelgi lihtsustada, nagu allpool näidatud:

Funktsioon ReturnNthElement (CellRef kui vahemik, ElementNumber täisarvuna) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Lõppfunktsioon

Ülaltoodud koodis tagastab muutuja Result asemel ainult määratud elemendi numbri.

Nii et kui teil on Split (“Tere hommikust”) (0), tagastab see ainult esimese elemendi, milleks on “Hea”.

Samamoodi tagastab see ülaltoodud koodis ainult määratud elemendi numbri.

wave wave wave wave wave