ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]单元格内容撷取一问

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-22 07:34 | 显示全部楼层 |阅读模式

请问一下

1.数据 - "a12345y" 如何自动撷取其中的数字

2.数据 - "12345" 如何自动只撷取其中间三个的数位(即234)放於其它格上

先谢各位

TA的精华主题

TA的得分主题

发表于 2006-7-22 07:43 | 显示全部楼层
MIDB 左起X个开始取X个字符

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 07:50 | 显示全部楼层

对不起,我一点也看不懂。

其实我不太懂excel用法,能不能写得浅白点?

谢谢 tian00244

TA的精华主题

TA的得分主题

发表于 2006-7-22 07:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

B1=MIDB(A1,1,2)        A1=a12345y

B2=MIDB(A2,2,3)        A2=12345

TA的精华主题

TA的得分主题

发表于 2006-7-22 08:04 | 显示全部楼层

回复:(golflam)提取字符串中的数值

欢迎tian00244 朋友。

如果你的数据有固定的长度和格式,公式可以简单些,如,前后各有1位字母:

A1="a12345y"

B1=Mid(A1,2,5)

如果前后字母个数不固定:

B1=MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1)

数组公式,按Ctrl+Shift+Enter三键结束。

TA的精华主题

TA的得分主题

发表于 2006-7-22 08:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-7-22 09:23 | 显示全部楼层
QUOTE:
以下是引用山菊花在2006-7-22 8:04:17的发言:

如果前后字母个数不固定:

B1=MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1)

数组公式,按Ctrl+Shift+Enter三键结束。

能解释一下这个公式的具体意思及思路吗?有点没看明白。谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-7-22 11:44 | 显示全部楼层
谢谢多位指教。完全明白及解决了。

TA的精华主题

TA的得分主题

发表于 2006-7-22 13:48 | 显示全部楼层

公式解释:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)

QUOTE:
以下是引用wangshp在2006-7-22 9:23:53的发言:

能解释一下这个公式的具体意思及思路吗?有点没看明白。谢谢

1、截取字符串中的一部分,用函数MID()。

A1="a12345y"

公式最外层是Mid()函数,该函数的格式是:

Mid(文本,开始位置,长度)

对应公式是:

MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1)

2、长度=末位置-首位置+1。

其中MATCH()公式有不同的两个:

文本A1中第1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)

文本A1中最后1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))

两个公式不同之处,在于最后一个逗号。公式什么意思先别管,你只要知道:

长度=最后1个数字的位置-第1个数字的位置+1

本例中:6-2+1=5,数字长度为5。

3、拆散字符串。

下面公式取出字符串中的每一粒字符:

MID(A1,1,1)="a"

MID(A1,2,1)="1"

……

MID(A1,6,1)="5"

MID(A1,7,1)="y"

下面公式返回的是拆散后的一串字符(数组):

MID(A1,{1;2;3;4;5;6;7},1)={"a";"1";"2";"3";"4";"5";"y"}

其中{1;2;3;4;5;6;7}用ROW(INDIRECT("1:"&LEN(A1)))计算所得。

这是数组公式中的一个基本技巧,如果还不懂,请从固顶的帖子中找到并学习它。

在编辑栏中,请用鼠标选取 MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) 然后按F9可以看到上面的结果。

4、0乘以任何数都得0吗?

你一定不会怀疑,因为这是小学老师教的,小学老师是不会骗人的。

呵,不得不破坏一下小学老师的形象了。还是在编辑栏,请继续用鼠标选择:

0*{"a";"1";"2";"3";"4";"5";"y"},或者选择:

0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),按F9,结果显示为:

{#VALUE!;0;0;0;0;0;#VALUE!}。真的不是“都得0”。

里面除了0,还有错误值。个数与原来数组元素的个数相同。

小学老师骗你了吗?没有,小学老师是不骗人的,0乘以任何数还是得0。

因为前后两个"a"和"y",根本不是数,所以返回#VALUE!。

0*{"a";"1";"2";"3";"4";"5";"y"}的目的使结果简单化,数字变0,字符变#VALUE!。

为什么这样做?请听下回分解。

5、Match()会告诉你,第1个0和最后一个0的位置。

第1个0的位置:Match(0,{#VALUE!;0;0;0;0;0;#VALUE!},0)

最后1个0的位置:Match(0,{#VALUE!;0;0;0;0;0;#VALUE!})

如果不明白,请花点时间看一下关于MATCH()的帮助。

这个位置,其实也就是{"a";"1";"2";"3";"4";"5";"y"}中"1"和"5"的位置,也就是"a12345y"中1和5的位置。

现在再返回开头看公式:

Mid(文本,开始位置,长度)

明白了吗?

关于拆解公式,请听听gouweicao78版主的话:

http://club.excelhome.net/viewthread.php?tid=161588

对公式的一点补充:数字、字母混合组合的情况,本公式不适用,如:从"a123b45y"中提取123或45。

几个相关的帖子:

如何分离单位与数值

显示数组中相同的数

12310503这个数从前面去掉重复后是:12305

[此贴子已经被作者于2007-8-14 23:14:50编辑过]

TA的精华主题

TA的得分主题

发表于 2006-8-11 03:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

高明,.长见识了.

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

本版积分规则

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

GMT+8, 2024-11-24 22:15 , Processed in 0.033369 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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