MS Office Forum / Excel / Worksheet Functions / May 2008
Cell validation
|
|
Thread rating:  |
Sai Krishna - 22 May 2008 05:57 GMT Hi,
I have a cell where in I need to enter an alphanumeric strictly as under
AAAAI7504G
The rule is : First 5 should be alphabets, next 4 should be numbers and the last again an alphabet.
The total characters are therefore 10. For the length of the character, we can use Text length under Data validation. But we need to ensure that rule is followed.
The above is only an illustration. But the positions of alphabets and numbers should be as per the rule above.
Now is there any formula that throws up a warning saying that a number has been entered in place of an alphabet. In other words, the above rule should not be violated.
regards krishna
Bob Phillips - 22 May 2008 10:13 GMT =AND(SUMPRODUCT(--(ISNUMBER(--MID(A21,ROW(INDIRECT("1:5")),1))))=0,ISNUMBER(--MID(A21,6,4)),NOT(ISNUMBER(--RIGHT(A21,1))))
 Signature --- HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my addy)
> Hi, > [quoted text clipped - 21 lines] > regards > krishna Rick Rothstein (MVP - VB) - 22 May 2008 10:29 GMT That formula is not foolproof; for example, consider these entries...
ABCDE12.3F ABCDE+123F ABCDE$123F ABCDE(12)F
Rick
> =AND(SUMPRODUCT(--(ISNUMBER(--MID(A21,ROW(INDIRECT("1:5")),1))))=0,ISNUMBER(--MID(A21,6,4)),NOT(ISNUMBER(--RIGHT(A21,1)))) > [quoted text clipped - 25 lines] >> regards >> krishna Bob Phillips - 22 May 2008 11:10 GMT easily resolved
=AND(SUMPRODUCT(--(ISNUMBER(--MID(A21,ROW(INDIRECT("1:5")),1))))=0,SUMPRODUCT(--(ISNUMBER(--MID(A21,ROW(INDIRECT("6:9")),1))))=4,NOT(ISNUMBER(--RIGHT(A21,1))))
 Signature --- HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my addy)
> That formula is not foolproof; for example, consider these entries... > [quoted text clipped - 34 lines] >>> regards >>> krishna Sai Krishna - 22 May 2008 13:54 GMT Hi Bob,
thanks a lot. It has worked!!! regards sai
> easily resolved > [quoted text clipped - 38 lines] > >>> regards > >>> krishna Rick Rothstein (MVP - VB) - 22 May 2008 16:54 GMT I'm sorry, but it turns out there is still a problem... none of the "letter" entry characters need to actually be letters to pass through your formula. Here is one of the several worst possibilities that your formula will return TRUE for...
$+#%&1234*
Rick
> easily resolved > [quoted text clipped - 39 lines] >>>> regards >>>> krishna Rick Rothstein (MVP - VB) - 22 May 2008 17:13 GMT I'm beginning to think the only "foolproof" way to do this might be this formula...
=AND(MID(A1,1,1)>="A",MID(A1,1,1)<="Z")+AND(MID(A1,2,1)>="A",MID(A1,2,1)<="Z")+AND(MID(A1,3,1)>="A",MID(A1,3,1)<="Z")+AND(MID(A1,4,1)>="A",MID(A1,4,1)<="Z")+AND(MID(A1,5,1)>="A",MID(A1,5,1)<="Z")+AND(MID(A1,6,1)>="0",MID(A1,6,1)<="9")+AND(MID(A1,7,1)>="0",MID(A1,7,1)<="9")+AND(MID(A1,8,1)>="0",MID(A1,8,1)<="9")+AND(MID(A1,9,1)>="0",MID(A1,9,1)<="9")+AND(MID(A1,10,1)>="A",MID(A1,10,1)<="Z")=10
although I do note some ALT+0### "type-able" keyboard characters (for example, ALT+0140, ALT+0153, and others) will pass the test; however, it would be foolproof for the "normal" keyboard characters.
Rick
> I'm sorry, but it turns out there is still a problem... none of the > "letter" entry characters need to actually be letters to pass through your [quoted text clipped - 48 lines] >>>>> regards >>>>> krishna Sai Krishna - 23 May 2008 08:10 GMT Hi rick,
this has also worked. The formula gives an impression that it would restrict the text length to 10. But it is not restricting the text length to 10. Ok, we could use the text length under data validation. But if the formula could take care, it would be wonderful.
Thanks for your efforts. regards krishna
> I'm beginning to think the only "foolproof" way to do this might be this > formula... [quoted text clipped - 59 lines] > >>>>> regards > >>>>> krishna Rick Rothstein (MVP - VB) - 23 May 2008 10:11 GMT The final =10 at the end of the formula controls the length. There are 10 logical expressions being added together; hence, if all true, then they will total 10 and that total will be compared to the final =10. That means the whole formula will evaluate to TRUE only if all 10 logical expressions are true... and they will all be true only if each character meets the test prescribed for them. Try it out and see.
Rick
> Hi rick, > [quoted text clipped - 77 lines] >> >>>>> regards >> >>>>> krishna Bob Phillips - 23 May 2008 18:24 GMT =AND(SUM(--(NOT(ISNUMBER(MATCH(UPPER(MID(A1,ROW($1:$5),1)),CHAR(ROW(INDIRECT("65:90"))),0)))))=0,SUMPRODUCT(--(ISNUMBER(--MID(A1,ROW(INDIRECT("6:9")),1))))=4,ISNUMBER(MATCH(UPPER(RIGHT(A1,1)),CHAR(ROW(INDIRECT("65:90"))),0)))
an array formula.
Before anyone pulls me up about ROW($1:$5) (as if!), I included it as ROE(INDIRECT exceeds 7 nested functions.
 Signature --- HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my addy)
> I'm beginning to think the only "foolproof" way to do this might be this > formula... [quoted text clipped - 59 lines] >>>>>> regards >>>>>> krishna Rick Rothstein (MVP - VB) - 23 May 2008 18:38 GMT You will need to add something for the length... ABCDE1234FABCDEF evaluates to TRUE.
Rick
> =AND(SUM(--(NOT(ISNUMBER(MATCH(UPPER(MID(A1,ROW($1:$5),1)),CHAR(ROW(INDIRECT("65:90"))),0)))))=0,SUMPRODUCT(--(ISNUMBER(--MID(A1,ROW(INDIRECT("6:9")),1))))=4,ISNUMBER(MATCH(UPPER(RIGHT(A1,1)),CHAR(ROW(INDIRECT("65:90"))),0))) > [quoted text clipped - 67 lines] >>>>>>> regards >>>>>>> krishna Bob Phillips - 24 May 2008 00:04 GMT =AND(LEN(A1)=10,SUM(--(NOT(ISNUMBER(MATCH(UPPER(MID(A1,ROW($1:$5),1)),CHAR(ROW(INDIRECT("65:90"))),0)))))=0, SUMPRODUCT(--(ISNUMBER(--MID(A1,ROW(INDIRECT("6:9")),1))))=4,ISNUMBER(MATCH(UPPER(RIGHT(A1,1)),CHAR(ROW(INDIRECT("65:90"))),0)))
there you go.
 Signature --- HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my addy)
> You will need to add something for the length... ABCDE1234FABCDEF > evaluates to TRUE. [quoted text clipped - 72 lines] >>>>>>>> regards >>>>>>>> krishna T. Valko - 24 May 2008 02:54 GMT Still chokes:
?A?c*0000? *****1234* **a??0000x
 Signature Biff Microsoft Excel MVP
> =AND(LEN(A1)=10,SUM(--(NOT(ISNUMBER(MATCH(UPPER(MID(A1,ROW($1:$5),1)),CHAR(ROW(INDIRECT("65:90"))),0)))))=0, > SUMPRODUCT(--(ISNUMBER(--MID(A1,ROW(INDIRECT("6:9")),1))))=4,ISNUMBER(MATCH(UPPER(RIGHT(A1,1)),CHAR(ROW(INDIRECT("65:90"))),0))) [quoted text clipped - 78 lines] >>>>>>>>> regards >>>>>>>>> krishna Rick Rothstein (MVP - VB) - 24 May 2008 04:45 GMT I ***think*** this array-entered formula might work...
=AND(AND(MID(A1,ROW($1:$5),1)>="A",MID(A1,ROW($1:$5),1)<="Z"),AND(MID(A1,ROW($6:$9),1)>="0",MID(A1,ROW($6:$9),1)<="9"),AND(MID(A1,10,1)>="A",MID(A1,10,1)<="Z"),LEN(A1)=10)
Note for the archives: Commit this formula with Ctrl+Shift+Enter instead of just Enter by itself.
Rick
> Still chokes: > [quoted text clipped - 84 lines] >>>>>>>>>> regards >>>>>>>>>> krishna T. Valko - 24 May 2008 05:56 GMT Accepts lower case letters:
aBcDe9999F aaaaa0000a
 Signature Biff Microsoft Excel MVP
>I ***think*** this array-entered formula might work... > [quoted text clipped - 93 lines] >>>>>>>>>>> regards >>>>>>>>>>> krishna Rick Rothstein (MVP - VB) - 24 May 2008 08:22 GMT I allowed for that on purpose since the OP didn't specifically say to ignore them (his original requirement was only for "alphanumeric" characters). On top of that, the second formula that Bob posted, a modification of his original formula in response to a comment by me, and which the OP indicated "worked" for him, allowed for both upper and lower case letters... I figured that was a confirmation that upper/lower case letters were both acceptable. We will have to wait for the OP to come back to this thread and address this issue before we can know for sure what his intention was. So, putting that issue aside, do you think the formula works shape-wise? Or did I miss something?
Rick
> Accepts lower case letters: > [quoted text clipped - 98 lines] >>>>>>>>>>>> regards >>>>>>>>>>>> krishna T. Valko - 24 May 2008 08:59 GMT >do you think the formula works shape-wise? Yeah, it works if case is not a consideration and rows will not be inserted.
 Signature Biff Microsoft Excel MVP
>I allowed for that on purpose since the OP didn't specifically say to >ignore them (his original requirement was only for "alphanumeric" [quoted text clipped - 112 lines] >>>>>>>>>>>>> regards >>>>>>>>>>>>> krishna T. Valko - 22 May 2008 17:04 GMT The OP seems to be satisfied but....
The cell will accept:
<space>~!<space>&1234)
 Signature Biff Microsoft Excel MVP
> easily resolved > [quoted text clipped - 39 lines] >>>> regards >>>> krishna Stefi - 22 May 2008 14:44 GMT In this example the AAAAI7504G type code is contained in C1:
=AND(MID(C1,1,1)>="A",MID(C1,2,1)>="A",MID(C1,3,1)>="A",MID(C1,4,1)>="A",MID(C1,5,1)>="A",MID(C1,10,1)>="A",MID(C1,1,1)<="Z",MID(C1,2,1)<="Z",MID(C1,3,1)<="Z",MID(C1,4,1)<="Z",MID(C1,5,1)<="Z",MID(C1,10,1)<="Z",ISNUMBER(VALUE(MID(C1,6,4))),LEN(C1)=10)
Regards, Stefi
„Sai Krishna” ezt írta:
> Hi, > [quoted text clipped - 18 lines] > regards > krishna vezerid - 22 May 2008 17:16 GMT The following formula will accept only capital letters of the alphabet in positions 1-5, only a number in positions 6-9 and only a capital letter in position 10. It is an array formula, hence commit with Shift +Ctrl+Enter
=PRODUCT((CODE(MID(A2,ROW(INDIRECT("1:5")), 1))>64)*(CODE(MID(A2,ROW(INDIRECT("1:5")),1))<91))*ISNUMBER(-- MID(A2,6,3))*(CODE(RIGHT(A2,1))>64)*(CODE(RIGHT(A2,1))<91)
HTH Kostis Vezerides
On May 22, 7:57 am, Sai Krishna <SaiKris...@discussions.microsoft.com> wrote:
> Hi, > [quoted text clipped - 18 lines] > regards > krishna vezerid - 22 May 2008 17:35 GMT Correction for the ISNUMBER part, MID(A2,6,4) is needed:
=PRODUCT((CODE(MID(A2,ROW(INDIRECT("1:5")), 1))>64)*(CODE(MID(A2,ROW(INDIRECT("1:5")),1))<91))*ISNUMBER(-- MID(A2,6,4))*(CODE(RIGHT(A2,1))>64)*(CODE(RIGHT(A2,1))<91)
Still an array formula. I tried to simplify the check for a number, although this will accept parts in positions 6-9 like: ABCDE-123G ABCDE1E10G
If we want to guard against these possibilities then the more complex formula is warranted:
=PRODUCT((CODE(MID(A2,ROW(INDIRECT("1:5")), 1))>64)*(CODE(MID(A2,ROW(INDIRECT("1:5")),1))<91))*PRODUCT(-- ISNUMBER(--MID(A2,ROW(INDIRECT("6:9")), 1)))*(CODE(RIGHT(A2,1))>64)*(CODE(RIGHT(A2,1))<91)
HTH Kostis
> The following formula will accept only capital letters of the alphabet > in positions 1-5, only a number in positions 6-9 and only a capital [quoted text clipped - 33 lines] > > regards > > krishna Rick Rothstein (MVP - VB) - 22 May 2008 18:07 GMT The ISNUMBER test appears to return 1 (TRUE) for floating point values, such as this...
ABCDE1.34F
Rick
> Correction for the ISNUMBER part, MID(A2,6,4) is needed: > [quoted text clipped - 62 lines] >> > regards >> > krishna T. Valko - 22 May 2008 18:32 GMT That will accept more than 10 characters.
Slightly shorter but ugly as all get-out:
=SUM(--(LEN(A1)=10),5-LEN(SUBSTITUTE(LEFT(A1,5),CHAR(ROW(INDIRECT("65:90"))),"")),--(COUNT(-MID(A1,ROW(INDIRECT("6:9")),1))=4),--AND(CODE(RIGHT(A1))>64,CODE(RIGHT(A1))<91))=8
If you enter this as a worksheet function it has to be array entered.
Meets these conditions:
Length must be 10 characters The first 5 characters must be uppercase letters A-Z Characters 6:9 must be numbers 0-9 The last character must be uppercase letters A-Z
 Signature Biff Microsoft Excel MVP
> Correction for the ISNUMBER part, MID(A2,6,4) is needed: > [quoted text clipped - 62 lines] >> > regards >> > krishna T. Valko - 24 May 2008 08:06 GMT Slightly shorter with 2 less function calls:
=SUM(LEN(A1)=10,5-LEN(SUBSTITUTE(LEFT(A1,5),CHAR(ROW(INDIRECT("65:90"))),"")),COUNT(-MID(A1,ROW(INDIRECT("6:9")),1))=4,LOOKUP(CODE(RIGHT(A1)),{65,90,91},{1,1,0}))=8
 Signature Biff Microsoft Excel MVP
> That will accept more than 10 characters. > [quoted text clipped - 77 lines] >>> > regards >>> > krishna Rick Rothstein (MVP - VB) - 24 May 2008 08:36 GMT I'm not 100% sure, but I think you can remove those INDIRECT function calls...
=SUM(LEN(A1)=10,5-LEN(SUBSTITUTE(LEFT(A1,5),CHAR(ROW(65:90)),"")),COUNT(-MID(A1,ROW(6:9),1))=4,LOOKUP(CODE(RIGHT(A1)),{65,90,91},{1,1,0}))=8
Giving it a quick test, it looks like this version of your formula (array-entered, of course) works.
Rick
> Slightly shorter with 2 less function calls: > [quoted text clipped - 81 lines] >>>> > regards >>>> > krishna T. Valko - 24 May 2008 08:52 GMT Those INDIRECTs make it robust against row insertions.
If rows will *never* be inserted then, yes, we can do without them.
 Signature Biff Microsoft Excel MVP
> I'm not 100% sure, but I think you can remove those INDIRECT function > calls... [quoted text clipped - 92 lines] >>>>> > regards >>>>> > krishna Rick Rothstein (MVP - VB) - 24 May 2008 09:41 GMT True, but they also make the formula volatile as well.
Rick
> Those INDIRECTs make it robust against row insertions. > [quoted text clipped - 99 lines] >>>>>> > regards >>>>>> > krishna Sai Krishna - 23 May 2008 08:27 GMT Thanks for answer.
Formula restricting the length to 10 characters would be great. regards krishna
> The following formula will accept only capital letters of the alphabet > in positions 1-5, only a number in positions 6-9 and only a capital [quoted text clipped - 32 lines] > > regards > > krishna vezerid - 23 May 2008 14:20 GMT Just add a multiplication with (LEN(A2)=10)
=(LEN(A2)=10)*PRODUCT((CODE(MID(A2,ROW(INDIRECT("1:5")), 1))>64)*(CODE(MID(A2,ROW(INDIRECT("1:5")),1))<91))*PRODUCT(-- ISNUMBER(--MID(A2,ROW(INDIRECT("6:9")), 1)))*(CODE(RIGHT(A2,1))>64)*(CODE(RIGHT(A2,1))<91)
HTH Kostis
On May 23, 10:27 am, Sai Krishna <SaiKris...@discussions.microsoft.com> wrote:
> Thanks for answer. > [quoted text clipped - 38 lines] > > > regards > > > krishna
|
|
|