„Excel VBA“ padalijimo funkcija - paaiškinta pavyzdžiais

Kai dirbate su „VBA“ programoje „Excel“, gali tekti padalyti eilutę į skirtingas dalis pagal ribotuvą.

Pavyzdžiui, jei turite adresą, galite naudoti funkciją „VBA Split“, kad gautumėte skirtingas adreso dalis, atskirtas kableliu (šiuo atveju jis būtų skiriamasis ženklas).

SPLIT yra integruota „Excel VBA“ eilutės funkcija, kurią galite naudoti norėdami padalyti teksto eilutę pagal ribotuvą.

„Excel VBA SPLIT“ funkcija - sintaksė

Padalijimas (išraiška, [skiriamieji ženklai], [riba], [palyginti])
  • Išraiška: Tai eilutė, kurią norite padalyti pagal ribotuvą. Pavyzdžiui, adreso pavyzdžio atveju visas adresas būtų „išraiška“. Jei tai yra nulinio ilgio eilutė (""), SPLIT funkcija grąžins tuščią masyvą.
  • Skyriklis: Tai neprivalomas argumentas. Tai yra ribotuvas, naudojamas skaidyti argumentą „Išraiška“. Mūsų adreso pavyzdyje kablelis yra skiriamasis ženklas, naudojamas adresui padalyti į skirtingas dalis. Jei nenurodysite šio argumento, tarpinis simbolis laikomas numatytuoju skiriamuoju ženklu. Jei pateikiate nulinio ilgio eilutę („“), funkcija grąžina visą „Išraiškos“ eilutę.
  • Riba: Tai neprivalomas argumentas. Čia nurodomas bendras norimų grąžinti antrinių eilučių skaičius. Pvz., Jei norite grąžinti tik pirmas tris antrines eilutes iš argumento „Išraiška“, tai būtų 3. Jei nenurodysite šio argumento, numatytasis yra -1, kuris grąžina visas antrines eilutes.
  • Palyginti: Tai neprivalomas argumentas. Čia nurodote palyginimo tipą, kurį norite, kad funkcija SPLIT atliktų vertinant antrines eilutes. Galimos šios parinktys:
    • Kai lyginimas yra 0: Tai yra dvejetainis palyginimas. Tai reiškia, kad jei jūsų skiriamieji ženklai yra teksto eilutė (tarkime, ABC), tai bus didžiosios ir mažosios raidės. „ABC“ nebūtų lygus „abc“.
    • Kai palyginimas yra 1: Tai yra teksto palyginimas. Tai reiškia, kad jei jūsų ribotuvas yra teksto eilutė (tarkime, ABC), tai net jei eilutėje „Išraiška“ turite „abc“, ji bus laikoma skiriamuoju ženklu.

Dabar, kai mes apžvelgėme SPLIT funkcijos pagrindus, pažiūrėkime keletą praktinių pavyzdžių.

1 pavyzdys - padalykite žodžius į sakinį

Tarkime, turiu tekstą - „Greita rudoji lapė peršoka tinginį šunį“.

Galiu naudoti funkciją SPLIT, kad kiekvienas šio sakinio žodis būtų įtrauktas į atskirą masyvo elementą.

Žemiau pateiktas kodas būtų toks:

Sub SplitWords () Dim TextStrng kaip String Dim Result () Kaip String TextStrng = "Greita rudoji lapė peršoka tingų šunį" Rezultatas () = Split (TextStrng) Pabaiga

Nors kodas neduoda nieko naudingo, jis padės jums suprasti, ką daro padalijimo funkcija VBA.

Funkcija „Split“ padalija teksto eilutę ir kiekvieną žodį priskiria „Result“ masyvui.

Taigi šiuo atveju:

  • Rezultate (0) išsaugoma vertė „The“
  • Rezultate (1) išsaugoma vertė „Greita“
  • Rezultatas (2) išsaugo vertę „Ruda“ ir pan.

Šiame pavyzdyje mes nurodėme tik pirmąjį argumentą - tai tekstas, kurį reikia padalyti. Kadangi ribotuvas nenurodytas, kaip numatytasis skiriamasis ženklas naudojamas tarpas.

Svarbi pastaba:

  1. Funkcija VBA SPLIT grąžina masyvą, kuris prasideda nuo 0 bazės.
  2. Kai funkcijos SPLIT rezultatas priskiriamas masyvui, tas masyvas turi būti deklaruojamas kaip eilutės duomenų tipas. Jei paskelbsite jį kaip duomenų varianto variantą, bus rodoma tipo neatitikimo klaida). Aukščiau pateiktame pavyzdyje atkreipkite dėmesį, kad rezultatą () paskelbiau kaip eilutės duomenų tipą.

2 pavyzdys - suskaičiuokite sakinio žodžių skaičių

Norėdami gauti bendrą sakinio žodžių skaičių, galite naudoti funkciją SPLIT. Apgaulė yra suskaičiuoti masyvo elementų skaičių, kurį gaunate padaliję tekstą.

Žemiau pateiktas kodas parodys pranešimų laukelį su žodžių skaičiumi:

„Sub WordCount“ () „Dim TextStrng“ kaip eilutė „Dim“ „WordCount“ kaip sveikasis skaičius „Rezultatas“ () Kaip eilutė „TextStrng =" „Greita rudoji lapė peršoka tingų šunį“ Rezultatas = padalintas („TextStrng“) „WordCount“ = „UBound“ (rezultatas ()) + 1 „MsgBox“ „Word Count“ yra „& WordCount End Sub

Šiuo atveju funkcija „UBound“ nurodo viršutinę masyvo ribą (t. Y. Maksimalų masyvo elementų skaičių). Kadangi masyvo bazė yra 0, pridedamas 1, kad būtų gautas bendras žodžių skaičius.

Galite naudoti panašų kodą, kad sukurtumėte pasirinktinę funkciją VBA, kuri imtų tekstą kaip įvestį ir grąžintų žodžių skaičių.

Žemiau pateiktas kodas sukurs šią funkciją:

Funkcija „WordCount“ („CellRef“ kaip diapazonas) „Dim Text“ „String“ kaip eilutė „Dim Result“ () Kaip eilutės rezultatas = padalintas („WorksheetFunction.Trim“ („CellRef.Text“), "") "WordCount" = "UBound" (rezultatas ()) + 1 pabaigos funkcija

Sukūrę „WordCount“ funkciją galite naudoti kaip ir bet kurią kitą įprastą funkciją.

Ši funkcija taip pat tvarko priekinius, galinius ir dvigubus tarpus tarp žodžių. Tai buvo įmanoma naudojant VBA kodo funkciją TRIM.

Jei norite sužinoti daugiau apie tai, kaip ši formulė veikia, norint suskaičiuoti žodžių skaičių sakinyje, arba norite sužinoti apie ne VBA formulės būdą, kaip gauti žodžių skaičių, peržiūrėkite šią mokymo programą.

3 pavyzdys. Skirtiklio naudojimas, išskyrus erdvės simbolį

Ankstesniuose dviejuose pavyzdžiuose SPLIT funkcijoje naudojome tik vieną argumentą, o likusieji buvo numatytieji argumentai.

Kai naudojate kitą ribotuvą, turite tai nurodyti SPLIT formulėje.

Žemiau esančiame kode SPLIT funkcija grąžina masyvą, pagrįstą kableliu, o tada parodo pranešimą su kiekvienu žodžiu atskiroje eilutėje.

Sub CommaSeparator () Dim TextStrng as String Dim Result () Kaip String Dim DisplayText As String TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, tinginys, šuo" Result = Split (TextStrng, ",") For i = LBound (rezultatas ()) į UBound (rezultatas ()) DisplayText = DisplayText & Result (i) & vbNewLine Kitas i MsgBox DisplayText End Sub

Pirmiau pateiktame kode aš naudoju ciklą „Kitas“, norėdamas pereiti prie kiekvieno „Result“ masyvo elemento, priskirti jį kintamajam „DisplayText“.

4 pavyzdys - padalinkite adresą į tris dalis

Naudodami funkciją SPLIT, galite nurodyti, kiek padalijimų norite gauti. Pvz., Jei aš nieko nenurodysiu, kiekvienas skirtuko egzempliorius bus naudojamas eilutei padalyti.

Bet jei kaip ribą nurodysiu 3, eilutė bus padalyta tik į tris dalis.

Pavyzdžiui, jei turiu šį adresą:

2703 Winifred Way, Indianapolis, Indiana, 46204

Galiu naudoti VBA funkciją „Split“ padalinti šį adresą į tris dalis.

Jis padalija pirmuosius du, remdamasis kableliais, o likusi dalis tampa trečiuoju masyvo elementu.

Žemiau pateiktas kodas parodys adresą trimis skirtingomis pranešimų laukelio eilutėmis:

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

Vienas iš praktinių to panaudojimo būdų gali būti tada, kai norite padalinti vienos eilutės adresą į formatą, nurodytą pranešimų laukelyje. Tada galite sukurti pasirinktinę funkciją, kuri grąžina adresą, padalytą į tris dalis (su kiekviena dalimi naujoje eilutėje).

Šis kodas tai padarys:

Funkcija ThreePartAddress (cellRef As Range) Dim TextStrng As String Dim Result () Kaip 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) Pabaigos funkcija

Turėdami šį kodą modulyje, galite naudoti funkciją (ThreePartAddress) darbaknygėje, kaip ir bet kurią kitą „Excel“ funkciją.

Ši funkcija turi vieną argumentą - langelio nuorodą, kurioje yra adresas.

Atminkite, kad norint, kad gautas adresas būtų rodomas trijose skirtingose ​​eilutėse, langeliuose turite pritaikyti įvyniojimo teksto formatą (jis yra skirtuko „Pagrindinis“ skirtuke „Išlygiavimas“). Jei „Wrap Text“ formatas neįgalintas, visą adresą matysite kaip vieną eilutę.

5 pavyzdys - gaukite miesto pavadinimą iš adreso

Naudodami padalijimo funkciją VBA, galite nurodyti, kurią gauto masyvo dalį norite naudoti.

Pvz., Tarkime, kad padalijau šį adresą, remdamasis kableliu kaip skiriamuoju ženklu:

2703 Winifred Way, Indianapolis, Indiana, 46204

Gautas masyvas atrodys taip, kaip parodyta žemiau:

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

Kadangi tai yra masyvas, galiu pasirinkti rodyti arba grąžinti tam tikrą šio masyvo dalį.

Žemiau yra tinkintos funkcijos kodas, kuriame galite nurodyti skaičių ir jis grąžins tą elementą iš masyvo. Pavyzdžiui, jei noriu būsenos pavadinimo, galiu nurodyti 3 (nes tai yra trečiasis masyvo elementas).

Funkcija ReturnNthElement (CellRef kaip diapazonas, ElementNumber kaip sveikasis skaičius) Dim Result () Kaip String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) Pabaigos funkcija

Aukščiau pateikta funkcija turi du argumentus: langelio nuorodą, kurioje yra adresas, ir elemento numerį, kurį norite grąžinti. Funkcija „Split“ padalija adreso elementus ir priskiria juos kintamam rezultatui.

Tada jis grąžina elemento numerį, kurį nurodėte kaip antrąjį argumentą. Atminkite, kad kadangi bazė yra 0, „ElementNumber-1“ naudojama teisingai adreso daliai grąžinti.

Ši pasirinktinė formulė geriausiai tinka, kai visuose adresuose yra nuoseklus formatas, t. Y. Miestas visada minimas po dviejų kablelių. Jei duomenys nesutampa, norimo rezultato nepasieksite.

Jei norite miesto pavadinimo, galite naudoti 2 kaip antrąjį argumentą. Jei naudojate skaičių, kuris yra didesnis nei bendras elementų skaičius, tai grąžins #VALUE! klaida.

Galite dar labiau supaprastinti kodą, kaip parodyta žemiau:

Funkcija ReturnNthElement (CellRef As Range, ElementNumber As Integer) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Pabaigos funkcija

Pirmiau pateiktame kode, vietoj kintamojo Result, jis pateikia tik nurodytą elemento numerį.

Taigi, jei turite „Split“ („Labas rytas“) (0), jis grąžins tik pirmąjį elementą, kuris yra „Geras“.

Panašiai aukščiau pateiktame kode jis grąžina tik nurodytą elemento numerį.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave