使用VBA for Excel从较大范围的单元格中删除“多余”空格(大于1)的快速方法

问题描述 投票:3回答:5

如何从包含文本字符串的大量单元格中更快地删除多余的空格?

比方说5000多个单元格。

我尝试过的某些方法包括:

For Each c In range
    c.Value = Trim(c.Value)
Next c

For Each c In range
    c = WorksheetFunction.Trim(c)
Next c

For Each c In range
    c.Value = Replace(c.Value, "     ", " ")
Next c

有什么提速建议吗?

excel vba replace trim spaces
5个回答
5
投票

循环正在杀死您。一次删除整个列中的空格:

Sub SpaceKiller()
   Worksheets("Sheet1").Columns("A").Replace _
      What:=" ", _
      Replacement:="", _
      SearchOrder:=xlByColumns, _
      MatchCase:=True
End Sub

调整范围以适合。如果要删除double空格,则:

Sub SpaceKiller()
   Worksheets("Sheet1").Columns("A").Replace _
      What:="  ", _
      Replacement:=" ", _
      SearchOrder:=xlByColumns, _
      MatchCase:=True
End Sub

EDIT#1:

此版本将双打替换为单打,然后检查是否仍然还有双打!

Sub SpaceKiller3()
   Worksheets("Sheet1").Columns("A").Replace _
      What:="  ", _
      Replacement:=" ", _
      SearchOrder:=xlByColumns, _
      MatchCase:=True

   Set r = Worksheets("Sheet1").Columns("A").Find(What:="  ")
   If r Is Nothing Then
      MsgBox "done"
   Else
      MsgBox "please run again"
   End If
End Sub

您可以重新运行,直到看到done

EDIT#2:

基于Don Donoghue的评论,此版本将<>运行,直到所有double都转换为singles:Sub SpaceKiller3() Worksheets("Sheet1").Columns("A").Replace _ What:=" ", _ Replacement:=" ", _ SearchOrder:=xlByColumns, _ MatchCase:=True Set r = Worksheets("Sheet1").Columns("A").Find(What:=" ") If r Is Nothing Then MsgBox "done" Else Call SpaceKiller3 End If End Sub


3
投票
迟到聚会但是...

2
投票
我通常使用

Evaluate


2
投票
它可能取决于很多事情,但就我而言,最快的是一次获取数组中的所有值:

1
投票
您旁边有备用列吗?
© www.soinside.com 2019 - 2024. All rights reserved.