我从一系列的单元中删除字符。 我如何阻止它循环?

我试图自动化一些我经常用来学习VBA的方法。 我正在写一个代码,select工作表中的所有单元格,并删除某处出现的某个字符。 在我的情况下,我从string中删除双重空格。

我使用的代码做的工作,并删除双空间,但它继续循环似乎是无限期的时间。

Dim celref As String Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select For Each c In Range(Selection, ActiveCell) celref = c.Value Do While InStr(1, celref, " ") Selection.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Loop Next c End Sub 

假设你不想保留前导/尾随空格,你可以这样做:

 c.Value = application.trim(c.Value) 

摆脱.Select语句,他们正在触发不需要的进程。

 For Each c In Range("A1", SpecialCells(xlLastCell)).Cells With c While InStr(.Value, " "): .Value = Replace(.Value, " ", " "): Wend End With Next 

编辑: 刚注意到罗里的答案,更有效和更快。 我将以此为例。

这是伟大的,完美的作品。

 Sub Removestuff() Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select For Each c In Range(Selection, ActiveCell) c.Value = Application.Trim(c.Value) Next c End Sub