ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 从文字中提取数字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-5 21:44 | 显示全部楼层
=MID(A2,FIND("部",A2)+1,IF(CODE(MID(A2,FIND("部",A2)+5,1))<=122,5,4))
如果"部"后面第5个是数字或字母,就取5位,否则取4位。但如果有6位编码就失效了。

TA的精华主题

TA的得分主题

发表于 2018-7-5 23:46 | 显示全部楼层
用vba无论多少字一点不错
Sub aa()
rw = Sheet1.Cells(Rows.Count, 1).End(3).Row
ar = Sheet1.Range("a2:a" & rw)
a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
For i = 1 To UBound(ar)
    t = "": z = 0: q = 0
    For j = Len(ar(i, 1)) To 1 Step -1
        b = Mid(ar(i, 1), j, 1)
        c = InStr(a, b)
        If c <> 0 Then
            z = j
            Exit For
        End If
    Next
    For k = z - 1 To 1 Step -1
        b = Mid(ar(i, 1), k, 1)
        c = InStr(a, b)
        If c = 0 Then
            q = k + 1
            Exit For
        End If
    Next
    If z > 0 And q > 0 Then ar(i, 1) = Mid(ar(i, 1), q, z - q + 1) Else ar(i, 1) = ""
Next
Sheet1.Range("c2").Resize(UBound(ar), 1) = ar
End Sub

TA的精华主题

TA的得分主题

发表于 2018-8-29 16:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 吕雄瑞 于 2018-8-29 16:41 编辑

=LEFT(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2),2*LEN(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2))-LENB(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2)))

TA的精华主题

TA的得分主题

发表于 2018-8-29 16:40 | 显示全部楼层
LEFT(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2),2*LEN(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2))-LENB(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2)))

TA的精华主题

TA的得分主题

发表于 2018-8-29 16:56 | 显示全部楼层
吕雄瑞 发表于 2018-8-29 16:40
LEFT(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2)-2),2*LEN(MID($A2,FIND("部",$A2)+1,2*LEN(A2)-LENB(A2 ...

你这公式,看着好累人。

不如用一个小工具,查找、替换一下就解决了:

超级替换88.gif

TA的精华主题

TA的得分主题

发表于 2018-8-29 17:25 | 显示全部楼层
ggmmlol 发表于 2018-8-29 16:56
你这公式,看着好累人。

不如用一个小工具,查找、替换一下就解决了:

\d+月|\W+  这是什么意思呀

TA的精华主题

TA的得分主题

发表于 2018-8-29 17:37 | 显示全部楼层
本帖最后由 zhang6029 于 2018-8-29 17:42 编辑

=正则表达式(A2,"\d+\w+")
按Alt+F11进入Excel的VBE环境,依次选择“工具/引用”菜单,选择“Microsoft VBScript Regular Express”
Option Explicit

Function 正则表达式(rng As Range, exp) As String
    Dim Reg As New RegExp
    Dim ms As MatchCollection
    Dim m As Match

    With Reg
    .Global = True
    .Pattern = exp
    End With
    Set ms = Reg.Execute(rng)
        For Each m In ms
            正则表达式 = m.Value
        Next
End Function

TA的精华主题

TA的得分主题

发表于 2018-8-29 17:43 | 显示全部楼层
吕雄瑞 发表于 2018-8-29 17:25
\d+月|\W+  这是什么意思呀

这是 正则表达式 的表示方法。其中:
\d:代表任意1个数字字符,是[0-9]的简略写法;
\w:代表任意1个 数字、英文字母 或 下划线,即[0-9a-zA-Z_]的简略写法

\D和\W分别是\d和\w的反集,即
\D:代表任意1个非数字字符,是[^0-9]的简略写法
\W: 代表任意1个 数字、英文字母 或 下划线的字符,是[^0-9a-zA-Z_]的简略写法。本例子中,因为符合这个条件的字符都是汉字,即相当于汉字 [一-龥]

+:对前面出现的内容做次数上的限定:1次或以上,是{1,}的简略写法。
|:是正则表达式中表示 “或”的逻辑运算符。

本例子中,综合解释为:
把 xx月 或 所有汉字, 都 替换为 (空)。


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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 17:33 , Processed in 0.028977 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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