我正在尝试通过摆脱任何非标准字符来清理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 & "))")