考虑以下VBA功能:
Sub RemoveLetters()
Application.ScreenUpdating = False
Dim str As String: str = "abcdefghijklmnopqrstuvwxyz0123456789 "
Dim ltr As String
For i = 1 To 37
ltr = Mid(str, i, 1)
Sheet9.Range("A2:A1800").Replace _
What:=ltr, Replacement:="", MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
Application.ScreenUpdating = True
End Sub
此函数删除给定字符串中的所有字母和数字字符。但是,我遇到的错误是,只要字符串以非字母,非数字字符串开头,它就无法在该字符串上执行,并且不会在任何其他字符串上执行。也就是说,运行到这样的字符串会停止执行。是否有明显的原因发生这种情况?我该如何修改此代码来修复它?
答案 0 :(得分:2)
对于匹配模式,最佳选项为regular expressions
或更常见的regex
。通过定义要遵循的设置模式,您可以提取或替换几乎任何您想要的模式。
要替换所有非数字和非字母字符以及空格,可以使用以下小功能:
Function NoNormalChar(StrTarget As String) As String
Dim oRegEx As Object
Set oRegEx = CreateObject("vbscript.regexp")
With oRegEx
.Pattern = "[a-zA-Z0-9\s]+"
.Global = True
NoNormalChar = .Replace(StrTarget, "")
End With
End Function
在sub中调用它很简单:
Sub RemoveLetters()
Dim Rng As Range, Cell As Range
Application.ScreenUpdating = False
Set Rng = Sheet9.Range("A2:A1800")
For Each Cell In Rng
Cell.Value = NoNormalChar(Cell.Value)
Next Cell
Application.ScreenUpdating = True
End Sub
将两者复制并粘贴到单个模块中。运行备份副本,让我们知道结果。