如何从大型数据集中删除特定字符

tla*_*law 3 excel vba excel-vba

我正在清理一大堆充满符号字符的数据.!@%^&*|'~<>?·并希望一次删除它们.下面的脚本似乎有效地这样做,然后它继续删除工作簿的全部内容.

Sub Removeforeigncharacters()
  Dim ForeignChars As String
  Dim RegChars As String

  ForeignChars = "!@%^&*|`~<>?·"
  RegChars = ""
  Set MyRange = ActiveSheet.UsedRange

  Dim A As String * 1
  Dim B As String * 1
  Dim i As Integer

  For i = 1 To Len(ForeignChars)
    A = Mid(ForeignChars, i, 1)
    B = Mid(RegChars, i, 1)
    MyRange.Replace What:=A, Replacement:=B, LookAt:=xlPart, MatchCase:=False
  Next
End Sub
Run Code Online (Sandbox Code Playgroud)

Com*_*ern 5

所述What的参数Range.Replace使用*作为通配符,这意味着它将每一个字符匹配(和它们代替它们).请注意,这在技术上不会删除字符,因为您使用的是固定长度的字符串 - 它会用空格替换它们,因为代码...

B = Mid(RegChars, i, 1)
Run Code Online (Sandbox Code Playgroud)

...总是会产生一个空间.

如果您需要搜索文字*而不是通配符匹配,则需要转义它们:

  Dim A As String
  Dim i As Integer

  For i = 1 To Len(ForeignChars)
    A = Mid(ForeignChars, i, 1)
    If A Like "[~*?`]" Then A = "~" & A
    MyRange.Replace What:=A, Replacement:=vbNullString, LookAt:=xlPart, MatchCase:=False
  Next
Run Code Online (Sandbox Code Playgroud)

(我可能错过了一些需要逃避的事情).

请注意,如果您这样做,则不能将其声明A为固定长度的字符串(无论如何,确实没有令人信服的理由).