Vba 如何将CLEAN()公式应用于整个Excel工作表?

Vba 如何将CLEAN()公式应用于整个Excel工作表?,vba,excel,Vba,Excel,我有一个Excel文件,几乎有50列和10000行。在某些单元格中包含不可打印的字符;我想从工作表中的所有单元格中删除这些字符 很难将CLEAN()函数应用于每一列。有其他选择吗?我看不见。。如果在单元格文本的末尾看到该字符,则可以使用以下代码找到该值 debug.Print asc(right(range("D1").Value,1)) 只需在下面的代码中用该值替换110即可 Sub Sample() Dim ws As Worksheet '~~> Set this

我有一个Excel文件,几乎有50列和10000行。在某些单元格中包含不可打印的字符;我想从工作表中的所有单元格中删除这些字符


很难将
CLEAN()
函数应用于每一列。有其他选择吗?

我看不见。。如果在单元格文本的末尾看到该字符,则可以使用以下代码找到该值

debug.Print asc(right(range("D1").Value,1))
只需在下面的代码中用该值替换110即可

Sub Sample()
    Dim ws As Worksheet

    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    ws.Cells.Replace What:=Chr(110), Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

是供您参考的ASCII表格。

要在前50列和10000行的每个单元格上应用excel
CLEAN
函数,请执行以下操作:

Sub cleanSheet()
    Dim r As Range
    Application.ScreenUpdating = False
    For Each r In Range(Cells(1, 1), Cells(10000, 50))
        r = WorksheetFunction.Clean(r)
    Next r
    Application.ScreenUpdating = True
End Sub

您只需创建另一张工作表,然后在第一个单元格中,编写干净的公式
=clean('sheet1'!A1)
,然后输入

现在拖动列和行。您将在该表中获得已清理的数据。 也可以用同样的方法使用微调功能


希望这有帮助

谢谢你!这正是我要找的

我注意到在评论中有人呼吁只引用非空单元格。我用它代替了单元格引用,大大缩短了处理时间

For Each r In ActiveSheet.UsedRange

希望这有点帮助。(虽然我来晚了。)

你知道那些
不可打印的字符是什么吗?我的意思是你知道这些字符的ASC代码吗?嗨,西德哈特,我不确定字符t。它们不是ASCII字符。即使我看不见它们,它们看起来像方形盒子和问号之类的抱歉,不知道这些的ASC代码。实际上我看不到它们。它们像新行字符一样出现。但这不是新行字符文件。你可以从这个链接下载文件,你可以查看单元格D1和E1FYI只是为了好玩,我在我的机器上运行了这个,看看需要多长时间;大约花了一个小时。“通过细胞的循环速度可能非常慢。”让·弗朗索瓦·科贝特(Jean-FrançoisCorbett)我的大脑不到一分钟machine@Jean-FrançoisCorbett如果你知道一种将循环限制在非空单元格的方法,我非常感兴趣