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.
| Teken | Betekenis | Voorbeeldpatroon | Past op |
|---|---|---|---|
^ | Begin van de tekst | ^INV | INV-250412, maar niet XINV-250412 |
$ | Einde van de tekst | 412$ | INV-250412, maar niet INV-4125 |
\d | Een cijfer, hetzelfde als [0-9] | 25-\d\d | 25-04 binnen 25-0412, maar niet 25-AB |
[A-Z] | Een teken uit de reeks of het bereik | [CD]2001 | C2001 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 teken | 25.04 | 25-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 kant | VRK|MEM | Elke 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 wilt | Jokerteken | Reguliere expressie |
|---|---|---|
| Een willekeurige reeks tekens | * | .* |
| Precies een teken | ? | . |
| Bevat INV | *INV* | INV |
| Begint met INV | INV* | ^INV |
| De hele tekst moet passen | Altijd het geval | Voeg ^ en $ toe |
| Precies zes cijfers | Kan niet | [0-9]{6} |
| INV of CN | Kan niet | (INV|CN) |
| Een optionele spatie | Kan niet | [ ]? |
| Hoofdletters en kleine letters | Genegeerd | Maakt 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 hulpmiddel | Leest een patroon? | Hoe |
|---|---|---|
REGEXTEST | Ja | Het tweede argument; WAAR als het patroon ergens in de tekst voorkomt. |
REGEXEXTRACT | Ja | Het tweede argument; geeft de eerste treffer, alle treffers of de groepen, altijd als tekst. |
REGEXREPLACE | Ja | Het tweede argument; vervangt de treffers, en $1 en $2 voegen groepen in. |
X.ZOEKEN, X.VERGELIJKEN | Ja, met overeenkomstmodus 3 | De zoekwaarde is het patroon; hoofdlettergevoelig tenzij het met (?i) begint. |
SOMMEN.ALS, AANTALLEN.ALS | Nee | Alleen jokertekens. Tel in plaats daarvan met SOMPRODUCT en REGEXTEST. |
FILTER | Niet direct | Gebruik REGEXTEST als argument opnemen. |
| Zoeken en vervangen (Ctrl+F, Ctrl+H) | Nee | Alleen 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.
| Stuk | Leest als | In NL91ABNA0417164300 |
|---|---|---|
^ | De tekst begint hier | Niets voor de N |
NL | De twee letters NL, zoals getypt | NL |
[0-9]{2} | Precies twee cijfers | 91, de controlecijfers |
[A-Z]{4} | Precies vier hoofdletters | ABNA, de bankcode |
[0-9]{10} | Precies tien cijfers | 0417164300, het rekeningnummer |
$ | De tekst eindigt hier | Niets 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.
| Rij | A | B | C | D |
|---|---|---|---|---|
| 1 | Factuurnr. | Klant | Geldig? | |
| 2 | INV-250412 | Dekker Installatie BV | WAAR=REGEXTEST(A2, "^INV-[0-9]{6}$")=REGEXTEST(A2; "^INV-[0-9]{6}$") | |
| 3 | INV-25412 | Van Rijn Vastgoed BV | ONWAAR=REGEXTEST(A3, "^INV-[0-9]{6}$")=REGEXTEST(A3; "^INV-[0-9]{6}$") | |
| 4 | inv-250413 | Hofman Aannemers | ONWAAR=REGEXTEST(A4, "^INV-[0-9]{6}$")=REGEXTEST(A4; "^INV-[0-9]{6}$") | |
| 5 | INV-2504140 | Mulder Horeca | ONWAAR=REGEXTEST(A5, "^INV-[0-9]{6}$")=REGEXTEST(A5; "^INV-[0-9]{6}$") | |
| 6 | INV 250415 | Ouwerkerk Logistiek | ONWAAR=REGEXTEST(A6, "^INV-[0-9]{6}$")=REGEXTEST(A6; "^INV-[0-9]{6}$") | |
| 7 | INV-250416 | Kuipers Techniek BV | WAAR=REGEXTEST(A7, "^INV-[0-9]{6}$")=REGEXTEST(A7; "^INV-[0-9]{6}$") | |
| 8 | INV-25O417 | Smeets Groothandel | ONWAAR=REGEXTEST(A8, "^INV-[0-9]{6}$")=REGEXTEST(A8; "^INV-[0-9]{6}$") | |
| 9 |
Veeg opzij om alle kolommen te zien
Formule in C2
=REGEXTEST(A2,"^INV-[0-9]{6}$")
=REGEXTEST(A2;"^INV-[0-9]{6}$")
Resultaat: WAAR
Stap voor stap
- 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. A2bevatINV-250412: de tekst begint metINV-, daarna komen de zes cijfers 2, 5, 0, 4, 1 en 2, en daarna eindigt de tekst. WAAR.A3bevatINV-25412: slechts vijf cijfers, en het patroon vraagt er zes voor het einde. ONWAAR.A4bevatinv-250413: het patroon is standaard hoofdlettergevoelig, dusinv-past niet opINV-. ONWAAR.A5bevatINV-2504140: na zes cijfers (250414) volgt een zevende cijfer, terwijl$het einde van de tekst vraagt. ONWAAR.A6bevatINV 250415: een spatie waar het patroon een koppelteken vraagt. ONWAAR.A7bevatINV-250416: WAAR.A8bevatINV-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.C2toont WAAR; naar beneden gekopieerd tonenC3tot en metC8ONWAAR, 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.
| Rij | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 1 | Factuurnr. | Klant | Bankomschrijving | SEPA OVERBOEKING HOFMAN AANNEMERS BETALING FACTUUR INV-250418 DD 14-10-2025 | ||
| 2 | INV-250412 | Dekker Installatie BV | Klant | Hofman 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") | ||
| 3 | INV-250415 | Van Rijn Vastgoed BV | ||||
| 4 | INV-250418 | Hofman Aannemers | ||||
| 5 | INV-250421 | Ouwerkerk Logistiek | ||||
| 6 | INV-250427 | Mulder Horeca | ||||
| 7 | INV-250433 | Kuipers Techniek BV | ||||
| 8 |
Veeg opzij om alle kolommen te zien
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
- Excel rekent eerst de binnenste functie uit: REGEXEXTRACT op
E1met het patroonINV-[0-9]{6}, dusINV-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. - De woorden SEPA, OVERBOEKING, HOFMAN, AANNEMERS, BETALING en FACTUUR bevatten geen
INV-. InFACTUUR INV-250418past 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 datum14-10-2025bevat geenINV-en wordt niet bereikt. - X.ZOEKEN zoekt nu de tekst
INV-250418inA2:A7met de standaard exacte overeenkomst.A2(INV-250412): nee.A3(INV-250415): nee.A4(INV-250418): ja, het derde item. - X.ZOEKEN geeft het derde item van
B2:B7, dat isB4:Hofman Aannemers. - Typ
BETALING INV-250433 KUIPERS TECHNIEKinE1en REGEXEXTRACT geeftINV-250433, het zesde item, dus het resultaat isKuipers 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 HOFMANgeeftINV-250418en 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.
| Rij | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 1 | Sleutel | Bedrag | Klant | D1002 | ||
| 2 | VRK|25-0388|D1002|21% | €1,210.00€ 1.210,00 | Bedrag | €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) | ||
| 3 | VRK|25-0391|D1005|21% | €605.00€ 605,00 | ||||
| 4 | VRK|25-0395|D1002|9% | €218.00€ 218,00 | ||||
| 5 | INK|25-0402|C2001|21% | €363.00€ 363,00 | ||||
| 6 | VRK|25-0407|D1002|21% | €2,420.00€ 2.420,00 | ||||
| 7 | VRK|25-0409|D1020|21% | €726.00€ 726,00 | ||||
| 8 | MEM|25-0414|D1002|21% | €150.00€ 150,00 | ||||
| 9 |
Veeg opzij om alle kolommen te zien
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
E1bevatD1002. De drie delen worden aan elkaar geplakt tot het patroon^VRK\|[0-9]{2}-[0-9]{4}\|D1002\|. Lees het in stukken:^VRKde 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;D1002de klant;\|een echt streepje erna.- 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.
- X.ZOEKEN begint onderaan
A2:A8.A8(MEM|25-0414|D1002|21%): de klant past maar de sleutel begint met MEM, en^VRKmislukt. Nee.A7(VRK|25-0409|D1020|21%): VRK en een boekstuknummer passen, maar na het streepje vraagt het patroonD1002|en de tekst heeftD1020|. Nee. A6(VRK|25-0407|D1002|21%): VRK, boekstuknummer 25-0407, D1002 en een streepje passen allemaal. Ja, en het zoeken stopt.A6is het vijfde item vanA2:A8, dus X.ZOEKEN geeft het vijfde item vanB2:B8, dat isB6: €2,420.00€ 2.420,00.- 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^VRKin het patroon zou de laatste treffer de memoriaalboekingA8zijn: €150.00€ 150,00. - Verander
E1inD1005en alleenA3past (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
d1002inE1past niets en zie jeNiet 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
| Symptoom | Oorzaak | Oplossing |
|---|---|---|
| REGEXTEST geeft WAAR voor een te lang nummer | INV-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 afgewezen | Het 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 verwacht | 25.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 0 | SOM 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 INV | Je 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.VERGELIJKEN | Een 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. |