【问题标题】:Loop and replace two or more spaces with only one循环并仅用一个替换两个或多个空格
【发布时间】:2020-02-15 14:30:18
【问题描述】:

我想替换A1:K1000 范围内单元格中的所有多个空格。因此,如果有 2 个或更多空格,则将它们替换为 1 个空格 " "

我当前的代码替换了" " (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

【问题讨论】:

  • 循环单元格并使用Application.Trim
  • 查看 dupe 目标中的递归方法。或调整其他答案之一。无论如何,这之前已经尝试过,并且提出了多种解决方案。
  • 注意 - 将 Call RemoveSpaces_3 更改为 RemoveSpaces 以递归(Call 也已弃用)。
  • 看起来像重复,但实际上在提供的链接中,只有特定情况被替换。我已经有这种用两个空格覆盖大小写的代码。但是我需要删除所有多个空格-> 两个及更多。 Scott Craner 的解决方案看起来不错。我得试试

标签: excel vba


【解决方案1】:

无需循环单元格:

Sub Test()

Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1:A3")
rng.Value = Application.Trim(rng)

End Sub

【讨论】:

  • 这也应该是对欺骗目标的回答,太好了。
  • 我不知道它是否应该张贴在那里,但乍一看似乎比接受的答案更好。请注意,这绝对是一个骗局,尽管有相反的说法:)
  • 虽然...如果涉及公式,替换可能会更好,我仍然需要测试。
  • 我的评论是它用值覆盖了公式...="This is a test" 被转换为文本:( 只是一个警告。
  • @BigBen,我明白了。同意!不管怎样,我的答案现在也在上面。会记下一个注释,它将用它的值覆盖公式结果
【解决方案2】:

所以从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多