excel 替换字符串变量中的多个字符(VBA)

7vhp5slm  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(268)

如何在字符串变量中替换多个内容?
下面是我在VBA中的示例函数:

Private Function ExampleFunc(ByVal unitNr$) As String
    If InStr(unitNr, "OE") > 0 Then
        unitNr = Replace(unitNr, "OE", "")
        unitNr = Replace(unitNr, ";", "")
    End If
...
End Function

有没有更好的解决办法?

abithluo

abithluo1#

您可以使用数组并循环遍历其元素:

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

junk的每个元素可以是子字符串或单个字符。

dz6r00yl

dz6r00yl2#

如果它只是关于几个字符,那么我会去与马可,但在VBA:

unitNr = Replace(Replace(unitNr, "OE", ""), ";", "")
vtwuwzda

vtwuwzda3#

您可以使用正则表达式(AKA regexregexp)!
虽然正则表达式对象在默认情况下不启用,但Automate This提供了一个非常全面的答案,解释了如何启用和使用它们,请访问以下链接:
https://stackoverflow.com/a/22542835/8213085
下面的函数是如何使用RegExp对象替换模式的示例,并通过一个子例程说明如何使用该函数:

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

由于上面链接的答案非常全面,我将不解释如何构造模式--但是我将注意到这个自定义函数可以使用3个参数:

  • sInput:要搜寻的字串
  • sPattern:要搜索的正则表达式模式
  • sReplace:用来替换匹配字符串的可选字符串。默认为空字符串""

示例子例程中使用的模式[a-z]替换了az之间的所有小写字母,即所有小写字母。
如果您只想替换qwerty中的字母(如Gary's Student's answer),则只需提供"[qwerty]"模式:

Private Sub Test()
    Debug.Print RegexReplace("123456qwerty", "[qwerty]")  ' Prints 123456
End Sub

Regex的功能非常强大--我强烈建议您尝试使用它。许多现代软件都开始默认支持它。如果您正在努力找出使用哪种模式,请尝试在以下网页中测试它:
https://regexr.com/

rbl8hiat

rbl8hiat4#

我发现这篇文章很有帮助,所以我想分享一下我是如何利用它的。结合“加里的学生”的公认答案和this comment by Charles Williams,我想出了一个巧妙的方法来删除任何给定字符串中的非数字字符。

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

希望这对某人有帮助,干杯!

eit6fx6z

eit6fx6z5#

我知道这是一个老线程,但这是我正在寻找的,它取代了变量中的多个字符串,而不必使用数组或多行

Dim STARS As String
  STARS = "12ABC34"

  NewSTARS  = Replace(Replace(STARS, "A", ""), "B", "") 

  Output: 12C34

或需要替换的每个字符,只需重复“替换”功能。例如:

Dim STARS As String
  STARS = "12ABC34"

  NewSTARS = Replace(Replace(Replace(STARS, "A", ""), "B", ""), "C", "")
  Output: 1234

replace函数的工作方式与excel中的Forumla完全相同,因此如果您已经创建了一个公式,您可以只将其复制并粘贴到VBA脚本中。

lvmkulzt

lvmkulzt6#

是否必须是VBA?以下公式也适用:

=SUBSTITUTE(SUBSTITUTE("replace","e",""),"a","")

输出将为“rplc”

相关问题