VBA:删除所有特殊字符的函数

Taw*_*awm 0 excel vba

我已经为此寻找了一些解决方案,但无法找到可以直接使用的东西。因此,通过尝试编辑别人的代码供我自己使用,我遇到了一个问题。

我正在尝试使用该线路RemoveSpecialChars("$C$1"),但出现Object required错误。

函数如下:

Function RemoveSpecialChars(ByVal mfr As Range)

    Const splChars As String = "!@#$%^&()/"
    Dim ch As Characters

    For Each ch In splChars
    mfr.Replace What:=ch, Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    Next ch

End Function
Run Code Online (Sandbox Code Playgroud)

这是一个简单的问题,但是“$C$1”不被认为是一个范围吗?

感谢您的帮助。

编辑:如果我使用Function RemoveSpecialChars(mfr As Range)(不带ByVal),则会收到Type mismatch错误。

这进一步让我相信“$C$1”不被视为一个范围。

编辑2:

@sous2817

这就是我设置mfr与您的函数一起使用的字符串的方法。

Range("C1").FormulaR1C1 = mfr
Run Code Online (Sandbox Code Playgroud)

这就是我尝试应用它的方式。

Range("C1").FormulaR1C1 = RemoveSpecialChars(C1)
Run Code Online (Sandbox Code Playgroud)

sou*_*817 5

不要传递“$”。这对我有用:

=RemoveSpecialChars(C1)
Run Code Online (Sandbox Code Playgroud)

现在,这带来了其他问题,因为代码无法执行您希望它执行的操作,因为您只能迭代集合和数组,而不能迭代字符串。

试试这个(我确信可以清理,但希望能让你朝着正确的方向前进):

Function RemoveSpecialChars(ByVal mfr As Range)

    Dim splChars As String
    Dim ch As Variant
    Dim splCharArray() As String

    splChars = "! @ # $ % ^ & () /"

    splCharArray = Split(splChars, " ")


    For Each ch In splCharArray
    mfr.Replace What:=ch, Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    Next ch
    RemoveSpecialChars = mfr

End Function
Run Code Online (Sandbox Code Playgroud)

如果您从子系统中调用此函数,则应该限定您的范围引用,这是一种方法:

Sub test()

    Dim test As String

    test = RemoveSpecialChars(Sheet1.Range("C1"))

    Debug.Print test

End Sub
Run Code Online (Sandbox Code Playgroud)

由于问题更新。这是填充公式的另一种方法:

Sub test2()
    Sheet1.Range("D1").Formula = "=RemoveSpecialChars(C1)"
End Sub
Run Code Online (Sandbox Code Playgroud)

好的,最后一次编辑。如果您想保留字符串并创建一个删除特殊字符的字符串,则应该采取稍微不同的方法。这是一种方法:

Function RemoveSpecialChars(mfr As Range)

    Dim splChars As String
    Dim ch As Variant
    Dim splCharArray() As String
    Dim newString As String

    newString = mfr.Value

    splChars = "! @ # $ % ^ & () /"

    splCharArray = Split(splChars, " ")


    For Each ch In splCharArray
        newString = Replace(newString, ch, "")
    Next ch

    RemoveSpecialChars = newString

End Function
Run Code Online (Sandbox Code Playgroud)