Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: element

数组小组练习题--011题(2)

[复制链接]
发表于 2007-6-22 21:39 | 显示全部楼层

解法三

<p>=AND((CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=65)*(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=90)+(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=97)*(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=122))</p><p>&nbsp;</p>[em04]还是很长哦
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2007-6-22 22:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-6-22 20:57 | 显示全部楼层

先发个非最佳解法

<p>=AND(IF(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=97,IF(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=122,1,),IF(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=65,IF(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=90,1),)))</p><p>公式太长,要定义一个名称</p>
回复

使用道具 举报

发表于 2007-6-23 15:11 | 显示全部楼层

俺就没明白过什么半角全角 先闪
回复

使用道具 举报

发表于 2007-6-24 09:51 | 显示全部楼层

<p>汗,这儿有第三题的前身哦。</p>[em07]
回复

使用道具 举报

发表于 2007-6-27 00:03 | 显示全部楼层

=LEN(A1)*26-SUM(LEN(SUBSTITUTE(UPPER(A1),CHAR(ROW($65:$90)),)))=LEN(A1)
回复

使用道具 举报

发表于 2007-7-1 10:13 | 显示全部楼层

路过&nbsp;&nbsp; 看看
回复

使用道具 举报

发表于 2007-7-3 09:30 | 显示全部楼层

<p>我也看晕了,差距呀,</p><p>赶上世界先进水平!!</p>
回复

使用道具 举报

发表于 2007-7-13 12:40 | 显示全部楼层

<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:"&amp;LEN(A2))),1))&gt;=65,CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=122,CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;&gt;{91,92,93,94,95,96})<br/>=AND((CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=65)*(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=90)+(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&gt;=97)*(CODE(MID(A2,ROW(INDIRECT("1:"&amp;LEN(A2))),1))&lt;=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:"&amp;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:"&amp;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:"&amp;LEN(A1))),1))&gt;{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:"&amp;LEN(A1)))))&gt;{64,90})={1,0})</font></p>
[此贴子已经被作者于2007-7-13 12:41:04编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-7-13 13:33 | 显示全部楼层

<p>辛苦刀狐大师的讲解</p>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 14:12 , Processed in 0.242516 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表