Hoe Reguliere Expressies (Regex) te gebruiken in Microsoft Excel zowel in-cel en lussen
Hoe kan ik reguliere uitdrukkingen gebruiken in Excel en voordeel halen uit Excel's krachtige rasterachtige opzet voor gegevensmanipulatie?
- In-cel functie om een gematcht patroon of vervangen waarde in een string te retourneren.
- Sub om door een kolom met gegevens te lopen en overeenkomsten met aangrenzende cellen te extraheren.
- Welke opzet is nodig?
- Wat zijn Excel's speciale tekens voor Reguliere uitdrukkingen?
Ik begrijp dat Regex niet ideaal is voor veel situaties (To use or not to use regular expressions?) aangezien excel Left
, Mid
, Right
, Instr
type commando's kan gebruiken voor soortgelijke manipulaties.
548
3
Reguliere uitdrukkingen worden gebruikt voor Pattern Matching.
Volg deze stappen om ze in Excel te gebruiken:
Stap 1: Voeg VBA referentie toe aan "Microsoft VBScript Reguliere Expressies 5.5"
Stap 2: Definieer uw patroon
Basis definities:
-
Bereik.a-z
komt overeen met kleine letters van a tot z0-5
komt overeen met een cijfer van 0 tot 5[]
Komt overeen met precies één van de objecten binnen deze haakjes.[a]
komt overeen met de letter a[abc]
komt overeen met een enkele letter die a, b of c kan zijn[a-z]
komt overeen met elke kleine letter van het alfabet.()
Groepeert verschillende overeenkomsten voor teruggave doeleinden. Zie onderstaande voorbeelden.{}
Vermenigvuldiger voor herhaalde kopieën van het patroon dat ervoor gedefinieerd is.[a]{2}
komt overeen met twee opeenvolgende kleine letters a:aa
[a]{1,3}
komt overeen met ten minste één en maximaal drie kleine lettersa
,aa
,aaa
+
Komt overeen met ten minste één, of meer, van het daarvoor gedefinieerde patroon.a+
komt overeen met opeenvolgende a'sa
,aa
,aaa
, enzovoort?
Kom overeen met nul of één van het patroon ervoor.[a-z]?
komt overeen met een lege tekenreeks of een enkele kleine letter.*
Komt overeen met nul of meer van het patroon dat ervoor gedefinieerd is.[a-z]*
komt overeen met een lege tekenreeks of een tekenreeks met kleine letters..
Komt overeen met elk teken behalve de nieuwe regel `.a.
Zoekt een tekenreeks van twee tekens beginnend met a en eindigend met iets behalven
.|
OR operatora|b
betekent dat òfa
òfb
gematched kan worden.rood|wit|oranje
komt overeen met precies een van de kleuren.^
NIET operator[^0-9]
teken kan geen getal bevatten[^aA]
teken kan geen kleine lettera
of hoofdletterA
zijn`` Ontsnapt speciaal teken dat volgt (overschrijft bovenstaand gedrag)
.`, ```, `(`),
?, ``$
, `^
Anchoring Patterns:
^
Overeenstemming moet aan het begin van een string voorkomen^a
Eerste teken moet kleine lettera
zijn^[0-9]
Eerste teken moet een cijfer zijn.$
De overeenkomst moet aan het einde van de tekenreeks voorkomena$
Laatste teken moet een kleine lettera
zijnVoorrangstabel:
Predefined Character Abbreviations:
Exemplaar 1: Uitvoeren als macro
De volgende voorbeeld macro kijkt naar de waarde in cel
A1
om te zien of de eerste 1 of 2 karakters cijfers zijn. Zo ja, dan worden ze verwijderd en wordt de rest van de string weergegeven. Zo niet, dan verschijnt er een kader met de mededeling dat er geen overeenkomst is gevonden. CelA1
waarde van12abc
zalabc
opleveren, waarde van1abc
zalabc
opleveren, waarde vanabc123
zal "Not Matched" opleveren omdat de cijfers niet aan het begin van de tekenreeks stonden.Voorbeeld 2: Uitvoeren als een in-cell functie
Dit voorbeeld is hetzelfde als voorbeeld 1 maar is ingesteld om als een in-cell functie te werken. Om het te gebruiken, wijzigt u de code als volgt:
Plaats uw tekenreeks ("12abc") in cel
A1
. Voer deze formule=simpleCellRegex(A1)
in celB1
in en het resultaat zal zijn "abc".Exemplaar 3: Loop Through Range
Dit voorbeeld is hetzelfde als voorbeeld 1 maar maakt een lus door een bereik van cellen.
Voorbeeld 4: Het uit elkaar halen van verschillende patronen
Dit voorbeeld loopt door een bereik (
A1
,A2
&A3
) en zoekt naar een tekenreeks die begint met drie cijfers, gevolgd door een enkel alfa teken en dan 4 numerieke cijfers. De uitvoer splitst de patroon overeenkomsten op in aangrenzende cellen door gebruik te maken van de()
.$1
vertegenwoordigt het eerste patroon dat overeenkomt binnen de eerste reeks van()
.Resultaten:
Aanvullende patroonvoorbeelden
Om reguliere expressies direct in Excel formules te gebruiken kan de volgende UDF (user defined function) uitkomst bieden. Deze stelt de reguliere expressie-functionaliteit min of meer direct beschikbaar als een Excel-functie.
Hoe het werkt
Het neemt 2-3 parameters.
$0
,$1
,$2
, enzovoort bevatten.$0
is de volledige match,$1
en hoger komen overeen met de respectievelijke match groepen in de reguliere expressie. Standaard wordt$0
gebruikt.Enkele voorbeelden
Een e-mail adres uitpakken:
Resulteert in:
some@email.com
Het extraheren van verschillende substrings:
Resulteert in: E-Mail: some@email.com, Naam: Peter Gordon`
Om een gecombineerde string in een enkele cel uit elkaar te halen in zijn componenten in meerdere cellen:
Resulteert in:
Peter Gordon
some@email.com
...Hoe te gebruiken
Om deze UDF te gebruiken doe je het volgende (ruwweg gebaseerd op deze Microsoft pagina. Ze hebben wat goede aanvullende info daar!):
ALT+F11
om de Microsoft Visual Basic for Applications Editor te openen.Regex
en de functieregex
veroorzaakt #NAME! fouten).Hier is mijn poging: