Hvordan bruke RegEx i Microsoft Word - Excel-tips

Lissa spør:

Er det en måte å endre et tall (alltid et tilfeldig tall) etter ordet rev? Eksempel: rev 23, bjørn 1, rev 398, frosk 12, rev 15. Jeg vil endre tallet til samme farge på ordet rev.

Vi kan finne og erstatte etter format i Microsoft Word. Dette er en flott funksjon for raskt å finne den formaterte teksten, og til og med erstatte hele tekstformatet i dokumentet.

Velg Advanced Find på båndet.

Finn og erstatt dialog

Skriv inn teksten du vil finne, og klikk deretter Mer for å se avanserte alternativer, og klikk deretter Format-knappen.

Avanserte finnealternativer

Velg Font-alternativet i innstillingene, så kan du sette opp tekstfargen du vil finne i dokumentet. Klikk OK for å lukke dialogboksen Finn font.

Velg tekstfarge i dialogboksen Finn skrift.

Klikk Finn neste, så ser du den første forekomsten av at teksten blir søkt i en bestemt farge blir valgt.

Finn Neste for å finne første forekomst.

Vi kan også gjøre mer kompliserte søk ved å bruke jokertegn. Imidlertid lar Words opprinnelige søkemodul oss ikke søke hvordan Lissa spurte.

Det er der vi kan kalle RegEx inn i spillet!

VBSCript Regular Expressions Library

VBA leveres ikke med støtte for vanlig uttrykk. Imidlertid inneholder Microsoft VBScript-biblioteket kraftige funksjoner for regulært uttrykk. Dette biblioteket er en del av Internet Explorer 5.5 og nyere, så det er tilgjengelig på alle datamaskiner som kjører Windows XP, Vista, 7, 8, 8.1 eller 10.

Mac-brukere

Siden Internet Explorer ikke er et Mac-program, eksisterer dette biblioteket ikke i Mac. Derfor fungerer ikke VBA-eksempler nedenfor i Mac.

For å bruke dette biblioteket i VBA, bytt til VBE, velg Prosjekt og referanser i VBE-menyen, og rull deretter nedover listen for å finne elementet "Microsoft VBScript Regular Expressions 5.5", og kryss av for å inkludere det i applikasjonen.

VBScript Regular Expressions Library

Sett inn en ny modul, og kopier og lim inn følgende kode i denne modulen.

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

Denne prosedyren tar eksempelteksten, finner produktkodene etter det gitte mønsteret - som begynner med "rev", ett mellomrom og et tall, og skriver ut de samsvarende kodene i Umiddelbart-vinduet (trykk Ctrl + G i VBE hvis det ikke er synlig allerede).

Matchede produktkoder skrevet ut i vinduet Umiddelbart.

d+ tegnklasse i mønsteret definerer ett eller flere numeriske tegn, og mønster er i utgangspunktet "fox" prefiks etterfulgt av et mellomrom etterfulgt av tall.

Mer informasjon

Besøk Regular Expression Language - Quick Reference for mer informasjon om karakterflukt, karakterklasser og anker.

Kopier og lim inn følgende kode for å se RegEx i aksjon for å fjerne mellomrommene fra produktkoder.

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

Denne prosedyren erstatter eksempeltekstinnholdet ved å fjerne mellomrommene fra produktkodene som samsvarer med det gitte mønsteret, og skriver ut resultatteksten i vinduet Umiddelbar.

Erstatt tekst skrevet ut i vinduet Umiddelbart.

Vær oppmerksom på at mønsteret er litt annerledes enn den første koden. Begrepene i dette mønsteret er omgitt av parenteser, og tilsvarende termer brukes i Erstatt-metoden som $ 1 og $ 2 i rekkefølge. Denne prosedyren går ganske enkelt sammen med de to begrepene uten mellomrom.

Tilbake til spørsmålet

La oss gå tilbake til eksemplet på teksten vi brukte i begynnelsen av denne artikkelen.

Eksempeltekst

Vi må finne "rev" etterfulgt av numeriske tegn, og endre kampen ved å bruke fargen på "rev" -delen i den samsvarende teksten.

Selv om RegEx samsvarer veldig bra med det gitte mønsteret, kan det ikke erstatte fargen på teksten i Word-dokumentet. Så vi vil kombinere RegEx og Word VBA-metoder i følgende prosedyre.

Her er trinnene:

  1. Finn kampene med RegEx.
  2. Søk i hver samsvarende tekst ved hjelp av Word Find-metoden.
  3. Finn fargen på det første ordet i det funnet området.
  4. Endre fargen på det funnet området med fargen i forrige trinn.

Bytt til VBE, og sett inn en ny modul. Forsikre deg om at VBScript Regular Expressions-biblioteket er lagt til i prosjektet, og kopier og lim inn følgende kode i denne nye modulen.

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 

Kjør koden, og her er resultatet.

Resultat

Last ned Word-fil

Slik laster du ned Word-filen: hvordan bruker du regex-i-microsoft-word.docm

RegEx i Excel?

Regex mangler helt i Excel. Imidlertid kan vi fortsatt bruke VBScript Regular Expressions i Excel VBA.

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

Interessante artikler...