Excel-formel: Kun datavalideringsspecifikke tegn -

Generisk formel

=COUNT(MATCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),allowed&"",0))=LEN(A1)

Resumé

For at bruge datavalidering til kun at tillade en liste over specifikke tegn kan du bruge en ret kompliceret matrixformel baseret på funktionerne TÆL, MATCH og LEN. I det viste eksempel anvendes datavalidering med denne formel:

=COUNT(MATCH(MID(B5,ROW(INDIRECT("1:"&LEN(B5))),1),allowed&"",0))=LEN(B5)

hvor "tilladt" er det navngivne område D5: D11.

Forklaring

Arbejder indefra og ud, bruges MID-funktionen til at generere en matrix fra tekst indtastet i B5 med dette uddrag:

MID(B5,ROW(INDIRECT("1:"&LEN(B5))),1)

forklaret i detaljer her. Resultatet er en matrix som denne:

("A";"A";"A";"-";"1";"1";"1")

som går i MATCH som opslagsværdi. Til opslagsarray bruger vi det navngivne interval "tilladt", sammenkædet til en tom streng (""):

allowed&""

Sammenkædningen konverterer alle tal til strenge, så vi matcher æbler til æbler. Resultatet er en matrix som denne:

("A";"B";"C";"1";"2";"3";"-")

Det sidste argument i MATCH, match_type er sat til nul for at tvinge et nøjagtigt match. Fordi vi giver MATCH flere opslagsværdier, får vi tilbage en matrix med flere resultater:

(1;1;1;7;4;4;4)

Hvert tal i denne matrix repræsenterer et match. Hvis et match ikke findes for et tegn, vil arrayet indeholde en # N / A-fejl.

Endelig bruges COUNT-funktionen til at tælle tallene i resultatarrayet, som sammenlignes med et antal af alle tegn i cellen beregnet med LEN-funktionen. Når MATCH finder et match for alle tegn, er tællingerne ens, formlen returnerer SAND, og ​​datavalidering lykkes. Hvis MATCH ikke finder et match med et tegn, returnerer det # N / A i stedet for et tal. I så fald stemmer tællerne ikke overens, og datavalidering mislykkes.

Bemærk: denne formel er afhængig af brutal kraft for at få arbejdet gjort. Hvis du har en bedre tilgang, bedes du efterlade en kommentar nedenfor.

Interessante artikler...