Private Function ExampleFunc(ByVal unitNr$) As String
If InStr(unitNr, "OE") > 0 Then
unitNr = Replace(unitNr, "OE", "")
unitNr = Replace(unitNr, ";", "")
End If
...
End Function
Sub MAIN()
Dim s As String
s = "123456qwerty"
junk = Array("q", "w", "e", "r", "t", "y")
For Each a In junk
s = Replace(s, a, "")
Next a
MsgBox s
End Sub
Private Function RegexReplace( _
ByVal sInput As String, _
ByVal sPattern As String, _
Optional ByVal sReplace As String = "" _
)
Dim regEx As New RegExp
With regEx
.Global = True
.IgnoreCase = False
.Pattern = sPattern
End With
If regEx.Test(sInput) Then
Let RegexReplace = regEx.Replace(sInput, sReplace)
Else
Let RegexReplace = sInput
End If
Set regEx = Nothing
End Function
Private Sub Test()
Debug.Print RegexReplace("a1b2c3", "[a-z]") ' Prints 123
Debug.Print RegexReplace("abc", "[a-z]") ' Prints an empty string
Debug.Print RegexReplace("123", "[a-z]") ' Prints 123
Debug.Print RegexReplace("abc", "a") ' Prints bc
Debug.Print RegexReplace("abc", "a", "b") ' Prints bbc
End Sub
Public Function RemoveNonNumChars(s As String) As String
Dim bytes() As Byte
Dim char As String
bytes = StrConv(s, vbFromUnicode)
For Each c In bytes
char = chr(c)
If Not IsNumeric(char) Then
'remove character from array
s = Replace(s, char, "")
Debug.Print "Removing " & char & " from string." & Chr(13) s
End If
Next c
End Function
6条答案
按热度按时间abithluo1#
您可以使用数组并循环遍历其元素:
junk的每个元素可以是子字符串或单个字符。
dz6r00yl2#
如果它只是关于几个字符,那么我会去与马可,但在VBA:
vtwuwzda3#
您可以使用正则表达式(AKA regex 和 regexp)!
虽然正则表达式对象在默认情况下不启用,但Automate This提供了一个非常全面的答案,解释了如何启用和使用它们,请访问以下链接:
https://stackoverflow.com/a/22542835/8213085
下面的函数是如何使用RegExp对象替换模式的示例,并通过一个子例程说明如何使用该函数:
由于上面链接的答案非常全面,我将不解释如何构造模式--但是我将注意到这个自定义函数可以使用3个参数:
sInput
:要搜寻的字串sPattern
:要搜索的正则表达式模式sReplace
:用来替换匹配字符串的可选字符串。默认为空字符串""
示例子例程中使用的模式
[a-z]
替换了a
和z
之间的所有小写字母,即所有小写字母。如果您只想替换
qwerty
中的字母(如Gary's Student's answer),则只需提供"[qwerty]"
模式:Regex的功能非常强大--我强烈建议您尝试使用它。许多现代软件都开始默认支持它。如果您正在努力找出使用哪种模式,请尝试在以下网页中测试它:
https://regexr.com/
rbl8hiat4#
我发现这篇文章很有帮助,所以我想分享一下我是如何利用它的。结合“加里的学生”的公认答案和this comment by Charles Williams,我想出了一个巧妙的方法来删除任何给定字符串中的非数字字符。
希望这对某人有帮助,干杯!
eit6fx6z5#
我知道这是一个老线程,但这是我正在寻找的,它取代了变量中的多个字符串,而不必使用数组或多行
或需要替换的每个字符,只需重复“替换”功能。例如:
replace函数的工作方式与excel中的Forumla完全相同,因此如果您已经创建了一个公式,您可以只将其复制并粘贴到VBA脚本中。
lvmkulzt6#
是否必须是VBA?以下公式也适用:
输出将为“rplc”