VBA karakterlánc-manipulációs függvények és Operatorzok

⚡ Okos összefoglaló

VBA karakterlánc-manipulációs függvények és Operaa torok kombinálják, mérik és kiértékeliktract szöveg az Excel makrókban. Ez az oldal ismerteti az összefűző operátort, a Left, Right, Mid, Len és InStr függvényeket, a felosztást és az egyesítést, valamint a karakterlánc-kódban leggyakrabban előforduló hibákat.

  • 🔤 Karakterlánc adatok: Karakterek, szimbólumok és számok felhasználásával létrehozott érték, például a 2015. júliusi szöveg.
  • láncolat Operator: Az és jel két karakterláncot köt össze, így a „John ” és a „Doe” John Doe értéket adja vissza.
  • ✂️ Extracfunkciók: A Left, Right és Mid függvények egy részkarakterláncot húznak ki egy érték elejéről, végéről vagy közepéről.
  • 📏 Mérési funkciók: A Len megszámolja a karaktereket, az InStr pedig visszaadja azt a pozíciót, ahol egy alkarakterlánc kezdődik.
  • 🧩 Szétválasztás és egyesítés: A Split egy elválasztott karakterláncot tömbbé bont, a Join pedig egyetlen karakterlánccá építi újra a tömböt.
  • ⚠️ Gyakori hibák: A legtöbb sikertelen összehasonlítást típuseltérés, az InStr nulla értéke és a záró szóközök okozzák.

VBA karakterlánc-manipulációs függvények és Operatorzok

VBA karakterlánc Operatorzok

A karakterláncadatok a számokból, karakterekből és szimbólumokból álló adatok tárolására szolgálnak. „Jul-2015” egy példa egy karakterlánc-adatra. Ez abból áll

  • Karakterek (júl.)
  • Szimbólum (-)
  • Numbers (2015)

A karakterlánc-operátorok a karakterláncadatok manipulálására szolgálnak. Például összefűzheti a 2015. július-3. évi értéket a hónap és az év első 2015 betűjéből, például „júl-XNUMX”.

A következő táblázat az összefűzött VBA karakterlánc operátort mutatja.

S / N Operator Leírás Példa teljesítmény
1 & Összefűzés: Ez az operátor karakterláncok összefűzésére szolgál "Gipsz Jakab" John Doe

Példaforrás Code

VBA karakterlánc Operapélda forrása Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

A fenti kód végrehajtása a következő eredményt adja

VBA karakterlánc Operapélda forrása Code

Az és-jel nem az egyetlen szimbólum, amely szöveget köt össze, és a kettő közötti különbség akkor számít, ha számokról van szó.

Különbség a & és a + között a karakterlánc-összefűzésnél

A VBA elfogadja mind az és-jelet, mind a pluszjelet két szöveges érték között, így a kezdők gyakran felcserélhetőnek tekintik őket. Másképp viselkednek, amint az egyik operandus szám vagy üres érték, és csak az egyik biztonságos közülük.

Viselkedés & (És-jel) + (plusz)
Két szöveges érték Csatlakozik hozzájuk: „Guru„” és „99” ad vissza Guru99 Csatlakozik hozzájuk: „Guru„+„99” ad vissza Guru99
Szöveg és egy szám A számot szöveggé alakítja: az „Age ” és a 30 a 30-as életkort adja vissza. Típus-eltérés hibát jelez
Két numerikus karakterlánc A „10” és az „5” 105-öt ad vissza A „10” + „5” összeadásával 15-öt adhat vissza.
Null érték A Null értéket üres karakterláncként kezeli Null értéket ad vissza, és elveti a teljes eredményt.

💡 Tipp: Mindig az és jelet használd az összefűzéshez, a plusz jelet pedig tartsd fenn a következőre: aritmetikai műveletekTegyen szóközt az és jel elé és mögé, mert a Total& írását a VBA Long típusú deklarációs karakterként olvassa.

VBA karakterlánc-manipulációs függvények

A VBA karakterlánc-manipuláció fontos eleme Excel VBA makró programozáshoz és karakterláncműveletek. Az Excel különféle típusú VBA karakterlánc-manipulációs funkciókat kínál, például:

  • Bal: ex-re használjáktract karakter a karakterlánc bal oldaláról
  • Jobb: ex-re használjáktract karakter a karakterlánc jobb oldaláról
  • Középső: ex-re használjáktracta alkarakterlánc a karakterlánc közepéből
  • Len: egy karakterlánc hosszának meghatározására szolgál
  • InStr: egy részkarakterlánc pozíciójának meghatározására szolgál egy karakterláncban
  • Állapot: a karakterlánc mindkét végéről szóközök eltávolítására szolgál
  • Cserélje: egy alkarakterlánc minden előfordulásának egy másikra cserélésére szolgál
  • UCase / LCase: karakterláncok nagybetűssé vagy kisbetűssé alakítására szolgálnak

Az alábbi táblázat az egyes függvények szintaxisát mutatja egy működő példával, így a mintát közvetlenül egy makróba másolhatja.

Funkció Szintaxis Példa teljesítmény
Bal Bal(karakterlánc, hossz) Balra („2015. július”, 3) Július
Jobb Jobbra(karakterlánc, hossz) Jobbra („2015. július”, 4) 2015
Középső Mid(karakterlánc, kezdet, hossz) Közepes („2015. július”, 5, 4) 2015
Len Len(karakterlánc) Len („2015. július”) 8
InStr InStr(kezdet, karakterlánc, alkarakterlánc) InStr(1, "júl-2015", "-") 4
Állapot Trim(karakterlánc) Trim(” Guru99 hüvelyk) Guru99
Cserélje Csere(karakterlánc, keresés, csere) Csere ("2015. július", "-", "/") Július / 2015
UCase UCase(karakterlánc) UCase („guru99”) GURU99

Az alábbi makró ezen függvények közül többet kombinál, hogy a dátumcímkét a részeiből újraépítse.

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

A makró futtatása a 2015. júliusi állapotot jeleníti meg. Minden függvény új értéket ad vissza, és az eredeti karakterláncot érintetlenül hagyja, ezért az eredmények biztonságosan kombinálhatók egyetlen kifejezésben.

Ezek a függvények egyszerre csak egy karakterlánccal dolgoznak. Amikor egyetlen érték egy egész listát tartalmaz, két másik függvény jobban kezeli azt.

Hogyan lehet sztringeket felosztani és egyesíteni VBA-ban?

Az Excelbe beillesztett adatok gyakran egyetlen hosszú értékként érkeznek meg, az egyes elemek között elválasztó jellel, például „Pepsi, Coca-Cola, Fanta, Gyümölcslé”. Ennek a Mid és InStr paraméterekkel való olvasása lassú és törékeny. A VBA pontosan erre a feladatra biztosít egy párosított függvénypárt.

Hasított egy elválasztott karakterláncot vesz fel, és egy nullákkal teli tömböt ad vissza, elemenként egy elemmel. Csatlakozik A Join függvény fordított sorrendben működik, egy tömböt vesz fel, és egyetlen, az elemek között elválasztóval ellátott karakterlánccal tér vissza. Fontos megjegyezni, hogy a Join függvény tömbön működik, két külön karakterláncon nem.

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

A ciklus minden italt a saját munkalap sorába ír, és az üzenetmező ezután a Pepsi | Coca-Cola | Fanta | Juice szöveget jeleníti meg. Három pont teszi ezt a mintát megbízhatóvá a termelési kódban:

  • Nulla alapú eredmény: A Split mindig egy 0-tól kezdődő számozású tömböt ad vissza, függetlenül attól, hogy az Option Base értéke mire van beállítva, ezért a ciklust LBound és UBound paraméterekkel vezéreljük fix szám helyett.
  • String()-ként deklarálandó: Rendeld az eredményt egy dinamikus String tömbhöz. Ha először fix méretet deklarálsz, az fordítási hibát okoz.
  • Üres bemenet: Egy üres karakterlánc felosztása egy elem nélküli tömböt ad vissza, ezért az Items(0) beolvasása előtt teszteld az UBound-dal.

Még a helyes függvény kiválasztása esetén is előfordulhat, hogy a karakterlánc-kód néhány előre látható módon hibát okoz.

Gyakori VBA karakterlánchibák és javításuk

Az Excel VBA karakterlánchibáinak többségét néhány okból kifolyólag találjuk. A tünet felismerése hosszú hibakeresési munkamenetet takarít meg.

  • Típuseltérés összefűzéskor: Egy pluszjelet használt a szöveg és a szám között. Cserélje le egy és-jelre, amely automatikusan konvertálja a számot.
  • Az InStr értéke 0-t ad vissza: A karakterlánc nem található. Hiba esetén az InStr 0 értéket ad vissza -1 helyett, ezért tesztelje, hogy az érték nagyobb-e nullánál, mielőtt átadná az eredményt a Mid-nek.
  • Érvénytelen eljáráshívás a középső vagy a bal oldalon: A kért hossz negatív, vagy a kezdőpozíció 1 alatt van. Védje a hívást Len paraméterrel, hogy a hossz soha ne haladja meg a karakterláncot.
  • Összehasonlítások, amelyeknek egyezniük kellene, de nem egyeznek: Az importált adatok végén lévő szóközök megtörik az egyenlőséget. A Trim függvényben mindkét oldalt tördelje be, és ha a kis- és nagybetűket figyelmen kívül kell hagyni, használja az StrComp függvényt.
  • Szöveg, ami nem válik számmá: Egy olyan érték, mint például az „1,200”, aritmetikai hibát jelez az elválasztó miatt. Távolítsa el a Replace paranccsal, mielőtt CLng paranccsal konvertálná.

Töltse le a fenti kódot tartalmazó Excelt

Töltsd le a fenti Excelt Code

GYIK

Egy változó hosszúságú karakterlánc nagyjából kétmilliárd karaktert tárolhat, míg egy fix hosszúságú karakterlánc legfeljebb 65 400 karaktert. Egy munkalapcella azonban csak 32 767 karaktert tárol, így a hosszabb értékeket a program csonkolja a munkalapra íráskor.

Az egyenlőségjel alapértelmezés szerint kis- és nagybetűérzékenyen hasonlítja össze őket. Kis- és nagybetűérzékeny eredményhez használd a StrComp(a, b, vbTextCompare) függvényt, vagy helyezd el az Option Compare Text utasítást a modul tetejére, ha az egész modulra vonatkozó alapértelmezett értéket szeretnéd megváltoztatni.

Az „és” jel minden operandust szöveggé alakít az illesztés előtt, így a 10 és az 5 a 105-ös karakterláncot adja vissza. Az értékek maradjanak numerikusak, és először adjuk össze őket, majd fűzzük össze az eredményt, ha egy üzenetben kell megjelennie.

Igen. Írja le a bemenetet és a kívánt kimenetet, példáultracAz első kötőjel előtti kódot egy MI-asszisztens adja vissza, és egy Left és InStr kifejezést. Teszteld szélső esetekkel, például hiányzó kötőjellel szemben.

Igen. Illesszen be egy beágyazott kifejezést, például a Mid-et, amelyben az InStr szerepel, és egy mesterséges intelligencia asszisztens lépésekre bontja, elnevezi az egyes argumentumokat, és megjelöli azt az esetet, amikor az InStr nullát ad vissza, és a hívás sikertelen.

Foglald össze ezt a bejegyzést a következőképpen: