ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: sunshines007

[求助] 如何在数字与字母中提取字母的长度

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-29 02:23 | 显示全部楼层
数组公式:
=COUNT(N(INDIRECT(MID(A1,ROW(1:99),1)&"1")

=========================
后面的朋友说少了两个括号,我一看,果然少了!于是,赶快来补上,顺便把&1那里改一下,改成4^8了,呵呵!!

=COUNT(N(INDIRECT(MID(A1,ROW(1:99),1)&4^8)))

[ 本帖最后由 ggsmart 于 2010-5-29 23:28 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-5-29 06:46 | 显示全部楼层
原帖由 ggsmart 于 2010-5-29 02:23 发表
数组公式:
=COUNT(N(INDIRECT(MID(A1,ROW(1:99),1)&"1")

麻烦老师讲讲这个公式的原理,谢谢!

TA的精华主题

TA的得分主题

发表于 2010-5-29 07:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-29 07:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-5-29 11:39 | 显示全部楼层
用vba来凑凑热闹,显示字母,小写字母,数字,其他字符个数
  1. Private Sub CommandButton2_Click()

  2. arr = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
  3. ary = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
  4. r = 0: s = 0: t = 0
  5. For i = 1 To Len([a1])
  6.     tmp = Filter(arr, Right(Left([a1], i), 1))
  7.    
  8.     If IsError(Application.Match(Right(Left([a1], i), 1), arr, 0)) = False Then r = r + 1
  9.     If UBound(tmp) > -1 Then s = s + 1
  10.     If IsError(Application.Match(Right(Left([a1], i), 1), ary, 0)) = False Then t = t + 1
  11.    
  12. Next
  13. MsgBox ("数字有" & t & "个" & "," & "字母有" & r & "个" & "," & "其中小写字母有" & s & "个" & "," & "其他字符有" & Len([a1]) - r - t & "个")


  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2010-5-29 12:50 | 显示全部楼层
原帖由 laowuwyx 于 2010-5-29 06:46 发表

麻烦老师讲讲这个公式的原理,谢谢!


=COUNT(N(INDIRECT(MID(A1,ROW(1:99),1)&"1")

假如A1单元格值为:A1e8k9cd。
那公式从内到外开始:
1、MID(A1,ROW(1:99),1)= {"A";"1";"e";"8";"k";"9";"c";"d"}     后面还有一串"",这里省略了,不再列出。
2、MID(A1,ROW(1:99),1)&1={"A";"1";"e";"8";"k";"9";"c";"d"}&1={"A1";"11";"e1";"81";"k1";"91";"c1";"d1"}     同样,后面原来是""地方我省略了。计算完这步后,原单元格中有数值的地方就变成了A1,B1,C1之类的单元格区域的名称了。
3、在第二步的结果前用上indirect函数,把文本转为单元格引用,“A1”这样的结果能得到对A1单元格的引用,而“11”之样的则返回错误值。
4、在第三肯的前面用上N函数,这个函数不用多加说明了吧?原来是错误的返回错误,其他的返回数值了。
5、最后一步,在外面用上count,统计结果里有多少数值。即为字母数!

TA的精华主题

TA的得分主题

发表于 2010-5-29 13:21 | 显示全部楼层
=LEFT(A1,SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>=97)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<=122)))

TA的精华主题

TA的得分主题

发表于 2010-5-29 14:27 | 显示全部楼层
原帖由 ggsmart 于 2010-5-29 12:50 发表


=COUNT(N(INDIRECT(MID(A1,ROW(1:99),1)&"1")

假如A1单元格值为:A1e8k9cd。
那公式从内到外开始:
1、MID(A1,ROW(1:99),1)= {"A";"1";"e";"8";"k";"9";"c";"d"}     后面还有一串"",这里省略了,不再列出 ...

老师开课啦啦。。。。。。。

TA的精华主题

TA的得分主题

发表于 2010-5-29 15:31 | 显示全部楼层
从头看到38楼,最喜欢的公式就是=MIN(IF(ISERROR(--MID(A1,ROW(1:100),1)),"",ROW(1:100)))-1
多简单啊,就是在遇到字母和数字混杂的时候会出错了。

TA的精华主题

TA的得分主题

发表于 2010-5-29 15:54 | 显示全部楼层
原帖由 lrlxxqxa 于 2010-5-29 15:31 发表
从头看到38楼,最喜欢的公式就是=MIN(IF(ISERROR(--MID(A1,ROW(1:100),1)),"",ROW(1:100)))-1
多简单啊,就是在遇到字母和数字混杂的时候会出错了。



36楼不是更简单?可惜就是不能区分大小写

[ 本帖最后由 cgzn 于 2010-5-29 16:00 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 17:48 , Processed in 0.034686 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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