Excel 循环并用一个空格替换两个或多个空格

Excel 循环并用一个空格替换两个或多个空格,excel,vba,Excel,Vba,我想替换A1:K1000范围内单元格中的所有多个空格。因此,如果有两个或多个空格,则将其替换为一个空格 我的当前代码将替换2个空格。如何调整它以使用2个或更多空间?因此,它将处理诸如、等情况 这是我的密码: Sub RemoveSpaces() Dim r1 As Range Set r1 = ActiveSheet.Range("A1:K1000") r1.Replace _ What:=Space(2), _ Replacement:=" ", _ S

我想替换A1:K1000范围内单元格中的所有多个空格。因此,如果有两个或多个空格,则将其替换为一个空格

我的当前代码将替换2个空格。如何调整它以使用2个或更多空间?因此,它将处理诸如、等情况

这是我的密码:

Sub RemoveSpaces()

Dim r1 As Range
Set r1 = ActiveSheet.Range("A1:K1000") 
r1.Replace _
      What:=Space(2), _
      Replacement:=" ", _
      SearchOrder:=xlByColumns, _
      MatchCase:=True
Set r1 = r1.Find(What:=Space(2))
If Not r1 Is Nothing Then
   Call RemoveSpaces
End If
End Sub

因此,从Scott Craner的评论来看,这个问题的解决方案似乎是:

Sub RemoveSpaces()

    Dim A As Range

    Set A = ActiveSheet.Range("A1:K1000") 

    For Each cell In A
    cell.Value = WorksheetFunction.Trim(cell)
    Next

End Sub

因此,从Scott Craner的评论来看,这个问题的解决方案似乎是:

Sub RemoveSpaces()

    Dim A As Range

    Set A = ActiveSheet.Range("A1:K1000") 

    For Each cell In A
    cell.Value = WorksheetFunction.Trim(cell)
    Next

End Sub

无需循环单元格:


无需循环单元格:


循环单元格并使用Application.Trim可能的重复请参阅重复目标中的递归方法。或者调整其他答案之一。在任何情况下,这都是以前尝试过的,并且已经提出了多种解决方案。注意-将调用RemoveSpaces_3更改为RemoveSpaces以递归调用也是不推荐的。看起来像是重复的,但实际上在提供的链接中,只有特定情况下包含替换。我已经有了这种代码,它用两个空格来覆盖case。但是,我需要删除所有多个空格->两个或更多。Scott Craner的解决方案看起来不错。我必须尝试对单元格进行循环,并使用Application.trim。可能的重复请参见重复目标中的递归方法。或者调整其他答案之一。在任何情况下,这都是以前尝试过的,并且已经提出了多种解决方案。注意-将调用RemoveSpaces_3更改为RemoveSpaces以递归调用也是不推荐的。看起来像是重复的,但实际上在提供的链接中,只有特定情况下包含替换。我已经有了这种代码,它用两个空格来覆盖case。但是,我需要删除所有多个空格->两个或更多。Scott Craner的解决方案看起来不错。我必须尝试一下,这可能也是对dupe目标的一个回答,这很好。我不知道它是否应该发布在那里,但乍一看,它似乎比公认的答案要好。注意,这绝对是一个骗局,尽管有相反的说法:尽管。。。如果涉及公式,替换可能会更好,我仍然需要测试。我的评论是它会用值覆盖公式=这是一个转换为文本的测试:只是一个警告。@BigBen,我明白了。同意!不管怎样,我的答案现在也在上面。我会记下来,它会用它的值覆盖公式结果。这可能也是对dupe目标的回答,这很好。我不知道它是否应该发布在那里,但乍一看它似乎比公认的答案要好。注意,这绝对是一个骗局,尽管有相反的说法:尽管。。。如果涉及公式,替换可能会更好,我仍然需要测试。我的评论是它会用值覆盖公式=这是一个转换为文本的测试:只是一个警告。@BigBen,我明白了。同意!不管怎样,我的答案现在也在上面。将写下一个注释,它将用它的值覆盖公式结果