Innehållsförteckning
I handledningen visas hur du gör datavalidering i Excel med hjälp av reguljära uttryck och en egen RegexMatch-funktion.
När det gäller att begränsa användarinmatning i Excel-arbetsblad är datavalidering oumbärlig. Vill du bara tillåta siffror eller datum i en viss cell? Eller begränsa textvärden till en viss längd? Eller kanske inte tillåta tider utanför ett visst intervall? Inga problem, allt detta kan enkelt göras med förinställda eller anpassade valideringskriterier. Men vad händer om jag bara vill tillåta giltiga e-postadresser eller strängar som matchar enEtt specifikt mönster? Tyvärr, det är inte möjligt. Regex, säger du? Hmm... det kan fungera!
Hur man gör Excel-datavalidering med Regex
Tyvärr har ingen av de inbyggda Excel-funktionerna stöd för regexer, och datavalidering är inget undantag. För att kunna validera cellinmatning med hjälp av reguljära uttryck måste du först skapa en egen Regex-funktion. En annan komplikation är att VBA-användardefinierade funktioner inte kan serveras direkt till datavalidering - du behöver en medlare i form av en namngiven formel.
Med tanke på ovanstående ska vi kortfattat beskriva de steg som ska tas för att validera data i Excel med hjälp av regexer:
- Skapa en anpassad Regex-funktion som kontrollerar om ett inmatningsvärde matchar ett reguljärt uttryck.
- Ange ett namn för din Regex-formel.
- Konfigurera en regel för datavalidering baserad på den namngivna formeln.
- Kopiera valideringsinställningarna till så många celler som du vill.
Det låter som en plan - låt oss försöka genomföra den i praktiken!
Validering av Excel-data med hjälp av anpassade reguljära uttryck
I det här exemplet behandlas ett mycket vanligt fall - hur man tillåter endast värden av ett visst mönster.
Om du har några SKU-koder i ditt kalkylblad och vill vara säker på att endast de koder som matchar ett visst mönster kommer med i listan, kan du identifiera sådana värden med hjälp av nedanstående regex, förutsatt att varje SKU består av två grupper av tecken som skiljs åt med ett bindestreck, där den första gruppen består av tre stora bokstäver och den andra gruppen av tre siffror.
Mönster : ^[A-Z]{3}-\d{3}$
Observera att strängens början (^) och slut ($) är förankrade, så att inga andra tecken än de i mönstret kan skrivas in i en cell.
1. Lägg till en anpassad Regex Match-funktion
Börja med att infoga RegExpMatch-funktionen i din arbetsbok. Koden är redan skriven av våra Excel-gurus, så du behöver bara kopiera den från den ovan länkade sidan och klistra in den i din VBA-editor.
Här är funktionens syntax som referens:
RegExpMatch(text, mönster, [match_case])Var:
- Text (krävs) - en källsträng (i vårt sammanhang - en validerad cell).
- Mönster (obligatoriskt) - ett reguljärt uttryck som ska matchas.
- Match_case (valfritt) - matchningstyp. TRUE eller utelämnas - skiftlägeskänslig; FALSE - skiftlägesokänslig.
Tips: Om du använder vår Ultimate Suite kan du göra Regex-datavalidering i Excel utan att lägga till någon VBA-kod i dina arbetsböcker. Använd bara en anpassad AblebitsRegexMatch-funktion som ingår i våra Regex-verktyg.
2. Skapa en namngiven formel
I ditt målarbetsblad markerar du cell A1 (oavsett dess innehåll och oavsett vilken cell du faktiskt ska validera), trycker på Ctrl + F3 för att öppna namnhanteraren och definierar ett namn för formeln:
=RegExpMatch(Sheet1!A1, "^[A-Z]{3}-\d{3}$")
Du kan också skriva in regexet i en cell (A2 i det här exemplet) och ange $A$2 som det andra argumentet:
=RegExpMatch(Sheet1!A1, Sheet1!$A$2)
För att formeln ska fungera korrekt måste du se till att använda en relativ referens för text argument (A1) och absolut referens för mönster ($A$2).
Eftersom vår formel är avsedd för att validera SKU-nummer, namnger vi den i enlighet med detta: Validera_SKU .
Viktigt att notera: När du definierar formeln ska du dubbelkontrollera att Det första argumentet avser den för närvarande valda cellen. Om till exempel cell A1 är markerad på arket ska du ange A1 i det första argumentet (enligt våra rekommendationer); om B2 är markerad ska du använda B2 som första argument, och så vidare. Det spelar egentligen ingen roll vilken referens du använder så länge den matchar den markerade cellen.
Steg-för-steg-instruktioner finns i avsnittet Hur man skapar en namngiven formel i Excel.
3. Ställ in datavalidering
Välj den första cellen som ska kontrolleras (A5 i vårt fall) och skapa en anpassad regel för datavalidering baserad på den namngivna formeln. Gör följande:
- Klicka på Uppgifter flik> Validering av data .
- I Tillåt i rullgardinslistan, välj Anpassad .
- Ange nedanstående formel i motsvarande ruta.
=Validera_SKU
- Avmarkera Ignorera tomt alternativet, annars fungerar inte din regel.
Du kan även skriva ett eget felmeddelande som ska visas när ogiltiga data matas in i en cell.
Om du känner att du behöver de detaljerade stegen kan du läsa följande: Så här ställer du in anpassad datavalidering i Excel.
4. Kopiera datavalidering till fler celler
Så här gör du för att kopiera valideringsinställningarna till fler celler:
- Markera cellen med datavalidering och tryck på Ctrl + C för att kopiera den.
- Välj andra celler som du vill validera, högerklicka på dem, klicka på Klistra in speciellt , och välj den Validering alternativ.
- Klicka på OK .
Mer information finns i Hur man kopierar datavalidering.
Varje gång någon försöker skriva in en ogiltig SKU i någon av de validerade cellerna visas följande varningsmeddelande:
Validering av e-post med Regex
För att utföra e-postvalidering börjar du med att skriva ett reguljärt uttryck som matchar en e-postadress.
Mönster : ^[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9]+\.[A-Za-z]{2,24}$
En detaljerad förklaring av syntaxen finns i Regex för att matcha giltiga e-postadresser.
Ange nu valideringskriterierna genom att utföra de redan välkända stegen:
- Skriv in ovanstående regex i B2.
- Välj cell A1 och definiera ett namn som heter Validate_Email som hänvisar till:
=RegExpMatch(Sheet1!A1, Sheet1!$B$2)
- För cell B5 tillämpar du anpassad datavalidering med hjälp av nedanstående formel. Ignorera tomt bör vara avmarkerat.
=Validera_Email
Dessutom kan du konfigurera ett anpassat felmeddelande som uppmanar användaren att ange en giltig e-postadress.
- Kopiera regeln till cellerna nedan.
Om en e-postadress som du anger i en validerad cell inte matchar ett regexmönster visas följande varning:
Validering av lösenord med hjälp av reguljära uttryck
När du använder regex för validering av lösenord måste du först bestämma exakt vad ditt reguljära uttryck ska kontrollera. Här är några exempel som kan hjälpa dig på rätt spår.
Lösenordet måste vara minst 6 tecken långt och får endast innehålla bokstäver (versaler eller gemener) och siffror:
Mönster : ^[A-Za-z0-9]{6,}$
Ett lösenord måste vara minst 6 tecken långt och innehålla minst en bokstav och en siffra:
Mönster : ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$
Lösenordet måste vara minst 6 tecken långt och innehålla minst en stor bokstav, en liten bokstav och en siffra:
Mönster : ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d]{6,}$
Ett lösenord måste vara minst 6 tecken långt och innehålla minst en bokstav, en siffra och ett specialtecken:
Mönster : ^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&_-])[A-Za-z\d@$!%*#?&_-]{6,}$
När mönstret är etablerat kan du gå vidare till att konfigurera datavalidering:
- Ange ditt lösenord i C2.
- Välj cell A1 och skapa en namngiven formel som heter Validerar_lösenord :
=RegExpMatch(Sheet1!A1, Sheet1!$C$2)
- För cell C5 skapar du en anpassad valideringsregel med nedanstående formel. Kom ihåg att avmarkera Ignorera tomt kryssrutan.
=Validera_lösenord
- Kopiera regeln till så många celler som du vill.
Nu kan du tryggt lägga till nya lösenord i listan. Om en inmatningssträng inte stämmer med regexet kommer följande varning att påminna dig om vilka typer av värden som accepteras:
Regex-datavalidering fungerar inte
Om Regex-datavalidering inte fungerar i Excel beror det troligen på någon av följande orsaker.
RegExpMatch-funktionen saknas
Innan du tillämpar datavalidering ska du se till att infoga koden för funktionen RegExpMatch i arbetsboken.
Felaktigt reguljärt uttryck
Om du vill se att ditt regex fungerar som förväntat kan du skriva in en RegExpMatch-formel i en cell och undersöka resultatet. Mer information finns i Excel, regelbunden uttrycksmatchning med exempel.
För att analysera och felsöka dina reguljära uttryck kan du använda gratis testtjänster för reguljära uttryck online, t.ex. RegEx101 eller RegExr.
Fel namngiven formel
En mycket vanlig orsak till att datavalideringen misslyckas är att en Regex-namngiven formel hänvisar till fel cell. I alla exempel rekommenderade vi att definiera en formel som hänvisar till A1:
=RegExpMatch(A1, regex)
Detta fungerar endast om cell A1 är aktiv när man definierar ett namn och en Relativ referens. (utan $-tecknet) används.
Tanken är att en relativ referens som anges i formeln (A1) automatiskt kommer att ändras baserat på den validerade cellens relativa position. Med andra ord väljs cell A1 bara för enkelhetens och konsekvensens skull. Du kan faktiskt välja cell B1 och hänvisa till B1, välja cell C1 och hänvisa till C1, och så vidare. Det viktiga är att den refererad cell bör vara den aktiv cell .
Om du vill kontrollera om din namngivna formel är korrekt markerar du en valfri cell i kalkylbladet, öppnar namnhanteraren och ser vilken cell formeln pekar på. Om formeln hänvisar till den markerade cellen är formeln korrekt. I annat fall bör du ändra referensen i det första argumentet.
I skärmdumpen nedan är cell A7 markerad, vilket innebär att en namngiven formel ska ha A7 i det första argumentet. Det andra argumentet ($A$2) hänvisar till regex - den här referensen ska vara konstant, så den är låst med $-tecknet.
Alternativet Ignorera tomt är valt.
När du skapar en anpassad regel för datavalidering är det viktigt att du avmarkerar Ignorera tomt Annars kommer regeln inte att fungera av följande skäl:
Om ingen matchning hittas returnerar funktionen RegExpMatch FALSE. Ignorera tomt valt, är FALSE lika med blank och ignoreras.
En alternativ lösning är att uttryckligen ange att formeln ska ge TRUE:
=RegExpMatch(...)=TRUE
Så gör du datavalidering i Excel med hjälp av reguljära uttryck. Tack för att du läste och jag ser fram emot att se dig på vår blogg nästa vecka!
Arbetsbok för övning för nedladdning
Exempel på Regex-datavalidering (.xlsm-fil)