|
<p><font size="6">代替楼主小结一下:</font></p><p><font size="6">题目要求:全部由英文半角字符组成</font></p><p><font size="6">本题最关键的函数就是code,也就是返回字符的数字代码。<br/>那么根据题意最直观的解法就是判断每个字符的数字代码都在 [65,90] , [97,122] 这两个区间内。就如 我是哈哈 的两个解法:<br/>=AND(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=65,CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=122,CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<>{91,92,93,94,95,96})<br/>=AND((CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=65)*(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=90)+(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=97)*(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=122))<br/>也就是通过 mid 函数把每个字符拆分,然后用 code 返回数字代码 最后判断是不是都在要求的区间内。</font></p><p><font size="6">这样固然得到我们想要的答案了,但是公式好像有点长。因为有两个区间要用大于等于和小于等于来判断,于是 laoyebin 想出了 一个巧妙的办法 利用 frequency 和 mmult 函数替代了那些复杂的判断:<br/>=MMULT({1,0,1,0,1},FREQUENCY(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),{64;90;96;122}))=0 <br/>那么这还是判断了两个区间,于是又出现了一个函数 upper (当然也可以用lower) 这样我们只要判断 [65,90] 这一个区间了。就如 liangwen 的这个公式:(公式中的match 加 count 用的很好,这里没用code 用了 char 道理相通)<br/>=COUNT(MATCH(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1),CHAR(ROW($65:$90)),))=LEN(A1)<br/>以及 逍遥自在 这个公式:(这里用了 substitute 来判断 思路也很不错)<br/>=LEN(A1)*26-SUM(LEN(SUBSTITUTE(UPPER(A1),CHAR(ROW($65:$90)),)))=LEN(A1)<br/>当然最简洁的公式还属于 jssy 的:=AND(N(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))>{64,90})={1,0})</font></p><p><font size="6">综上:虽然公式很多,但是道理相通,要得到简洁的公式就要看你判断是否属于这个区间的方式和方法了。</font></p><p><font size="6">最后补充一点,code 函数返回文本字符串中第一个字符的数字代码。所以你可以不用mid 用right 函数也可以<br/>比如:=AND(N(CODE(RIGHT(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1)))))>{64,90})={1,0})</font></p>
[此贴子已经被作者于2007-7-13 12:41:04编辑过] |
|