ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助!EXCEL数字提取

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-11-3 10:21 | 显示全部楼层
把其中“数字提取 =' Val(sz)”改为“数字提取 = sz ”就行。

Public Function 数字提取(cTxt As String)

    Dim sz$, x$ '声明变量
   
    For i = 1 To Len(cTxt) '循环文本中每一个字符
        x = Mid(cTxt, i, 1) '取出当前位置的字符
        If (x = "%" Or x = "%") And IsNumeric(sz) Then '如果当前字符为%,并且变量sz是数字
            sz = sz / 100 '将数字除以100
            Exit For '然后跳出循环
            
        ElseIf x = "-" Then '如果当前位置上的字符为“-”
            sz = "-" '给变量赋值“-”
            
        ElseIf x = "." Or IsNumeric(x) Then '如果当前字符是“.”或一个数字
            sz = sz & x '将这个字符(“.”或数字)连接在变量 sz 的后面
            If sz <> "-" And Not IsNumeric(sz) Then sz = "" '如果保存结果不是数字,将其清除
        Else '如果当前字符为其它字符
            If IsNumeric(sz) Then Exit For '如果变量 sz 是一个数字,则结束循环
            sz = "" '如果还没提取出数字,将sz清空,继续循环
        End If
    Next
   
    '循环结束后
    If IsNumeric(sz) Then '如果变量 sz 是一个数字
        If Left(sz, 1) = "." Then sz = 0 & sz '如果第一位是小数点,在前面加个0
        数字提取 = sz '将结果赋给函数名,输出到单元格中
    Else '否则(变量 sz 不是一个数字)
        数字提取 = "" '输出一个空文本
    End If
   
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-3 13:05 | 显示全部楼层
啊!原来这样简单就成了,真是大侠。现在这个提取数字的函数的适应力就比较强了,感谢山菊花版主!
另外,我不太懂得编程,顺便想问几个在大家看来可能不是问题的问题:
1. Basic 语言中的 Exit for 是中断此次循环进入下一个循环,还是退出整个循环 ?
2. 几个 If 语句嵌套,是否可以共用一个 End if 结束 ?
3. 有没有 End for 或 Exit if 语句 ?
谢谢!

TA的精华主题

TA的得分主题

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

回复 11楼 makelot 的帖子

1、Exit For 退出本层循环
2、不可以

多层For 循环可以共用一个 Next 结束语句。如:
For i = 1 To 10
For j = 1 To 10
……
Next j, i ’后面用逗号将计数器变量分开
 
3、没有

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-3 15:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看来我原来理解错了,根据您的解答,我把程序的嵌套问题理了一下,不知我分析得对不对,见下面的Word附件。
如果我理解错了,希望能帮我改过来。占用了您太多的时间,真过意不去!

[ 本帖最后由 makelot 于 2008-11-3 15:55 编辑 ]

数字提取VBA.rar

2.95 KB, 下载次数: 30

TA的精华主题

TA的得分主题

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

回复 13楼 makelot 的帖子

理解正确。
编写代码,可用缩进的格式使程序的结构更加分明。选择 For 与对应 Next 之间的所有代码行,按 Tab 或点击菜单“编辑—缩进”。如10楼所示。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-3 18:30 | 显示全部楼层
最想说的只有两个字:佩服!
到此为止这个问题可以说得到了比较圆满的解决,这段时间山菊花斑竹高超的水平、火热的心肠以及旺盛的精力,都给我留下了深刻的印象,也使我学到了不少东西。最后,真诚地说一声:谢谢!

TA的精华主题

TA的得分主题

发表于 2008-11-6 17:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-11-6 17:30 | 显示全部楼层
原帖由 makelot 于 2008-11-1 02:53 发表
见附件,关键是负号,我怎么也搞不定,苦恼ing……
希望大侠出手相助!

不太标准的数组公式(67个字符):
=LOOKUP(9^99,--MID(B5,MATCH(,MID(B5,COLUMN(1:1),2)*0,),ROW($1:15)))

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-6 17:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 wshcw 于 2008-11-6 17:30 发表

不太标准的数组公式(67个字符):
=LOOKUP(9^99,--MID(B5,MATCH(,MID(B5,COLUMN(1:1),2)*0,),ROW($1:15)))

这个公式有一定的杀伤力,不过你再把它用到9楼的附件上试试

TA的精华主题

TA的得分主题

发表于 2008-11-6 18:01 | 显示全部楼层
nbe12.368mnbnbr
冰箱5台
mny-2.358ny
muy0000128nm
n-258cm
021.3698
ID证:130702197611280312
手机:13520189672
电话:008631053820339
就这几个个数据来说提取不成问题,难的是通用,和达到字符的要求。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 18:06 , Processed in 0.042094 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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