Kuinka käyttää RegExiä Microsoft Wordissa - Excel-vinkkejä

Lissa kysyy:

Onko mahdollista muuttaa numeroa (aina satunnaisluku) kettu-sanan jälkeen? Esimerkki: kettu 23, karhu 1, kettu 398, sammakko 12, kettu 15. Haluan muuttaa numeron samaksi väriksi sanalla kettu.

Voimme löytää ja korvata muodon Microsoft Wordissa. Tämä on hieno ominaisuus muotoilun tekstin löytämiseksi nopeasti ja jopa koko tekstimuodon korvaamiseksi asiakirjassa.

Valitse valintanauhasta Lisähaku.

Etsi ja korvaa -valintaikkuna

Kirjoita etsittävä teksti ja napsauta Lisää-painiketta nähdäksesi lisäasetukset ja napsauta Muotoile-painiketta.

Edistyneet hakuvaihtoehdot

Valitse kirjasinvaihtoehto asetuksista ja voit määrittää tekstin värin, jonka haluat löytää asiakirjasta. Sulje Etsi fontti -valintaikkuna napsauttamalla OK.

Valitse tekstin väri Etsi fontti -valintaikkunassa.

Napsauta Etsi seuraava -vaihtoehtoa, jolloin valitset ensimmäisen haun tietyllä värillä etsittävälle tekstille.

Etsi Seuraava löytääksesi ensimmäisen esiintymisen.

Voimme myös tehdä monimutkaisempia hakuja käyttämällä yleismerkkejä. Wordin natiivihakumoduuli ei kuitenkaan anna meidän tehdä hakua, miten Lissa kysyi.

Siellä voimme kutsua RegExin peliin!

VBSCript-säännöllisten lausekkeiden kirjasto

VBA ei lähetä mitään säännöllisen lausekkeen tukea. Microsoft VBScript -kirjasto sisältää kuitenkin tehokkaat säännöllisen lausekkeen ominaisuudet. Tämä kirjasto on osa Internet Explorer 5.5: ää ja uudempia, joten se on käytettävissä kaikissa tietokoneissa, joissa on Windows XP, Vista, 7, 8, 8.1 tai 10.

Mac-käyttäjät

Koska Internet Explorer ei ole Mac-sovellus, tätä kirjastoa ei ole Macissa. Siksi alla olevat VBA-näytteet eivät toimi Macissa.

Jos haluat käyttää tätä kirjastoa VBA: ssa, vaihda VBE: hen, valitse VBE-valikosta Projekti ja viitteet, vieritä luetteloa alaspäin löytääksesi kohteen "Microsoft VBScript Regular Expressions 5.5" ja valitse se sisällyttääksesi sovellukseen.

VBScript-säännöllisten lausekkeiden kirjasto

Aseta uusi moduuli ja kopioi ja liitä seuraava koodi tähän moduuliin.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Tämä toimenpide ottaa näytetekstin, etsii tuotekoodit annetun mallin mukaan - joka alkaa "kettu", yksittäinen välilyönti ja numero, ja tulostaa vastaavat koodit Välitön-ikkunaan (paina Ctrl + G VBE: ssä, jos se ei ole jo näkyvissä).

Vastaavat tuotekoodit on painettu välitön -ikkunaan.

d+ kuvion merkkiluokka määrittelee yhden tai useamman numeerisen merkin, ja kuvio on pohjimmiltaan "ketun" etuliite, jota seuraa välilyönti ja numerot.

Lisätietoja

Vieraile säännöllisen lausekkeen kieli - pikaopas saadaksesi lisätietoja merkkien poistumisesta, merkkiluokista ja ankkurista.

Kopioi ja liitä seuraava koodi nähdäksesi RegEx-toiminnon poistaaksesi välilyönnit tuotekoodeista.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Tämä toimenpide korvaa esimerkkitekstisisällön poistamalla välit tuotekoodeista, jotka on sovitettu annettuun kuvioon, ja tulostaa tulostekstin Välitön-ikkunaan.

Korvattu teksti välitön-ikkunaan.

Huomaa, että kuvio on hieman erilainen kuin ensimmäinen koodi. Tämän kaavan termit ovat sulkeissa, ja vastaavia termejä käytetään Korvaa-menetelmässä muodossa $ 1 ja $ 2 järjestyksessä. Tämä menettely yksinkertaisesti yhdistää kaksi termiä ilman välilyöntejä.

Takaisin kysymykseen

Palataan takaisin tämän artikkelin alussa käytetyn esimerkkitekstin kohdalle.

Näyteteksti

Meidän on löydettävä "kettu", jota seuraa numeeriset merkit, ja muutettava osumaa käyttämällä vastaavan tekstin "kettu" -osan väriä.

Vaikka RegEx on erittäin sopiva annettuun malliin, se ei voi korvata Word-asiakirjan tekstin väriä. Joten yhdistämme RegEx- ja Word VBA -menetelmät seuraavassa menettelyssä.

Tässä ovat vaiheet:

  1. Etsi ottelut RegExin avulla.
  2. Hae kutakin vastaavaa tekstiä Word Find -menetelmällä.
  3. Etsi löydetyn alueen ensimmäisen sanan väri.
  4. Muuta löydetyn alueen väriä edellisen vaiheen värillä.

Vaihda VBE: hen ja aseta uusi moduuli. Varmista, että VBScript Regular Expressions -kirjasto on lisätty projektiin, ja kopioi ja liitä seuraava koodi tähän uuteen moduuliin.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Suorita koodi, ja tässä on tulos.

Tulos

Lataa Word-tiedosto

Word-tiedoston lataaminen: how-to-use-regex-in-microsoft-word.docm

RegEx Excelissä?

Regex puuttuu kokonaan Excelistä. Voimme kuitenkin edelleen käyttää VBScript Regular Expressions -sovellusta Excel VBA: ssa.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Mielenkiintoisia artikkeleita...