Tartalomjegyzék
Szeretné a leghatékonyabban kezelni a szóközöket? Használja a reguláris kifejezéseket a cellában lévő összes szóköz eltávolítására, több szóköz egyetlen karakterrel való helyettesítésére, a csak számok közötti szóközök levágására és még sok másra.
Bármilyen bemeneti adatot is használ, aligha találkozik szóközök nélküli adatkészlettel. A legtöbb esetben a szóköz jó - arra használja, hogy vizuálisan elválassza a különböző információkat, hogy könnyebben érzékelhetővé tegye azokat. Bizonyos helyzetekben azonban gonosszá válhat - az extra szóközök összezavarhatják a képleteket, és szinte kezelhetetlenné tehetik a munkalapokat.
Miért használjon szabályos kifejezést a szóközök levágására az Excelben?
Mielőtt belemerülnénk a szabályos kifejezések használatának apró részleteibe az Excel munkalapok fehérjeleinek eltávolításához, szeretnék foglalkozni azzal a kérdéssel, ami először is eszünkbe jut - miért van szükségünk regexekre, amikor az Excel már rendelkezik a TRIM funkcióval?
Hogy megértsük a különbséget, nézzük meg, mi számít üres helynek az egyes esetekben:
- A beépített TRIM függvény csak a szóköz karakter amely a 7 bites ASCII rendszerben 32-es értékű.
- A reguláris kifejezések a szóköz néhány különböző formáját azonosíthatják, mint például a szóköz ( ), a tabulátor (\t), a kocsivissza (\r) és az új sor (\n). Ezen kívül létezik még a szabályos kifejezésekben a szóköz karakter (\s), amely megfelel mindezen típusoknak, és rendkívül hasznos a nyers bemeneti adatok tisztításához.
Ha pontosan tudjuk, mi történik a színfalak mögött, sokkal könnyebb megoldást találni, nem igaz?
Hogyan engedélyezheti a reguláris kifejezéseket az Excelben
Köztudott, hogy a kész Excel nem támogatja a reguláris kifejezéseket. Ezek engedélyezéséhez egy egyéni VBA függvényt kell létrehozni. Szerencsére már van egy, a neve RegExpReplace Várjunk csak, miért "replace", amikor az eltávolításról beszélünk? Az Excel nyelvén az "remove" csak egy másik szó az "üres karakterlánccal helyettesíteni" szóra :)
A függvény hozzáadásához az Excelhez csak másolja ki a kódot erről az oldalról, illessze be a VBA-szerkesztőbe, és mentse a fájlt makroképes munkafüzet (.xlsm).
Itt van a funkció szintaxisa az Ön számára:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Az első három argumentum kötelező, az utolsó kettő opcionális.
Hol:
- Szöveg - az eredeti karakterlánc, amelyben keresni kell.
- Mintázat - a keresendő regex.
- Csere - a szöveget, amellyel helyettesíteni kell. To távolítsa el a fehérterek , akkor ezt az argumentumot vagy:
- üres karakterlánc (""), hogy minden szóközt eltávolítson
- űr karakter (" ") több szóköz helyettesítésére egyetlen szóköz karakterrel
- Instance_num (opcionális) - a példányszám. A legtöbb esetben elhagyja, ha az összes példányt lecseréljük (alapértelmezett).
- Match_case (opcionális) - egy bóluszi érték, amely azt jelzi, hogy a szöveg nagy- és kisbetűinek megfelel-e (TRUE) vagy figyelmen kívül hagyja (FALSE). A szóközök esetében irreleváns, ezért elhagyható.
További információért lásd a RegExpReplace funkciót.
Hogyan távolítsuk el a szóközöket regex-szel - példák
A RegExpReplace függvényt hozzáadva a munkafüzethez, foglalkozzunk egyesével a különböző forgatókönyvekkel.
Az összes szóköz eltávolítása regex használatával
Ha el akarja távolítani az összes szóközt egy karakterláncból, egyszerűen keressen meg minden szóköz karaktert, beleértve a szóközt, a tabulátort, a kocsivisszatérést és a sortovábbítást, és helyettesítse őket egy üres karakterlánccal ("").
Mintázat : \s+
Csere : ""
Feltételezve, hogy a forrássztring az A5-ben van, a B5-ben lévő képlet a következő:
=RegExpReplace(A5, "\s+", "")
A minták kezelésének megkönnyítése érdekében a regexet egy előre meghatározott cellába is beírhatja, és abszolút hivatkozással, például $A$2-vel adhatja meg a képletnek, így a cella címe változatlan marad, amikor a képletet az oszlopba másolja.
=RegExpReplace(A5, $A$2, "")
Egynél több szóköz eltávolítása
Eltávolítani extra szóköz (azaz egynél több egymást követő szóköz), használja ugyanazt a regexet \s+, de a talált egyezéseket egyetlen szóköz karakterrel helyettesíti.
Mintázat : \s+
Csere : " "
=RegExpReplace(A5, "\s+", " ")
Kérjük, figyeljen arra, hogy ez a képlet nemcsak a szavak között, hanem a karakterlánc elején és végén is megtart egy szóköz karaktert, ami nem jó. Ha meg akar szabadulni a vezető és az utolsó szóközöktől, a fenti képletet egy másik RegExpReplace függvénybe fészkelje, amely eltávolítja a szóközöket az elejéről és a végéről:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
Regex a vezető és az utolsó szóközök eltávolításához
A sor elején vagy végén lévő szóközök kereséséhez használja a kezdő ^ és a vég $ horgonyokat.
Vezető szóköz:
Mintázat : ^[\s]+
Hátulról szóköz:
Mintázat : [\s]+$
Vezető és utánfutó szóköz:
Mintázat : ^[\s]+
Bármelyik regexet is választja, a találatokat helyettesítse a semmivel.
Csere : ""
Például, ha az A5-ös karakterlánc elején és végén lévő összes szóközt el akarjuk tüntetni, a képlet a következő:
=RegExpReplace(A5, "^[\s]+".
Amint az alábbi képernyőképen látható, ez csak a vezető és az utolsó szóközöket távolítja el. A szavak közötti szóközök érintetlenül maradnak, így vizuálisan kellemes látványt nyújtva az olvasó szemének.
Távolítsa el az extra szóközöket, de tartsa meg a sortöréseket
Ha többsoros karakterláncokkal dolgozik, előfordulhat, hogy meg akar szabadulni a felesleges szóközöktől, de a sortöréseket meg akarja tartani. Ehhez a \s szóköz karakter helyett keresse a szóközöket [ ] vagy a szóközöket és tabulátorokat [\t ]. Ez utóbbi minta akkor jön jól, ha a forrásadatokat más forrásból, például szövegszerkesztőből importálja.
Tegyük fel, hogy az alábbi adatkészletben az összes kezdő/végső szóközt és a szóközök között lévő szóközöket egy kivételével ki szeretné vágni, több sort érintetlenül hagyva. A feladat elvégzéséhez két különböző RegExpReplace függvényre lesz szüksége.
Az első funkció több szóközt egyetlen szóköz karakterrel helyettesít.
=RegExpReplace(A5, " +", " ")
A másik a sor elejéről és végéről eltávolítja a szóközöket:
=RegExpReplace(A5, "^ +")
Csak illessze a két funkciót egymásba:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +
És tökéletes eredményt fogsz kapni:
Regex több szóköz egy karakterrel való helyettesítésére
Ha az összes szóközt el akarja távolítani egy karakterláncból, és az egymást követő szóközök minden egyes csoportját egy adott karakterrel akarja helyettesíteni, akkor ezt kell tennie:
Először is, használja ezt a regexet a vezető és az utolsó szóközök levágására:
=RegExpReplace(A8, "^[\s]+".
Ezután a fenti funkciót szolgáljuk ki a szöveg egy másik RegExpReplace argumentuma, amely egy vagy több egymást követő fehérjelet helyettesít a megadott karakterrel, például kötőjellel:
Mintázat : \s+
Csere : -
Feltételezve, hogy a forrás karakterlánc az A8-ban van, a képlet a következő formát ölti:
=RegExpReplace(RegExpReplace(A8, "^[\s]+")
Vagy a mintákat és a helyettesítéseket külön cellákba is beírhatja, ahogy a képernyőképen látható:
Regex az üres sorok eltávolításához
Íme egy kérdés, amelyet gyakran tesznek fel azok a felhasználók, akiknek egy cellában több sor van: "Rengeteg üres sor van a celláimban. Van más módja annak, hogy megszabaduljak tőlük, mint végigmenni minden egyes cellán és kézzel törölni minden egyes sort?" A válasz: Ez egyszerű!
Az olyan üres sorokra való illesztéshez, amelyekben nincs egyetlen karakter sem az aktuális sor ^ kezdetétől a következő sor \n-ig, a regex a következő:
Mintázat : ^\n
Ha a vizuálisan üres sorok szóközöket vagy tabulátorokat tartalmaznak, használja ezt a szabályos kifejezést:
Mintázat : ^[\t ]*\n
Csak cserélje ki a regexet egy üres karakterláncra ezzel a formulával, és az összes üres sor egyszerre eltűnik!
=RegExpReplace(A5, $A$2, "")
Fehérbetűs szóközök eltávolítása RegEx eszközökkel
A fenti példák csak egy kis részét mutatták be a regexek által nyújtott csodálatos lehetőségeknek. Sajnos a klasszikus reguláris kifejezések nem minden funkciója érhető el a VBA-ban.
Szerencsére az Ultimate Suite csomagunkban található RegEx eszközök mentesülnek ezektől a korlátozásoktól, mivel azokat a Microsoft .NET RegEx motorja dolgozza fel. Ez lehetővé teszi, hogy kifinomultabb mintákat is létrehozzon, amelyeket a VBA RegExp nem támogat. Az alábbiakban egy példát talál egy ilyen reguláris kifejezésre.
Regex a számok közötti szóköz eltávolítására
Tegyük fel, hogy egy alfanumerikus karakterláncban csak a számok közötti szóközöket szeretnénk eltávolítani, így az "A 1 2 B" karakterláncból "A 12 B" lesz.
A két számjegy közötti üres szóköz megfeleltetéséhez a következő megoldásokat használhatja:
Mintázat : (?<=\d)\s+(?=\d)
A fenti regexeken alapuló képlet létrehozásához két egyszerű lépést kell végrehajtani:
- A Ablebits adatok lapon, a Szöveg csoport, kattintson a Regex eszközök .
- A Regex eszközök ablaktábla, válassza ki a forrásadatokat, írja be a regexet, válassza ki a Távolítsa el a opciót, és nyomja meg a Távolítsa el a .
Ahhoz, hogy az eredményeket képletként kapja meg, nem pedig értékként, ne feledje, hogy egy pipa legyen a Beillesztés képletként jelölőnégyzet.
Egy pillanat múlva látni fogja a AblebitsRegexRemove függvény az eredeti adatoktól jobbra lévő új oszlopba illesztett.
Alternatívaként beírhatja a regexet egy cellába, mondjuk az A5-be, és a képletet közvetlenül egy cellába illesztheti be a Beillesztési funkció párbeszédpanel, ahol AblebitsRegexRemove a következő kategóriába sorolandó AblebitsUDFs .
Mivel ez a függvény kifejezetten karakterláncok eltávolítására készült, csak két argumentumot igényel - a bemeneti karakterláncot és a regexet:
=AblebitsRegexRemove(A5, $A$2)
Így távolítsuk el a szóközöket az Excelben a reguláris kifejezések segítségével. Köszönöm, hogy elolvastad, és várom, hogy jövő héten találkozzunk a blogunkon!
Elérhető letöltések
Szóközök eltávolítása regex-szel - példák (.xlsm fájl)
Ultimate Suite - próbaverzió (.exe fájl)