如何用excel中的VBA的正则表达式提取出字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用excel中的VBA的正则表达式提取出字符串?相关的知识,希望对你有一定的参考价值。

比如字符串“柴塘河节制闸3300×4960平面钢闸门”
我想得到3300余4960这两个整数,不知道如何提取.
如何用正则表达式提取呢?

1、首先打开需要编辑的Excel表格,进入到编辑页面中。

2、然后点击打开主菜单栏开发工具中的“Visual Basic”选项。

3、还可以鼠标右键单击工作标签,选择打开“查看代码”。

4、然后在弹出来的窗口中点击输入:

Function REFIND(str, re)

    Dim Reg As New RegExp

    With Reg

    .Global = True

    .Pattern = re

    Set matchs = .Execute(str)

        For Each Match In matchs

            y = y & " " & Match

        Next

    End With

    'MsgBox y

    REFIND = y

End Function

5、然后运行就可以得到结果了。

参考技术A

软件版本:Office2007

方法如下:

1.利用正则表达式,提取A列的数字,并对数字求和:

2.Alt+F11,输入代码如下:

3.F5执行代码,返回Excel,得到结果:

参考技术B Sub RegTest()
    Dim oRegExp As Object
    Dim oMatches As Object
    Dim sText As String
    sText = "柴塘河节制闸3300×4960平面钢闸门"
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        .Pattern = "\\D+(\\d+)\\D+(\\d+)\\D+"
        Set oMatches = .Execute(sText)
        Debug.Print oMatches(0).submatches(0)    '第一个数
        Debug.Print oMatches(0).submatches(1)    '第二个数
    End With
    Set oRegExp = Nothing
    Set oMatches = Nothing
End Sub

程序中sText字符串来源可以从单元格赋值,

Debug.Print可以将两个数改为赋值给两个变量。

追问

假设两个变量分别赋值给BBB与HHH,应该如何完整的写代码?

追答

Debug.Print oMatches(0).submatches(0) '第一个数
Debug.Print oMatches(0).submatches(1) '第二个数
改成:
BBB=oMatches(0).submatches(0)
HHH=oMatches(0).submatches(1)
就行了,
可以对数据进行计算,如:
乘积=BBB*HHH

本回答被提问者采纳
参考技术C Sub t()
s = "柴塘河节制闸3300×4960平面钢闸门"
Set regxp = CreateObject("vbscript.regexp")
With regxp
.Global = True
.Pattern = "\d+"
For Each m In .Execute(s)
Debug.Print m
Next
End With
End Sub追问

具体的代码呢?

追答Sub t()
s = "柴塘河节制闸3300×4960平面钢闸门"
Set regxp = CreateObject("vbscript.regexp")
With regxp
    .Global = True
    .Pattern = "\\d+"
    For Each m In .Execute(s)
        Debug.Print m
    Next
End With
End Sub

如何用EXCEL VBA批量提取JPG文件日期时间信息到表格中?

我的工作中需要每天制作一个检查表,表中列出当天拍摄的所有照片(每天照几十张,并一一按照片内容改好名字,并存在一个文件夹内)的名称、拍照日期,同时照片插入到名称单元格的批注内。主要问题我用VBA已经解决了,就是不能自动读取并插入JPG文件的日期时间信息。可有高手帮忙,感激不尽。

使用这个函数吧,可以得到文件的 创建时间 或 最后修改时间:
-------------------------
Function iFileDate(iPh, n)
' 参数说明:
' iph 文件路径。
' n 时间类型。 1 为 创建时间;2 为 最后修改时间
If Dir(iPh) = "" Then Exit Function
Dim fs: Set fs = CreateObject("Scripting.FileSystemObject")
Dim f: Set f = fs.GetFile(iPh)
If n = 1 Then iFileDate = f.DateCreated
If n = 2 Then iFileDate = f.DateLastModified
End Function
---------------------

具体使用方法举例:
---------------
Sub iTest()
Dim iPh, iDate1, iDate2
iPh = "G:\D baiduHi\VBA 文件操作\a.xls"
If Dir(iPh) = "" Then
MsgBox "下面的文件不存在:" & vbCrLf & iPh, vbCritical
Exit Sub
End If
iDate1 = "  创建时间:" & vbTab & iFileDate(iPh, 1)
iDate2 = "最后修改时间:" & vbTab & iFileDate(iPh, 2)
MsgBox iPh & vbCrLf & iDate1 & vbCrLf & iDate2
End Sub追问

需做一定修改,你这个函数是非常好用的。

参考技术A 用VBA我不会,但可以建一个批处理文件(*.bat),里面就一条命令
dir>list.xls
(说明:list 可以其他字符)
将.bat文件复制到相应的文件夹内,双击运行,就能将文件名及日期时间信息读到《list.xls》文件内。然后打开该文件,用分列的方法将文件名、日期、时间分放在不同单元格内。
参考技术B 创建一个FileSystemObject,然后getfile(),.datecreated就是文件创建时间,datelastmodified就是文件修改日期,datelastaccessed就是文件访问时间。。 参考技术C 去文库找以下文件

批量提取JPG文件名拍摄时间并插入图片到批注本回答被提问者采纳

以上是关于如何用excel中的VBA的正则表达式提取出字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何用EXCEL VBA批量提取JPG文件日期时间信息到表格中?

excel VBA匹配,这是我写的正则表达式:

如何用excel vba按关键字选择性的遍历文件夹搜索文件?

Excel 如何用VBA提取当前电脑的硬件信息

正则表达式提取数字

请问,在Excel中如何用VBA提取数据后保留原格式不变?