Excel VBA osztott funkció - példákkal magyarázva

Amikor a VBA -val Excelben dolgozik, előfordulhat, hogy egy karakterláncot részekre kell bontani egy elválasztó alapján.

Például, ha rendelkezik címmel, akkor a VBA Split függvénnyel lekérheti a cím különböző, vesszővel elválasztott részeit (ebben az esetben ez lenne a határoló).

A SPLIT az Excel VBA beépített karakterlánc -függvénye, amellyel szöveges karakterláncokat oszthat fel a határoló alapján.

Excel VBA SPLIT funkció - szintaxis

Felosztás (kifejezés, [határoló], [korlát], [összehasonlítás])
  • Kifejezés: Ezt a karakterláncot szeretné elválasztani a határoló alapján. Például a címpélda esetében a teljes cím a „kifejezés” lenne. Abban az esetben, ha ez egy nulla hosszúságú karakterlánc („”), az SPLIT függvény üres tömböt ad vissza.
  • Elhatároló: Ez egy opcionális érv. Ez az a határoló, amelyet a „Kifejezés” argumentum felosztására használnak. Címpéldánk esetén a vessző elválasztó, amelyet a cím különböző részekre osztására használnak. Ha nem adja meg ezt az argumentumot, a szóköz karakterek számítanak alapértelmezett elválasztónak. Ha nulla hosszúságú karakterláncot („”) ad meg, a függvény visszaadja a teljes „Kifejezés” karakterláncot.
  • Határ: Ez egy opcionális érv. Itt adja meg a visszaadni kívánt alláncok teljes számát. Például, ha csak az első három alláncot szeretné visszaadni a „Kifejezés” argumentumból, akkor ez a 3. Ha nem adja meg ezt az argumentumot, akkor az alapértelmezett érték -1, amely az összes alláncot adja vissza.
  • Összehasonlítás: Ez egy opcionális érv. Itt adja meg az összehasonlítás típusát, amelyet az SPLIT függvénynek végre kell hajtania az alláncok értékelésekor. A következő lehetőségek állnak rendelkezésre:
    • Ha az Összehasonlítás értéke 0: Ez egy bináris összehasonlítás. Ez azt jelenti, hogy ha a határoló szöveges karakterlánc (mondjuk ABC), akkor ez megkülönbözteti a kis- és nagybetűket. Az „ABC” nem egyenlő az „abc” értékkel.
    • Ha az összehasonlítás értéke 1: Ez egy szöveges összehasonlítás. Ez azt jelenti, hogy ha a határoló szöveges karakterlánc (mondjuk ABC), akkor még akkor is, ha az „kifejezés” karakterláncban van „abc”, elválasztónak kell tekinteni.

Most, hogy kitértünk az SPLIT funkció alapjaira, nézzünk néhány gyakorlati példát.

1. példa - Ossza fel a szavakat egy mondatban

Tegyük fel, hogy megvan a szöveg - „A gyors barna róka átugorja a lusta kutyát”.

Az SPLIT függvény segítségével e mondat minden szavát egy tömb külön elemévé tehetem.

Az alábbi kód erre utalna:

Sub SplitWords () Dim TextStrng mint karakterlánc halvány eredmény

Bár a kód semmi hasznosat nem nyújt, segít megérteni, hogy a VBA Split funkciója mit tesz.

A Split függvény feldarabolja a szöveges karakterláncot, és minden szót hozzárendel a Result tömbhöz.

Tehát ebben az esetben:

  • Az eredmény (0) a „The” értéket tárolja
  • Az eredmény (1) a „Gyors” értéket tárolja
  • Az eredmény (2) tárolja a „Barna” értéket és így tovább.

Ebben a példában csak az első argumentumot adtuk meg - ez az osztandó szöveg. Mivel nincs megadva elválasztó, szóköz karaktert használ alapértelmezett elválasztónak.

Fontos jegyzet:

  1. A VBA SPLIT függvény egy tömböt ad vissza, amely a 0 -ból indul.
  2. Amikor az SPLIT függvény eredményét hozzárendeli egy tömbhöz, ezt a tömböt String adattípusként kell deklarálni. Ha Variant adattípusként deklarálja, akkor típushiba jelenik meg). A fenti példában vegye figyelembe, hogy az eredményt () karakterlánc -adattípusnak nyilvánítottam.

2. példa - Számolja meg a mondatban szereplő szavak számát

Az SPLIT függvény segítségével megkaphatja a mondat összes szavának számát. A trükk itt az, hogy megszámoljuk a tömb elemeinek számát, amelyeket a szöveg felosztásakor kapunk.

Az alábbi kód egy üzenetmezőt jelenít meg a szavak számával:

Sub WordCount () Dim TextStrng mint karakterlánc Halvány WordCount mint egész halvány eredmény A Word Count "& WordCount End Sub

Ebben az esetben az UBound függvény megmondja a tömb felső korlátját (azaz a tömb maximális elemszámát). Mivel a tömb alapja 0, 1 hozzáadódik a teljes szószámhoz.

Hasonló kódot használva hozzon létre egy egyéni függvényt a VBA -ban, amely a szöveget használja bemenetként, és visszaadja a szószámot.

Az alábbi kód hozza létre ezt a funkciót:

Funkció WordCount (CellRef mint tartomány) Dim szövegStrng karakterláncként halvány eredmény

A létrehozás után a WordCount függvényt ugyanúgy használhatja, mint bármely más normál funkciót.

Ez a funkció kezeli a szavak közötti kezdő, záró és kettős szóközöket is. Ezt a VBA kód TRIM funkciója tette lehetővé.

Ha többet szeretne megtudni arról, hogyan működik ez a képlet a mondatban szereplő szavak számának számításához, vagy szeretne megismerkedni a szavak számának nem VBA képletével, nézze meg ezt az oktatóanyagot.

3. példa - A szóköztől eltérő határoló használata

Az előző két példában csak egy argumentumot használtunk az SPLIT függvényben, a többi pedig az alapértelmezett argumentum volt.

Más határoló használata esetén ezt meg kell adnia az SPLIT képletben.

Az alábbi kódban az SPLIT függvény egy tömböt ad vissza, amely egy vessző, mint elválasztó, majd megjelenít egy üzenetet minden szóval egy külön sorban.

Sub CommaSeparator () Dim TextStrng mint karakterlánc halvány eredmény i = LBound (Result ()) to UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

A fenti kódban a For Next hurkot használtam az „Result” tömb egyes elemeinek hozzárendeléséhez a „DisplayText” változóhoz.

4. példa - Osszon meg egy címet három részre

A SPLIT funkcióval megadhatja, hogy hány osztást szeretne kapni. Például, ha nem adok meg semmit, a határoló minden példányát használnánk a karakterlánc felosztására.

De ha 3 -at adok meg korlátnak, akkor a karakterlánc csak három részre lesz felosztva.

Például, ha a következő címem van:

2703 Winifred Way, Indianapolis, Indiana, 46204

A VBA Split funkciójával három részre oszthatom ezt a címet.

Az első kettőt felosztja a vessző elválasztója alapján, a fennmaradó rész pedig a tömb harmadik elemévé válik.

Az alábbi kód három címsorban jeleníti meg a címet egy üzenetmezőben:

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

Ennek egyik gyakorlati haszna lehet, ha egyetlen soros címet szeretne felosztani az üzenetmezőben látható formátumba. Ezután létrehozhat egy egyéni függvényt, amely három részre osztva adja vissza a címet (minden egyes részt új sorban).

A következő kód ezt tenné:

Funkció ThreePartAddress (cellRef As Range) Dim szöveg = DisplayText & Trim (Result (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Befejező funkció

Miután megvan ez a kód a modulban, ugyanúgy használhatja a funkciót (ThreePartAddress) a munkafüzetben, mint bármely más Excel funkciót.

Ez a függvény egy érvet tartalmaz - a cellahivatkozást, amely tartalmazza a címet.

Ne feledje, hogy ahhoz, hogy a kapott cím három különböző sorban jelenjen meg, alkalmaznia kell a csomagoló szöveg formátumát a cellákra (ez az Igazítás csoport Kezdőlap lapján található). Ha a „Szöveg betöltése” formátum nincs engedélyezve, akkor a teljes címet egyetlen sorként fogja látni.

5. példa - Szerezze be a város nevét a címből

A VBA Split funkciójával megadhatja, hogy a kapott tömb melyik részét szeretné használni.

Tegyük fel például, hogy a következő címet osztom fel elválasztó vessző alapján:

2703 Winifred Way, Indianapolis, Indiana, 46204

A kapott tömb az alábbiak szerint nézne ki:

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

Mivel ez egy tömb, választhatom, hogy megjelenítem vagy visszaküldöm a tömb egy adott részét.

Az alábbiakban egy egyéni függvény kódja található, ahol megadhat egy számot, és az visszaadja az elemet a tömbből. Például, ha az állapotnevet akarom, megadhatok 3 -at (mivel ez a tömb harmadik eleme).

Funkció ReturnNthElement (CellRef mint tartomány, ElementNumber mint Integer) Dim Result () String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) End Function

A fenti függvény két érvet tartalmaz, a cellahivatkozást, amely tartalmazza a címet és a visszaadni kívánt elemszámot. A Split függvény feldarabolja a címelemeket, és hozzárendeli az Result változóhoz.

Ezután visszaadja a második argumentumként megadott elemszámot. Ne feledje, hogy mivel az alap 0, az ElementNumber-1 a cím helyes részét adja vissza.

Ez az egyéni képlet akkor a legalkalmasabb, ha minden címe konzisztens formátumú - azaz a várost mindig a két vessző után említik. Ha az adatok nem konzisztensek, akkor nem kapja meg a kívánt eredményt.

Abban az esetben, ha a város nevét szeretné megadni, akkor a 2 -t használhatja második argumentumként. Abban az esetben, ha az összes elemnél nagyobb számot használ, az #ÉRTÉK értéket ad vissza. hiba.

Az alábbi módon tovább egyszerűsítheti a kódot:

Funkció ReturnNthElement (CellRef as Range, ElementNumber as Integer) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Funkció befejezése

A fenti kódban a Result változó használata helyett csak a megadott elemszámot adja vissza.

Tehát ha Split („Jó reggelt”) (0) van, akkor csak az első elemet adja vissza, ami „Jó”.

Hasonlóképpen, a fenti kódban csak a megadott elemszámot adja vissza.

wave wave wave wave wave