我正在尝试通过摆脱任何非标准字符来清理Excel中的.CSV文件。我唯一要保留的字符是A-Z,0-9和一些标准的标点符号。其他任何字符,我想删除。

当找到包含未指定字符的单元格时,我已经获得了下面的宏来删​​除整行,但是我不确定如何获取它来实际删除字符本身。

Sub Replace()
Dim sCharOK As String, s As String
Dim r As Range, rc As Range
Dim j As Long

sCharOK = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789, `~!@#$%^&*()_+-=[]\{}|;':"",./<>?™®"

Set r = Worksheets("features").UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)

' loop through all the cells with text constant values and deletes the rows with characters not in sCharOK
For Each rc In r
    s = rc.Value
    For j = 1 To Len(s)
        If InStr(sCharOK, Mid(s, j, 1)) = 0 Then
            rc.EntireRow.Delete
            Exit For
        End If
    Next j
Next rc

End Sub


我认为有一种相当简单的方法可以使此代码适应该功能,但是我对VBA不够熟悉,无法真正知道该怎么做。任何见解都将不胜感激!

最佳答案

另一种方式是Range.Replace

Sub test()
  Dim sCharOK As String
  sCharOK = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789, `~!@#$%^&*()_+-=[]\{}|;':"",./<>?™®" & Chr(1)
  Dim i As Long
  For i = 0 To 255
    If InStr(sCharOK, Chr(i)) = 0 Then
      ActiveSheet.Cells.Replace What:=Chr(i), Replacement:="", LookAt:=xlPart, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
    End If
  Next
End Sub


编辑

如果仅需要删除公式,则查看@ ryguy72的答案还提供了另一种方法,如果仅需要删除不可打印的字符(此问题将删除µ²äöüßÉõ之类的东西,但此代码不会删除),则还假定没有公式:

Sub test()
  With ActiveSheet.UsedRange
    .Value = Evaluate("TRIM(CLEAN(" & .Address & "))")
  End With
End Sub


或直接在“即时”窗口中运行此单行代码:

ActiveSheet.UsedRange.Value = Evaluate("TRIM(CLEAN(" & ActiveSheet.UsedRange.Address & "))")

07-28 02:50
查看更多