如何用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 Function5、然后运行就可以得到结果了。
参考技术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
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文件日期时间信息到表格中?