ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 36793|回复: 41

[分享] 怎么提取字符串中的字母/数字/汉字

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-8 15:12 | 显示全部楼层 |阅读模式
本帖最后由 xinnem 于 2012-2-27 15:13 编辑

大家好,

最近经常看到论坛里有朋友问到关于怎么分离一个含有字符串的单元格里面的字母/数字/汉字等字符的问题。俺不才,在请教了论坛里的前辈之后,在这里给初来的朋友做个总结,做为抛砖引玉。

对于处理一个单元格里面字符串的问题,我们经常用到的函数有:CHAR,CODE,FIND,LEFT,LEN,LENB,MID,REPLACE,RIGHT,SUBSTITUTE,TEXT等,下面介绍分离的总原则,还有在此基础上提出两种不同思路的分离方法。

对于结构比较单一的字符串,我们当然可以用一些比较特殊而且简单有效的方法来处理.
例如字符串:A1=“你好ABC”,想分离成B1=“你好”,C1=“ABC”,这样我们只需要用到LEN,LENB,LFET和RIGHT就可以简洁的做到。
B1=LEFT(A1,LENB(A1)-LEN(A1))
C1=RIGHT(A1,LEN(A1)*2-LENB(A1))
......

但是对于结构比较复杂,而且没有规律的字符串,用这种方法就比较难处理。
所以下面介绍一种分离所有字符串总原则

总原则:利用各种字符的字符代码(数字形式)的有规律排列来分类,最终达到分离,最后再还原成原来的字符。

简单的来说,就是先用CODE()MID()函数把字符串里面所有不同种类的字符(难以参与计算比较)转换成数字形式(容易进行计算比较)的字符代码,之后再根据每一种字符在字符表里面的取值范围来分类,分离或定位。最后再用CHAR()或者MID()函数把分离、定位好的字符代码或序列还原成原来的字符。

*附
字母字符编码范围:a~z=97~122,A~Z=65~90
数字字符编码范围:0~9=48~57
汉字字符编码范围:一般42000以上




下面以分离字母/数字/汉字为例,介绍俺做出来的分离方法。公式或者思路有不简洁的地方,请各位前辈指出:

方法一:
这个方法我称为分解归类分离法
但这个方法有一个最大的问题,就是找不到连接内存数组的好的方法,最后只能无奈的用&&&....

分离字符串-1.jpg
分离字符串-1.rar (3.89 KB, 下载次数: 1786)



方法二:
这个我称为迭代清除法,运行时必须打开迭代计算。
分离字符串-2.jpg
分离字符串-2.rar (3.31 KB, 下载次数: 1458)

希望对大家有帮助啦,
最后再次谢谢论坛上各位前辈和朋友,有你们的支持,我才能走的更远。

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-2-8 15:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
顶楼主!加油!~~~~

TA的精华主题

TA的得分主题

发表于 2012-2-24 14:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好厉害呀!自叹不如!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-3-12 22:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好样的,利害

TA的精华主题

TA的得分主题

发表于 2012-3-22 16:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
认真学习。厉害。

TA的精华主题

TA的得分主题

发表于 2012-3-22 16:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=ROW(INDIRECT("$1:"&LEN($B$4)))  这个公式帮我解释一下行不?实在是想不明白!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-23 00:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhanghuihui2010 发表于 2012-3-22 16:52
=ROW(INDIRECT("$1:"&LEN($B$4)))  这个公式帮我解释一下行不?实在是想不明白!

这个公式是根据$B$4里面实际的字符串长度,产生一个动态的序列,用来拆分字符串,
以本例为例,公式的计算过程是这样子的:

因为LEN($B$4)=18,所以公式变成:=ROW(INDIRECT("$1:"&18)) ==> =ROW(INDIRECT("$1:18")) ==> =ROW($1:18)

TA的精华主题

TA的得分主题

发表于 2012-4-16 17:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
认真学习了,我也对微软没有连接内存中的数据可惜。

TA的精华主题

TA的得分主题

发表于 2012-4-16 21:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好贴,实用,耳目一新,谢谢

TA的精华主题

TA的得分主题

发表于 2012-4-27 19:08 | 显示全部楼层
真的需要这个,总结的相当好啊,受益匪浅,谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 20:52 , Processed in 0.050734 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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