ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] [求助]文本中提金额

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-9-3 22:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:拆分和提取
QUOTE:
以下是引用xj4587在2008-9-3 20:07:20的发言:

暂时支持不到小数。金额不可写第一位,相当经典


改一下就支持小数了,支持小数2位则公式改为:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"0.00;;;!0"))

支持负数,则改为:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"0.00;-0.00;;!0"))

[此贴子已经被作者于2008-9-3 23:08:28编辑过]

TA的精华主题

TA的得分主题

发表于 2008-9-3 23:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用xj4587在2008-9-3 20:07:20的发言:

暂时支持不到小数。金额不可写第一位,相当经典


这个问题是可以很容易解决的:

=SUM(--TEXT(MID(TEXT(MID(SUBSTITUTE("我"&B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"0.00;;;!0"))

[此贴子已经被作者于2008-9-3 23:13:07编辑过]

TA的精华主题

TA的得分主题

发表于 2008-9-4 00:03 | 显示全部楼层

宏表函数的解法:

定义名称:zz=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE($b2,"元",""";"""),"罚",""";""")&"""}")

单元格公式(支持2位小数及负数):

=SUM(IF(ISNUMBER(--zz),--zz)) ——数组公式

或: =SUMPRODUCT(--TEXT(zz,"0.00;-0.00;;!0"))

TA的精华主题

TA的得分主题

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

哪位版主能好好讲解这一道公式嘛?我觉得这公式用得很巧妙啊,但很难理解啊!山版主出来讲解一下!

TA的精华主题

TA的得分主题

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

文本中提金额

x.f.zhao学习,写出这么好的公式。

公式中的15是为了适应15位长度的数字,为了解释的方便,现将它改小一点,本问题中,假如罚金不超过千元,含小数最大为6位数:

B2:18日未关挡车门处罚30.05元,20日爬车处罚123元,

C2=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7),),2,6),"0.00;;;!0"))

1、把“元”替换成足够长度的空格,使后续步骤中能够从文本中截取出纯数字字符串。

在编辑栏中,按如下所示选取文本,按F9,可得到处理后的结果:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7),),2,6),"0.00;;;!0"))

结果为:"18日未关挡车门处罚30.05     ,20日爬车处罚123     ,"

2、从文本的每一位开始,向后截取7位字符

B列中最长文本为29,替换空格后,不超过40,所以,公式中使用参数ROW($1:$40)。实际使用中,可设置一个足够大的数字,如99或200等。

MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7)得到的结果是:

"18日未关挡车";

"8日未关挡车门";

"日未关挡车门处";

…… ……

"处罚30.05";

"罚30.05 ";

"30.05  ";

"0.05   ";

".05    ";

"05     ";

"5     ,";

"     ,2";

"    ,20";

"   ,20日";

"  ,20日爬";

" ,20日爬车";

",20日爬车处";

"20日爬车处罚";

…… ……

3、忽略数字,保留文本

这一步是本公式最为精彩的部分,我们一定要慢慢品味。

请跟我一起动手操作:

选择E1:E40,输入公式:

=MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7)

按Ctrl+Shift+Enter结束。

选择F1:F40,输入公式:

=TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7),)

同样按Ctrl+Shift+Enter结束。

QUOTE:

公式中,省略了TEXT()的第二个参数:

=TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7),";")

结果如下所示:

18日未关挡车18日未关挡车
…… ………… ……
处罚30.05处罚30.05
罚30.05 罚30.05 
30.05   
0.05    
.05     
05      
5     5    
     ,2     ,2
…… ………… ……

为什么这样做?下一步才是豁然开朗。

这么好的办法,我是想不出来的。

4、让鱼浮出水面

注意观察一下,以上结果中,第二位开始是数字的,仅有两个:“罚30.05 ”和“罚123  ”,抓住了这两个数,几乎接近最后目标了。用Mid()将40个文本处理一下,从第2位开始,取6位。

可在工作表中按以上办法演示一遍。

G1:G40=MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",5)),ROW($1:$40),7),),2,6)

5、去粗取精,结尾仍是精彩的构成部分

外层的TEXT(),保留数值,把文本以0替换,为SUMPRODUCT()正确求和提供了保证。

相信大家能很好领会这个函数的作用。

如果以金额开头,这个金额将会被忽略,道理你一定明白。如果问题不会有这种情况,可以不考虑它。这是题外话。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-9-4 11:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用xj4587在2008-9-3 20:07:20的发言:

暂时支持不到小数。金额不可写第一位,相当经典


小数,负数的问题,版主们已经解决。

金额第一位,是这意思:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE("☆"&B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"0;;;!0"))

TA的精华主题

TA的得分主题

发表于 2008-9-4 11:45 | 显示全部楼层

这个函数真是写得好,方法巧妙,好好学习。

如果不会写公式的时候老板还催的话,我觉得可以这样处理:复制这一列,然后分列,按照分隔符"罚",这样就分成两列了,然后选中这两列,查找替换"元*"为空,这样就可以只剩下数字了。

TA的精华主题

TA的得分主题

发表于 2008-9-4 11:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

8楼公式可以解释下么?

TA的精华主题

TA的得分主题

发表于 2008-9-4 13:54 | 显示全部楼层
支持小数,负数问题公式:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"[<>]G/通用格式;;;!0"))

[此贴子已经被作者于2008-9-4 18:23:33编辑过]

TA的精华主题

TA的得分主题

发表于 2008-9-4 16:01 | 显示全部楼层

支持小数、负数:

=SUMPRODUCT(--TEXT(MID(TEXT(MID(SUBSTITUTE(B2,"元",REPT(" ",15)),ROW($1:$99),15),),2,15),"G/通用格式;-G/通用格式;;!0"))

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

本版积分规则

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

GMT+8, 2024-4-28 10:59 , Processed in 0.047382 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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