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)

Specifieke tekst zoeken in Excel

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