Uitleg

Reguliere expressies

Een reguliere expressie is een compact tekstpatroon dat de vorm van een tekst beschrijft, zoals een factuurnummer of IBAN, zodat Excel die kan toetsen, eruit halen of vervangen.

Laatst bijgewerkt: 23 oktober 2026

Legt uit: reguliere expressie

Wat het is: Een reguliere expressie is een tekstpatroon in een compacte notatie. ^INV-[0-9]{6}$ staat voor "INV-, precies zes cijfers, verder niets".

Waarom het ertoe doet: Referentienummers volgen schema's, en banktekst en exports verstoppen codes in langere teksten. Een jokerteken kan niet zeggen "precies zes cijfers" of "INV of CN"; een reguliere expressie wel. In Microsoft 365 gebruik je die om factuurnummers en IBAN's te valideren, sleutels uit bankomschrijvingen te halen en op een patroon op te zoeken.

Wat een reguliere expressie is

Een reguliere expressie (regex) is een tekstpatroon in een compacte notatie dat de vorm van een tekst beschrijft. Het patroon ^INV-[0-9]{6}$ zegt: de tekst begint met INV-, daarna volgen precies zes cijfers en daarna komt niets meer. Een jokerteken kan alleen "willekeurige tekens" zeggen; een reguliere expressie kan zeggen hoeveel, van welke soort en welke alternatieven zijn toegestaan.

Als auditor kom je reguliere expressies tegen waar een code een vast schema moet volgen of in vrije tekst staat:

  • referentieschema's: factuurnummers, Nederlandse IBAN's, btw-nummers (NL, 9 cijfers, B, 2 cijfers) en postcodes
  • bankafschriftregels, waar de klant het factuurnummer ergens in de omschrijving typt
  • exports die meerdere velden in een cel stoppen, zoals VRK|25-0388|D1002|21%

Excel leest de PCRE2-variant van reguliere expressies, alleen in Microsoft 365. Drie regels bepalen de meeste uitkomsten:

  • het patroon mag overal in de tekst passen; alleen ^ en $ leggen het vast aan het begin en het einde
  • de vergelijking is hoofdlettergevoelig tenzij je anders aangeeft
  • in een tekst in Excel blijft een backslash een enkele \, en een dubbel aanhalingsteken schrijf je als ""

De tekens die ertoe doen in financiële data

Een patroon bestaat uit letterlijke tekens, die zichzelf voorstellen, en tekens met een speciale betekenis. De tabel toont wat je nodig hebt voor referentienummers en banktekst. Een tekenklasse als [A-Z] of [0-9] past op een teken uit de reeks; \d is een andere schrijfwijze voor een cijfer.

Een teken als {6} of * geldt voor het onderdeel direct ervoor. In [0-9]{6} telt {6} de cijfers van de klasse; in (INV|CN) maken de haakjes van INV|CN een geheel.

TekenBetekenisVoorbeeldpatroonPast op
^Begin van de tekst^INVINV-250412, maar niet XINV-250412
$Einde van de tekst412$INV-250412, maar niet INV-4125
\dEen cijfer, hetzelfde als [0-9]25-\d\d25-04 binnen 25-0412, maar niet 25-AB
[A-Z]Een teken uit de reeks of het bereik[CD]2001C2001 en D2001, maar niet E2001
[^A-Z]Niet: elk teken dat niet in de set staat (de ^ moet het eerste teken binnen de haken zijn)[^A-Za-z0-9]De spatie, punt en het streepje in NL91 ABNA.0417-1643, zodat REGEXREPLACE elk scheidingsteken in één keer weghaalt
{n}Precies n keer het onderdeel ervoor[0-9]{6}250412, maar niet 25041 (vijf cijfers)
{n,m}Minstens n en hoogstens m keer^INV-[0-9]{4,6}$INV-2504 en INV-250412, maar niet INV-250 of INV-2504123
.Een willekeurig teken25.0425-04, 25X04 en ook 25.04
+Een of meer keer^INV-[0-9]+$INV-2 en INV-250412, maar niet INV-
?Het onderdeel ervoor is optioneel (nul of een keer)^[1-9][0-9]{3} ?[A-Z]{2}$Een postcode met of zonder spatie: 1011 AB en 1011AB
|Of: de linker of de rechter kantVRK|MEMElke tekst met VRK of MEM
( )Groepeert onderdelen; REGEXEXTRACT en REGEXREPLACE kunnen de groep oppakken^(INV|CN)-[0-9]{6}$INV-250412 en CN-250412
\.Een echte punt (de backslash haalt de speciale betekenis weg)^[0-9]+\.[0-9]{2}$1250.00, maar niet 1250,00 of 125000
(?i)Aan het begin van een patroon: hoofdletters en kleine letters negeren(?i)^inv-[0-9]{6}$INV-250412, inv-250412 en Inv-250412

Jokertekens versus reguliere expressies

Een jokertekenpatroon en een reguliere expressie lijken op elkaar maar werken anders. Een patroon met jokertekens wordt vergeleken met de hele tekst, dus INV* betekent "begint met INV". Een reguliere expressie wordt overal in de tekst gezocht, dus INV betekent al "bevat INV" en je voegt ^ en $ toe als de hele tekst moet passen.

De tabel laat zien wat elk van beide kan zeggen. De drie rijen van "Precies zes cijfers" tot "Een optionele spatie" zijn voor jokertekens onbereikbaar.

Je wiltJokertekenReguliere expressie
Een willekeurige reeks tekens*.*
Precies een teken?.
Bevat INV*INV*INV
Begint met INVINV*^INV
De hele tekst moet passenAltijd het gevalVoeg ^ en $ toe
Precies zes cijfersKan niet[0-9]{6}
INV of CNKan niet(INV|CN)
Een optionele spatieKan niet[ ]?
Hoofdletters en kleine lettersGenegeerdMaakt uit; (?i) negeert het
Een echt sterretje~*\*

Waar reguliere expressies werken in Excel

Let op: Alles op deze pagina werkt alleen in Microsoft 365. In Excel 2021 of 2024 geven X.ZOEKEN en X.VERGELIJKEN #WAARDE! bij overeenkomstmodus 3, en de drie REGEX-functies bestaan er niet.

Vijf functies lezen een reguliere expressie. De criteria van SOMMEN.ALS, AANTALLEN.ALS en de andere voorwaardelijke functies doen dat niet: die lezen alleen jokertekens. Oudere Excel-versies hebben Power Query of VBA nodig voor patronen.

Functie of hulpmiddelLeest een patroon?Hoe
REGEXTESTJaHet tweede argument; WAAR als het patroon ergens in de tekst voorkomt.
REGEXEXTRACTJaHet tweede argument; geeft de eerste treffer, alle treffers of de groepen, altijd als tekst.
REGEXREPLACEJaHet tweede argument; vervangt de treffers, en $1 en $2 voegen groepen in.
X.ZOEKEN, X.VERGELIJKENJa, met overeenkomstmodus 3De zoekwaarde is het patroon; hoofdlettergevoelig tenzij het met (?i) begint.
SOMMEN.ALS, AANTALLEN.ALSNeeAlleen jokertekens. Tel in plaats daarvan met SOMPRODUCT en REGEXTEST.
FILTERNiet directGebruik REGEXTEST als argument opnemen.
Zoeken en vervangen (Ctrl+F, Ctrl+H)NeeAlleen jokertekens. Gebruik REGEXREPLACE in een hulpkolom.

Toetsen: volgt de tekst het schema?

=REGEXTEST(B2, "^INV-[0-9]{6}$")
=REGEXTEST(B2; "^INV-[0-9]{6}$")

WAAR als B2 uit INV- en precies zes cijfers bestaat, en uit niets anders.

Halen: haal een nummer uit tekst.

=WAARDE(REGEXEXTRACT(B2, "[0-9]{6}"))
=WAARDE(REGEXEXTRACT(B2; "[0-9]{6}"))

De eerste reeks van zes cijfers in B2. REGEXEXTRACT geeft tekst, dus WAARDE maakt er een getal van.

Vervangen: herschik met groepen.

=REGEXREPLACE(B2, "^INV-([0-9]{2})([0-9]{4})$", "$1-$2")
=REGEXREPLACE(B2; "^INV-([0-9]{2})([0-9]{4})$"; "$1-$2")

INV-250412 wordt 25-0412: groep 1 bevat de eerste twee cijfers, groep 2 de laatste vier.

Opzoeken: de zoekwaarde is een patroon.

=X.ZOEKEN("^INV-10(02|04)$", A2:A7, B2:B7, "Niet gevonden", 3)
=X.ZOEKEN("^INV-10(02|04)$"; A2:A7; B2:B7; "Niet gevonden"; 3)

Overeenkomstmodus 3 is in X.ZOEKEN het vijfde argument en in X.VERGELIJKEN het derde. De eerste cel van A2:A7 die INV-1002 of INV-1004 is, wint.

Een patroon stap voor stap lezen

Lees een patroon van links naar rechts en knip het bij elk teken in stukken. Een Nederlandse IBAN is NL, 2 cijfers, 4 letters en 10 cijfers, samen 18 tekens. Als patroon: ^NL[0-9]{2}[A-Z]{4}[0-9]{10}$.

Het patroon toetst de vorm, niet de inhoud: het controleert de controlecijfers niet, dus een verkeerd getypt cijfer komt er nog steeds door. Een nl91... in kleine letters valt af door de hoofdlettergevoeligheid, en een IBAN in groepen (NL91 ABNA 0417 1643 00) of met punten en streepjes valt af door de scheidingstekens. Maak hem eerst schoon met een ontkende klasse: [^A-Za-z0-9] is "elk teken dat geen letter of cijfer is", dus REGEXREPLACE met dat patroon haalt elk scheidingsteken in één keer weg, welke een cliënt ook gebruikte, en HOOFDLETTERS regelt de hoofdletters.

StukLeest alsIn NL91ABNA0417164300
^De tekst begint hierNiets voor de N
NLDe twee letters NL, zoals getyptNL
[0-9]{2}Precies twee cijfers91, de controlecijfers
[A-Z]{4}Precies vier hoofdlettersABNA, de bankcode
[0-9]{10}Precies tien cijfers0417164300, het rekeningnummer
$De tekst eindigt hierNiets na de laatste 0
=REGEXTEST(B2, "^NL[0-9]{2}[A-Z]{4}[0-9]{10}$")
=REGEXTEST(B2; "^NL[0-9]{2}[A-Z]{4}[0-9]{10}$")

WAAR voor NL91ABNA0417164300: 2 + 2 + 4 + 10 = 18 tekens in de juiste volgorde.

=REGEXTEST(HOOFDLETTERS(REGEXREPLACE(B2, "[^A-Za-z0-9]", "")), "^NL[0-9]{2}[A-Z]{4}[0-9]{10}$")
=REGEXTEST(HOOFDLETTERS(REGEXREPLACE(B2; "[^A-Za-z0-9]"; "")); "^NL[0-9]{2}[A-Z]{4}[0-9]{10}$")

Ook WAAR voor nl91 abna.0417-1643 00: de ontkende klasse haalt de spaties, punt en het streepje weg, HOOFDLETTERS zet de letters goed en pas dan wordt de vorm getoetst.

Uitgewerkte voorbeelden

Voorbeeld1 van 3Beginner

Controleren of factuurnummers het INV-schema volgen

In het verkoopboek van Veldhuis Installatie BV hebben de facturen een nummer van INV- gevolgd door zes cijfers. Voordat je de volledigheid van de nummering test, wil je elk nummer in de export markeren dat dat schema niet volgt.

Kolom C toont per factuurnummer WAAR of ONWAAR.

Fragment van het werkblad: in C2:C8 staat de formule
RijABCD
1Factuurnr.KlantGeldig?
2INV-250412Dekker Installatie BVWAAR=REGEXTEST(A2, "^INV-[0-9]{6}$")=REGEXTEST(A2; "^INV-[0-9]{6}$")
3INV-25412Van Rijn Vastgoed BVONWAAR=REGEXTEST(A3, "^INV-[0-9]{6}$")=REGEXTEST(A3; "^INV-[0-9]{6}$")
4inv-250413Hofman AannemersONWAAR=REGEXTEST(A4, "^INV-[0-9]{6}$")=REGEXTEST(A4; "^INV-[0-9]{6}$")
5INV-2504140Mulder HorecaONWAAR=REGEXTEST(A5, "^INV-[0-9]{6}$")=REGEXTEST(A5; "^INV-[0-9]{6}$")
6INV 250415Ouwerkerk LogistiekONWAAR=REGEXTEST(A6, "^INV-[0-9]{6}$")=REGEXTEST(A6; "^INV-[0-9]{6}$")
7INV-250416Kuipers Techniek BVWAAR=REGEXTEST(A7, "^INV-[0-9]{6}$")=REGEXTEST(A7; "^INV-[0-9]{6}$")
8INV-25O417Smeets GroothandelONWAAR=REGEXTEST(A8, "^INV-[0-9]{6}$")=REGEXTEST(A8; "^INV-[0-9]{6}$")
9
Formulecel (C2:C8)

Formule in C2

=REGEXTEST(A2, "^INV-[0-9]{6}$")
=REGEXTEST(A2; "^INV-[0-9]{6}$")

Resultaat: WAAR

Stap voor stap
  1. Het patroon is ^INV-[0-9]{6}$. ^ legt het begin vast, INV- moet precies zo in hoofdletters staan, [0-9]{6} zijn precies zes cijfers en $ legt het einde vast. REGEXTEST zoekt het patroon ergens in de tekst, dus de twee ankers maken er een controle op de hele cel van.
  2. A2 bevat INV-250412: de tekst begint met INV-, daarna komen de zes cijfers 2, 5, 0, 4, 1 en 2, en daarna eindigt de tekst. WAAR.
  3. A3 bevat INV-25412: slechts vijf cijfers, en het patroon vraagt er zes voor het einde. ONWAAR. A4 bevat inv-250413: het patroon is standaard hoofdlettergevoelig, dus inv- past niet op INV-. ONWAAR.
  4. A5 bevat INV-2504140: na zes cijfers (250414) volgt een zevende cijfer, terwijl $ het einde van de tekst vraagt. ONWAAR. A6 bevat INV 250415: een spatie waar het patroon een koppelteken vraagt. ONWAAR.
  5. A7 bevat INV-250416: WAAR. A8 bevat INV-25O417, met de hoofdletter O in plaats van een nul op de derde plaats na het koppelteken. Een letter zit niet in [0-9]. ONWAAR.
  6. C2 toont WAAR; naar beneden gekopieerd tonen C3 tot en met C8 ONWAAR, ONWAAR, ONWAAR, ONWAAR, WAAR en ONWAAR. Twee van de zeven nummers volgen het schema, dus vijf komen op je lijst met uitzonderingen.

Let op: Laat je de ankers weg, zoals in INV-[0-9]{6}, dan slaagt A5 (INV-2504140): de zes cijfers staan binnen de zeven. Toets de hele cel met ^ en $.

Meer over dit voorbeeld: waarom het werkt, nog 1 valkuil, 2 varianten

Waarom het werkt

REGEXTEST vraagt of het patroon in de tekst voorkomt, niet of de tekst gelijk is aan het patroon. ^ en $ sluiten beide kanten af, en {6} legt het aantal cijfers vast, wat een jokerteken niet kan.

De controle zegt of het nummer de juiste vorm heeft. Ze zegt niet dat de factuur bestaat.

Meer om op te letten

  • Tekens die op elkaar lijken laten de toets met opzet mislukken: een letter O voor een nul, een gedachtestreepje voor een koppelteken. Het resultaat is ONWAAR en de cel ziet er goed uit, dus controleer de gemarkeerde nummers teken voor teken.

Varianten

=REGEXTEST(A2, "^INV-[0-9]{6}$", 1)
=REGEXTEST(A2; "^INV-[0-9]{6}$"; 1)

Het derde argument 1 negeert hoofdletters. A4 (inv-250413) slaagt nu, dus het aantal nummers dat het schema volgt gaat van 2 naar 3. (?i) aan het begin van het patroon doet hetzelfde.

=SOMPRODUCT(--REGEXTEST(A2:A8, "^INV-[0-9]{6}$"))
=SOMPRODUCT(--REGEXTEST(A2:A8; "^INV-[0-9]{6}$"))

Telt in een cel de nummers die het schema volgen: het resultaat is 2 (A2 en A7).

Voorbeeld2 van 3Halfgevorderd

De klant achter een bankafschriftregel vinden

Een klant heeft Veldhuis Installatie BV betaald en het factuurnummer ergens in de bankomschrijving getypt. Je wilt weten bij welke klant de regel hoort, met de debiteurenlijst van de cliënt.

E1 bevat de bankomschrijving. Het factuurnummer kan overal in staan, dus een vaste positie (LINKS, DEEL) werkt niet.

Fragment van het werkblad: in E2 staat de formule
RijABCDEF
1Factuurnr.KlantBankomschrijvingSEPA OVERBOEKING HOFMAN AANNEMERS BETALING FACTUUR INV-250418 DD 14-10-2025
2INV-250412Dekker Installatie BVKlantHofman Aannemers=X.ZOEKEN(REGEXEXTRACT(E1, "INV-[0-9]{6}"), A2:A7, B2:B7, "Niet gevonden")=X.ZOEKEN(REGEXEXTRACT(E1; "INV-[0-9]{6}"); A2:A7; B2:B7; "Niet gevonden")
3INV-250415Van Rijn Vastgoed BV
4INV-250418Hofman Aannemers
5INV-250421Ouwerkerk Logistiek
6INV-250427Mulder Horeca
7INV-250433Kuipers Techniek BV
8
Formulecel (E2)Invoer

Formule in E2

=X.ZOEKEN(REGEXEXTRACT(E1, "INV-[0-9]{6}"), A2:A7, B2:B7, "Niet gevonden")
=X.ZOEKEN(REGEXEXTRACT(E1; "INV-[0-9]{6}"); A2:A7; B2:B7; "Niet gevonden")

Resultaat: Hofman Aannemers

Stap voor stap
  1. Excel rekent eerst de binnenste functie uit: REGEXEXTRACT op E1 met het patroon INV-[0-9]{6}, dus INV- en zes cijfers. Het vierde argument van X.ZOEKEN doet nog niet mee. Er zijn geen ankers, want het nummer staat in een langere tekst en REGEXEXTRACT moet het vinden, niet de hele tekst toetsen.
  2. De woorden SEPA, OVERBOEKING, HOFMAN, AANNEMERS, BETALING en FACTUUR bevatten geen INV-. In FACTUUR INV-250418 past het patroon: INV-, daarna zijn 2, 5, 0, 4, 1, 8 zes cijfers. Het volgende teken is een spatie, dus de treffer eindigt daar. De standaard return_mode 0 geeft de eerste treffer als tekst: INV-250418. De datum 14-10-2025 bevat geen INV- en wordt niet bereikt.
  3. X.ZOEKEN zoekt nu de tekst INV-250418 in A2:A7 met de standaard exacte overeenkomst. A2 (INV-250412): nee. A3 (INV-250415): nee. A4 (INV-250418): ja, het derde item.
  4. X.ZOEKEN geeft het derde item van B2:B7, dat is B4: Hofman Aannemers.
  5. Typ BETALING INV-250433 KUIPERS TECHNIEK in E1 en REGEXEXTRACT geeft INV-250433, het zesde item, dus het resultaat is Kuipers Techniek BV. De formule volgt het nummer waar het ook in de tekst staat.

Let op: Een bankregel zonder factuurnummer, zoals TERUGBETALING BTW 3E KWARTAAL, laat REGEXEXTRACT #N/B geven. De fout van REGEXEXTRACT is wat je ziet: de melding Niet gevonden verschijnt niet, want die geldt alleen voor een sleutel die niet in de lijst staat. Zet de formule in ALS.NB (eerste variant).

Meer over dit voorbeeld: waarom het werkt, nog 1 valkuil, 2 varianten

Waarom het werkt

REGEXEXTRACT maakt van vrije tekst een schone sleutel, en X.ZOEKEN doet met die sleutel wat het altijd doet: exact opzoeken. De twee taken blijven gescheiden, dus je kunt de gehaalde sleutel apart controleren.

De tekst voor en na het nummer maakt niet uit. Alleen de vorm INV- plus zes cijfers wordt gezocht.

Meer om op te letten

  • Een langere reeks cijfers wordt na zes cijfers afgekapt. FACT INV-2504181 HOFMAN geeft INV-250418 en dus de verkeerde klant. Sluit het patroon af met (?![0-9]), wat betekent "niet gevolgd door nog een cijfer": INV-[0-9]{6}(?![0-9]) vindt in die tekst dan geen treffer en je ziet de #N/B.

Varianten

=ALS.NB(X.ZOEKEN(REGEXEXTRACT(E1, "INV-[0-9]{6}"), A2:A7, B2:B7), "Geen factuurnummer gevonden")
=ALS.NB(X.ZOEKEN(REGEXEXTRACT(E1; "INV-[0-9]{6}"); A2:A7; B2:B7); "Geen factuurnummer gevonden")

ALS.NB vangt de #N/B van REGEXEXTRACT en van X.ZOEKEN op. Met de bankregel hierboven is het resultaat nog steeds Hofman Aannemers; met TERUGBETALING BTW 3E KWARTAAL verschijnt de melding.

=WAARDE(REGEXEXTRACT(E1, "[0-9]{6}"))
=WAARDE(REGEXEXTRACT(E1; "[0-9]{6}"))

Alleen het nummer, als echt getal: 250418. REGEXEXTRACT geeft tekst, dus WAARDE is nodig voordat je ermee rekent. De eerste reeks van zes cijfers is 250418; de cijfers van de datum staan in groepen van 2 en 4.

Voorbeeld3 van 3Gevorderd

Het bedrag van de laatste verkoopboeking van een klant vinden

Een export van Veldhuis Installatie BV stopt het dagboek, het boekstuknummer, de relatie en het btw-percentage in een sleutel per regel, gescheiden door verticale streepjes: VRK|25-0407|D1002|21%.

Je wilt het bedrag van de laatste verkoopboeking (dagboek VRK) van de klant in E1. Een memoriaalboeking (MEM) voor dezelfde klant staat later in de lijst en mag niet meetellen.

Fragment van het werkblad: in E2 staat de formule
RijABCDEF
1SleutelBedragKlantD1002
2VRK|25-0388|D1002|21%€1,210.00€ 1.210,00Bedrag€2,420.00€ 2.420,00=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|", A2:A8, B2:B8, "Niet gevonden", 3, -1)=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|"; A2:A8; B2:B8; "Niet gevonden"; 3; -1)
3VRK|25-0391|D1005|21%€605.00€ 605,00
4VRK|25-0395|D1002|9%€218.00€ 218,00
5INK|25-0402|C2001|21%€363.00€ 363,00
6VRK|25-0407|D1002|21%€2,420.00€ 2.420,00
7VRK|25-0409|D1020|21%€726.00€ 726,00
8MEM|25-0414|D1002|21%€150.00€ 150,00
9
Formulecel (E2)Invoer

Formule in E2

=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|", A2:A8, B2:B8, "Niet gevonden", 3, -1)
=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|"; A2:A8; B2:B8; "Niet gevonden"; 3; -1)

Resultaat: €2,420.00€ 2.420,00

Stap voor stap
  1. E1 bevat D1002. De drie delen worden aan elkaar geplakt tot het patroon ^VRK\|[0-9]{2}-[0-9]{4}\|D1002\|. Lees het in stukken: ^VRK de sleutel begint met VRK; \| een echt verticaal streepje, want een kaal | zou "of" betekenen; [0-9]{2}-[0-9]{4} een boekstuknummer als 25-0407; D1002 de klant; \| een echt streepje erna.
  2. Het vijfde argument 3 is de overeenkomstmodus voor reguliere expressies: de zoekwaarde wordt als patroon gelezen en een cel past als het patroon erin voorkomt. Het zesde argument -1 zoekt van de laatste cel naar de eerste.
  3. X.ZOEKEN begint onderaan A2:A8. A8 (MEM|25-0414|D1002|21%): de klant past maar de sleutel begint met MEM, en ^VRK mislukt. Nee. A7 (VRK|25-0409|D1020|21%): VRK en een boekstuknummer passen, maar na het streepje vraagt het patroon D1002| en de tekst heeft D1020|. Nee.
  4. A6 (VRK|25-0407|D1002|21%): VRK, boekstuknummer 25-0407, D1002 en een streepje passen allemaal. Ja, en het zoeken stopt. A6 is het vijfde item van A2:A8, dus X.ZOEKEN geeft het vijfde item van B2:B8, dat is B6: €2,420.00€ 2.420,00.
  5. Zonder het zesde argument loopt het zoeken van boven naar beneden en stopt bij A2 (VRK|25-0388|D1002|21%): €1,210.00€ 1.210,00, de eerste boeking in plaats van de laatste. Zonder ^VRK in het patroon zou de laatste treffer de memoriaalboeking A8 zijn: €150.00€ 150,00.
  6. Verander E1 in D1005 en alleen A3 past (VRK|25-0391|D1005|21%): het resultaat is €605.00€ 605,00, welke richting je ook zoekt.

Let op: Een niet-ontsnapt streepje maakt van het patroon alternatieven. ^VRK|[0-9]{2}-[0-9]{4}|D1002| eindigt met een leeg alternatief dat op elke tekst past, dus van onderaf wordt A8 het eerst gevonden en het resultaat is €150.00€ 150,00. Schrijf altijd \| voor een echt streepje.

Meer over dit voorbeeld: waarom het werkt, nog 2 valkuilen, 2 varianten

Waarom het werkt

In overeenkomstmodus 3 moet de cel het patroon bevatten, dus het anker ^ en het afsluitende streepje bepalen welke cellen meetellen: het dagboek aan het begin en de volledige klantcode, zodat D1002 nooit past op D10025.

De zoekmodus werkt zoals altijd: -1 geeft de laatste treffer. Binair zoeken (2 of -2) heeft geen zin met een patroon, omdat de lijst niet is gesorteerd op wat het patroon beschrijft.

Meer om op te letten

  • Modus 3 is hoofdlettergevoelig. Met d1002 in E1 past niets en zie je Niet gevonden. Laat het patroon beginnen met (?i) om hoofdletters te negeren, zoals in "(?i)^VRK...".
  • In Excel 2021 of 2024 geeft deze formule #WAARDE!, want overeenkomstmodus 3 bestaat alleen in Microsoft 365. Controleer de versie van iedereen die het bestand opent.

Varianten

=X.VERGELIJKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|", A2:A8, 3, -1)
=X.VERGELIJKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|"; A2:A8; 3; -1)

De positie in plaats van het bedrag: 5, de vijfde cel van A2:A8. In X.VERGELIJKEN is de overeenkomstmodus het derde argument en de zoekmodus het vierde.

=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|", A2:A8, B2:B8, "Niet gevonden", 3)
=X.ZOEKEN("^VRK\|[0-9]{2}-[0-9]{4}\|" & E1 & "\|"; A2:A8; B2:B8; "Niet gevonden"; 3)

Zonder de zoekmodus telt de eerste treffer: €1,210.00€ 1.210,00, de boeking in A2.

Veelgemaakte fouten

Veelgemaakte fouten
SymptoomOorzaakOplossing
REGEXTEST geeft WAAR voor een te lang nummerINV-2504140 (zeven cijfers) slaagt voor de toets INV-[0-9]{6}.Het patroon wordt overal in de tekst gezocht, en zes cijfers komen voor binnen zeven. Voeg ^ aan het begin en $ aan het einde toe als de hele cel moet passen.
Factuurnummer in kleine letters wordt afgewezenHet patroon ^INV-[0-9]{6}$ geeft ONWAAR voor inv-250413.Reguliere expressies zijn standaard hoofdlettergevoelig, anders dan jokertekens. Laat het patroon beginnen met (?i), of zet het argument case_sensitivity van de REGEX-functies op 1.
Een patroon past op meer dan verwacht25.04 past ook op 25X04, en VRK|25-0388 wordt gelezen als twee alternatieven.Een . staat voor elk teken en een | betekent "of". Schrijf \. voor een echte punt en \| voor een echt verticaal streepje. Hetzelfde geldt voor (, ), [, +, *, ? en $.
Een som over gehaalde getallen geeft 0SOM over cellen die REGEXEXTRACT vult geeft 0, hoewel de cellen getallen tonen.REGEXEXTRACT geeft altijd tekst. Zet er WAARDE omheen voor een getal: WAARDE(REGEXEXTRACT(...)).
Een patroon in jokerteken-stijl past op teksten zonder INVJe schrijft INV* zoals bij een jokerteken, en REGEXTEST zegt WAAR voor BIN 12.In een reguliere expressie herhaalt * het onderdeel ervoor, dus INV* betekent IN gevolgd door nul of meer keer V. Voor "INV- en daarna iets" schrijf je INV-.*.
#WAARDE! uit X.ZOEKEN of X.VERGELIJKENEen formule met overeenkomstmodus 3 werkt bij jou en geeft #WAARDE! bij een collega.Overeenkomstmodus 3 en de REGEX-functies bestaan alleen in Microsoft 365. Excel 2021 en 2024 ondersteunen ze niet. Controleer de versie van elke gebruiker, of kies een andere constructie.

Terug naar de woordenlijst