Specifieke tekst zoeken in Excel
8 oktober 2014 | onderwerpen: excel, vba, visual basic, reguliere expressie
Hoe kun je een specifieke tekst zoeken in Excel? In een brij van letters en cijfers? De Regulier Expressie in Visual Basic biedt uitkomst. Hier een korte uitleg met een praktijkvoorbeeld.
“Een reguliere expressie is een manier om patronen te beschrijven waarmee een computer tekst kan herkennen. Er bestaat hiervoor een formele syntaxis, die grotendeels is gestandaardiseerd.
Reguliere expressies worden bijvoorbeeld in teksteditors gebruikt om stukken tekst te doorzoeken, te manipuleren, in andere programma’s worden ze gebruikt om te controleren dat bepaalde patronen voorkomen.” (bron: Wikipedia)
Reguliere Expressie in Visual Basic
Ook de programmeertaal van Office, Visual Basic, kent de reguliere expressie. Die biedt uitkomst om specifieke teksten te zoeken in Excel. Bijvoorbeeld uit bestanden die geen eenduidige opbouw hebben. Zoals in dit voorbeeld:
Lease sept 1-AAA-00 2014
1AAA00 Lease Sept 2014
Lease september 1-AAA-00
1-AAA-00 Lease Sept. 14
Lease sept. 1AA00
De RegEx functie in Visual Basic helpt om de kentekens uit dit bestand te halen.
Met de code die in de rechterkolom is weergegeven volstaat deze functie om het kenteken uit de tekst van cel A1 te halen:
=ALS(ISLEEG(Kentekenstreep(A1));Kenteken(A1);Kentekenstreep(A1))
De functie ‘Kenteken’ zoekt naar de kentekens zónder streepjes en de functie ‘KentekenStreep’ naar de kentekens mét streepjes. Dit werkt alleen voor de nieuwste kentekens (sidecode 8), bv 6-KBB-86.
Function Kenteken(cel) Dim regEx As New VBScript_RegExp_55.RegExp Dim matches, s regEx.Pattern = "([0-9]{1})([a-z]{3})([0-9]{2})" regEx.IgnoreCase = True regEx.Global = True If regEx.Test(cel) Then Set matches = regEx.Execute(cel) For Each Match In matches s = Match.Value Next Kenteken = s End If End Function Function KentekenStreep(cel) Dim regEx As New VBScript_RegExp_55.RegExp Dim matches, s regEx.Pattern = "([0-9]{1})-([a-z]{3})-([0-9]{2})" regEx.IgnoreCase = True regEx.Global = True If regEx.Test(cel) Then Set matches = regEx.Execute(cel) For Each Match In matches s = Match.Value Next KentekenStreep = s End If End Function