每天我们都会收到一个包含数据库转储的Excel文件。文件的大部分内容都在我创建的VBA脚本中进行排序,但我还有一个无法解决的问题。在其中一列(A)中,我有时有两个字符串,我只想保留其中的一个。我想要保留的字符串看起来像"M1234 5678“。数字会改变..。该列有时在M1234 5678之前或之后有其他文本。我想删除所有的文本,这样我就只保留所需的字符串。
我已经尝试使用一个搜索函数来解决这个问题,使用trim函数并搜索一个看起来像"M#### ####“的字符串。走这条路就没那么幸运了。我必须承认,两周前,我一直在摆弄下面的代码,因为我当时试图解决的事情可能会搞砸。
Sub TrimText()
Dim FinalValue As String
Dim lastStop As Long
With Sheets("Blad2")
lastStop = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastStop
FinalValue = Trim(Cells(i, 1).Value)
If InStr(FinalValue, "ALQ") > 0 Then
Cells(i, 1).Value = Left(FinalValue, InStr(FinalValue, "M*"))
End If
Next
End With
End Sub我希望删除M#### ####字符串左侧或右侧的任何文本。
谢谢你的帮助。
发布于 2019-05-13 19:57:37
如果字符串长度保持不变,则可以使用正则表达式模式
M\d{4}\s\d{4}这可能看起来像一个函数调用(如果条件被删除)
Option Explicit
Public Sub TrimText()
Dim FinalValue As String, lastStop As Long, i As Long, re As Object
Set re = CreateObject("VBScript.RegExp")
With ThisWorkbook.Worksheets("Blad2")
lastStop = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastStop
FinalValue = Trim(Cells(i, 1).Value)
.Cells(i, 1).Value = ReplaceMatch(re, .Cells(i, 1).Value, "M\d{4}\s\d{4}")
Next
End With
End Sub
Public Function ReplaceMatch(ByVal re As Object, inputString As String, ByVal pattern As String) As String
With re
.Global = True
.MultiLine = True
.pattern = pattern
If .test(inputString) Then
ReplaceMatch = .Execute(inputString)(0)
Else
ReplaceMatch = inputString
End If
End With
End Functionhttps://stackoverflow.com/questions/56111762
复制相似问题