Sisällysluettelo
Haluatko käsitellä välilyöntejä mahdollisimman tehokkaasti? Käytä säännöllisiä lausekkeita, joilla voit poistaa kaikki välilyönnit solusta, korvata useita välilyöntejä yhdellä merkillä, leikata välilyöntejä vain numeroiden väliltä ja paljon muuta.
Käytitpä sitten mitä tahansa syöttötietoja, tuskin törmäät tietokokonaisuuteen, jossa ei ole välilyöntejä. Useimmissa tapauksissa välilyönnit ovat hyvä asia - niitä käytetään erottamaan visuaalisesti toisistaan eri tietoja, jotta ne olisivat helpommin hahmotettavissa. Joissakin tilanteissa niistä voi kuitenkin tulla paha asia - ylimääräiset välilyönnit voivat sotkea kaavojasi ja tehdä laskentataulukoista melkein mahdottomia hallita.
Miksi käyttää säännöllistä lauseketta valkoisten välilyöntien leikkaamiseen Excelissä?
Ennen kuin paneudumme siihen, miten säännöllisiä lausekkeita käytetään valkoisten välilyöntien poistamiseen Excelin työarkista, haluaisin vastata kysymykseen, joka tulee mieleen ensimmäiseksi - miksi tarvitsemme regexejä, kun Excelissä on jo TRIM-toiminto?
Jotta ymmärtäisit eron, katsotaan, mitä pidetään tyhjänä välilyöntinä kussakin tapauksessa:
- Sisäänrakennettu TRIM-toiminto voi poistaa vain tiedoston välilyönti merkki jonka arvo on 32 7-bittisessä ASCII-järjestelmässä.
- Säännöllisten lausekkeiden avulla voidaan tunnistaa muutamia erilaisia välilyönnin muotoja, kuten välilyönti ( ), tabulaattori (\t), kuljetuksen palautus (\r) ja uusi rivi (\n). Lisäksi on olemassa myös välilyönti merkki (\s), joka vastaa kaikkia näitä tyyppejä ja on erittäin hyödyllinen raakojen syöttötietojen puhdistamisessa.
Kun tietää tarkalleen, mitä kulissien takana tapahtuu, on paljon helpompi keksiä ratkaisu, eikö niin?
Kuinka ottaa säännölliset lausekkeet käyttöön Excelissä
On yleisesti tunnettu tosiasia, että Excel ei tue säännönmukaisia lausekkeita. Niiden käyttöönotto edellyttää mukautetun VBA-funktion luomista. Onneksi meillä on jo yksi sellainen, nimeltään RegExpReplace Odota, miksi "korvata", kun puhumme poistamisesta? Excel-kielessä "poistaa" on vain toinen sana sanalle "korvata tyhjällä merkkijonolla" :)
Voit lisätä toiminnon Exceliin kopioimalla sen koodin tältä sivulta, liittämällä sen VBA-editoriin ja tallentamalla tiedoston nimellä makrotoiminnoilla varustettu työkirja (.xlsm).
Tässä on funktion syntaksi:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Kolme ensimmäistä argumenttia ovat pakollisia, kaksi viimeistä ovat valinnaisia.
Missä:
- Teksti - alkuperäinen merkkijono, josta haetaan.
- Kuvio - etsittävä regex.
- Korvaava - teksti, jolla korvataan. To poista välilyönnit , asetat tämän argumentin arvoksi joko:
- tyhjä merkkijono ("") leikata kaikki välilyönnit pois
- avaruus merkki (" ") korvaa useita välilyöntejä yhdellä välilyöntimerkillä.
- Instance_num (valinnainen) - instanssin numero. Useimmissa tapauksissa jätät sen pois, jos haluat korvata kaikki instanssit (oletusarvo).
- Match_case (valinnainen) - boolen arvo, joka osoittaa, onko tekstin isokirjaimet otettava huomioon (TRUE) vai jätettävä huomiotta (FALSE). Välilyönnin osalta sillä ei ole merkitystä, joten se jätetään pois.
Lisätietoja on kohdassa RegExpReplace-funktio.
Miten välilyönnit poistetaan regexillä - esimerkkejä
Kun RegExpReplace-toiminto on lisätty työkirjaan, käsitellään eri skenaarioita yksi kerrallaan.
Poista kaikki välilyönnit regexin avulla
Jos haluat poistaa kaikki välilyönnit merkkijonosta, etsi mikä tahansa välilyönti, mukaan lukien välilyönti, tabulaattori, rivinvaihto ja rivinvaihto, ja korvaa ne tyhjällä merkkijonolla ("").
Kuvio : \s+
Korvaava : ""
Jos oletetaan, että lähdejono on A5:ssä, B5:ssä oleva kaava on:
=RegExpReplace(A5, "\s+", "")
Helpottaaksesi kaavojen hallintaa voit syöttää regexin ennalta määritettyyn soluun ja syöttää sen kaavaan käyttämällä absoluuttista viittausta, kuten $A$2, jolloin solun osoite säilyy muuttumattomana, kun kaava kopioidaan sarakkeeseen.
=RegExpReplace(A5, $A$2, "")
Poista useampi kuin yksi välilyönti
Poistaaksesi ylimääräinen välilyönti (eli useampi kuin yksi peräkkäinen välilyönti), käytä samaa regexiä \s+, mutta korvaa löydetyt osumat yhdellä välilyönnillä.
Kuvio : \s+
Korvaava : " "
=RegExpReplace(A5, "\s+", " ")
Huomaa, että tämä kaava pitää yhden välilyönnin paitsi sanojen välissä myös merkkijonon alussa ja lopussa, mikä ei ole hyvä asia. Jos haluat päästä eroon johtavista ja perässä olevista välilyönneistä, sisällytä yllä oleva kaava toiseen RegExpReplace-funktioon, joka poistaa välilyönnit alusta ja lopusta:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
Regex johtavan ja perässä olevan välilyönnin poistamiseksi
Jos haluat etsiä välilyöntejä rivin alusta tai lopusta, käytä alku- ^- ja loppu$-ankkureita.
Johtava välilyönti:
Kuvio : ^[\s]+
Jäljellä välilyönti:
Kuvio : [\s]+$
Johtava ja perässä välilyönti:
Kuvio : ^[\s]+
Valitsitpa minkä tahansa regexin, korvaa osumat tyhjällä.
Korvaava : ""
Jos esimerkiksi haluat poistaa kaikki välilyönnit merkkijonon A5 alusta ja lopusta, kaava on seuraava:
=RegExpReplace(A5, "^[\s]+").
Kuten alla olevassa kuvakaappauksessa näkyy, tämä poistaa vain etu- ja jälkimmäisen välilyönnin. Sanojen välit säilyvät ennallaan, mikä luo visuaalisesti miellyttävän näkymän lukijan silmälle.
Poista ylimääräiset välilyönnit, mutta säilytä rivinvaihdot
Kun työskentelet monirivisten merkkijonojen kanssa, saatat haluta päästä eroon ylimääräisistä välilyönneistä, mutta säilyttää rivinvaihdot. Voit tehdä tämän etsimällä välilyönti-merkin \s sijasta välilyöntejä [ ] tai välilyöntejä ja tabulaattoreita [\t ]. Jälkimmäinen kuvio on kätevä, kun lähdetietosi tuodaan toisesta lähteestä, esimerkiksi tekstieditorista.
Oletetaan, että alla olevassa tietokokonaisuudessa haluat leikata kaikki etu- ja loppuvälien välilyönnit ja kaikki välilyöntien välissä olevat välilyönnit yhtä lukuun ottamatta ja säilyttää useita rivejä koskemattomina. Tehtävän suorittamiseksi tarvitset kaksi eri RegExpReplace-funktiota.
Ensimmäinen toiminto korvaa useita välilyöntejä yhdellä välilyöntimerkillä.
=RegExpReplace(A5, " +", " ")
Toinen poistaa välilyönnit rivin alusta ja lopusta:
=RegExpReplace(A5, "^ +").
Aseta nämä kaksi toimintoa vain toisiinsa:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +
Ja saat täydellisen tuloksen:
Regex korvaa useita välilyöntejä yhdellä merkillä
Jos haluat poistaa kaikki välilyönnit merkkijonosta ja korvata jokaisen peräkkäisen välilyöntiryhmän tietyllä merkillä, sinun on tehtävä näin:
Käytä ensin tätä regexiä leikataaksesi johtavat ja perässä olevat välilyönnit:
=RegExpReplace(A8, "^[\s]+").
Toimita sitten edellä mainittu toiminto teksti toisen RegExpReplace-argumentti, joka korvaa yhden tai useamman peräkkäisen välilyönnin määrittelemälläsi merkillä, esim. väliviivalla:
Kuvio : \s+
Korvaava : -
Jos oletetaan, että lähdejono on A8, kaava on seuraavanlainen:
=RegExpReplace(RegExpReplace(A8, "^[\s]+")".
Voit myös syöttää kuviot ja korvaukset erillisiin soluihin, kuten kuvassa näkyy:
Regex tyhjien rivien poistamiseksi
Seuraavassa on kysymys, jota käyttäjät, joilla on useita rivejä yhdessä solussa, usein kysyvät: "Soluissani on paljon tyhjiä rivejä. Voinko päästä niistä eroon mitenkään muuten kuin käymällä jokaisen solun läpi ja poistamalla jokaisen rivin manuaalisesti?" Vastaus: Se on helppoa!
Tyhjiä rivejä, joissa ei ole yhtään merkkiä nykyisen rivin alusta ^ seuraavalle riville \n, täsmää regexillä:
Kuvio : ^\n
Jos visuaalisesti tyhjät rivit sisältävät välilyöntejä tai välilehtiä, käytä tätä säännöllistä lauseketta:
Kuvio : ^[\t ]*\n
Korvaa vain regex tyhjällä merkkijonolla tämän kaavan avulla, ja kaikki tyhjät rivit häviävät kerralla!
=RegExpReplace(A5, $A$2, "")
Välilyöntien poistaminen RegEx-työkaluilla
Edellä esitetyt esimerkit ovat osoittaneet vain pienen osan regexien tarjoamista hienoista mahdollisuuksista. Valitettavasti kaikki klassisten säännöllisten lausekkeiden ominaisuudet eivät ole käytettävissä VBA:ssa.
Onneksi Ultimate Suite -ohjelmistoon sisältyvät RegEx-työkalut eivät sisällä näitä rajoituksia, koska niitä käsitellään Microsoftin .NET RegEx-moottorilla. Näin voit rakentaa kehittyneempiä kuvioita, joita VBA RegExp ei tue. Alla on esimerkki tällaisesta säännöllisestä lausekkeesta.
Regex poistaa välilyönnin numeroiden väliltä
Oletetaan, että aakkosnumeerisessa merkkijonossa halutaan poistaa välilyönnit vain numeroiden väliltä, jolloin merkkijonosta "A 1 2 B" tulee "A 12 B".
Jos haluat löytää kahden numeron välissä olevan välilyönnin, voit käyttää seuraavia kiertoteitä:
Kuvio : (?<=\d)\s+(?=\d)
Voit luoda kaavan edellä mainittujen regexien perusteella seuraavassa on kaksi helppoa vaihetta:
- On Ablebits Data välilehdellä, kohdassa Teksti ryhmää, klikkaa Regex-työkalut .
- On Regex-työkalut ruudussa, valitse lähdetiedot, syötä regex, valitse valintaruutu Poista ja paina Poista .
Jos haluat saada tulokset kaavoina, ei arvoina, muista laittaa rasti kenttään Lisää kaavana valintaruutu.
Kohta näet AblebitsRegexRemove toiminto lisätään uuteen sarakkeeseen alkuperäisten tietojen oikealle puolelle.
Vaihtoehtoisesti voit syöttää regexin johonkin soluun, vaikkapa A5, ja lisätä kaavan suoraan soluun käyttämällä komentoa Lisää toiminto valintaikkuna, jossa AblebitsRegexRemove on luokiteltu seuraavaan luokkaan AblebitsUDFs .
Koska tämä funktio on suunniteltu erityisesti merkkijonojen poistamiseen, se tarvitsee vain kaksi argumenttia - syöttömerkkijonon ja regexin:
=AblebitsRegexRemove(A5, $A$2)
Näin välilyönnit poistetaan Excelissä säännöllisillä lausekkeilla. Kiitos lukemisesta ja odotan innolla, että tapaamme blogissamme ensi viikolla!
Saatavilla olevat lataukset
Poista välilyönnit regexillä - esimerkkejä (.xlsm-tiedosto)
Ultimate Suite - kokeiluversio (.exe-tiedosto)