ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教如何提取括号内的数值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-2-27 23:16 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
数值都在括号内,数值前或后有一定规律,如前有“面积”或后有“平方”、“方”、“m2”等,但可能有2个括号,请教如何提取括号内的数值,谢谢!

提取数值.zip

1.66 KB, 下载次数: 49

TA的精华主题

TA的得分主题

发表于 2014-2-27 23:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-2-27 23:43 | 显示全部楼层
直接字符串处理也可以
  1. Function Mynumber(ByVal s As String) As String
  2. Dim t() As String, V() As String
  3. t = Split(Replace(s, "M2", ""), "(")
  4. t(0) = ""
  5. For I = 1 To UBound(t)
  6. t(I) = Split(t(I), ")")(0)
  7. ReDim V(1 To Len(t(I)))
  8. For K = 1 To Len(t(I))
  9. V(K) = Mid(t(I), K, 1)
  10. If Not V(K) Like "[.0123456789]" Then V(K) = ""
  11. Next
  12. t(I) = Join(V, "")
  13. Next
  14. Mynumber = Join(t, "")
  15. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2014-2-27 23:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
see if help you

提取数值 v1.rar

6.54 KB, 下载次数: 45

TA的精华主题

TA的得分主题

发表于 2014-2-28 07:55 | 显示全部楼层
adgfsgfdgsafgdfg

fdfd.rar

9.5 KB, 下载次数: 29

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-2-28 08:35 | 显示全部楼层
  1. Sub t()
  2. Dim rng As Range, s As String
  3. Set ojs = CreateObject("scriptcontrol"): ojs.Language = "jscript"
  4. For Each rng In Range("a1", [a65536].End(3))
  5.   s = Replace(rng.Value, "M2", "")
  6.   rng(1, 2) = ojs.eval("'" & s & "'.match(/\(.*[0-9\.]+.*\)/)[0].match(/[0-9\.]+/)")
  7. Next
  8. Set ojs = Nothing
  9. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-2-28 09:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Public Sub abc()
Dim ar, i, s
ar = Range([a1], [a65536].End(3))
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "\(.*?([\d.]+).*$"
    For i = 1 To UBound(ar)
      ar(i, 1) = .Execute(ar(i, 1))(0).submatches(0)
    Next
End With
[b1].Resize(UBound(ar)) = ar
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-2-28 09:49 | 显示全部楼层
一句话,楼主是需要提取:
【字符串】中,半角、全角不管什么类型的括号【()()】之中的【数值】。

TA的精华主题

TA的得分主题

发表于 2014-2-28 09:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-2-28 10:37 | 显示全部楼层
本帖最后由 香川群子 于 2014-2-28 10:47 编辑
jbjbzjb 发表于 2014-2-28 07:55
adgfsgfdgsafgdfg


你的正则表达式可以简化。

(\(|().*?(\d+\.?\d+).*?()|\))

简化为:
(\(|().*?(\d+\.\d+)

后面部分不需要了。即使输错,少一个括号什么也没关系的。

而简化之前,则要求括号必须完整!


简化前思路:
第1组: (\(|().*?       → 大小左括号 以及附带任意字符直到第2组
第2组: (\d+\.?\d+).*?  → 含小数点的数值  以及附带任意字符直到第3组
第3组: ()|\))           → 大小右括号

简化后思路:
第1组: (\(|().*?       → 大小左括号 以及附带任意字符直到第2组
第2组: (\d+\.?\d+)  → 含小数点的数值为止



提取方法不变,还是:
.Execute(theStr)(0).SubMatches(1)


呵呵。


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

本版积分规则

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

GMT+8, 2024-11-22 20:10 , Processed in 0.053054 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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