wal*_*man 4 excel vba replace spaces trim
如何从包含文本字符串的大范围单元格中更快地删除多余的空格?
假设有 5000 多个单元格。
我尝试过的一些方法包括:
For Each c In range
c.Value = Trim(c.Value)
Next c
Run Code Online (Sandbox Code Playgroud)
和
For Each c In range
c = WorksheetFunction.Trim(c)
Next c
Run Code Online (Sandbox Code Playgroud)
和
For Each c In range
c.Value = Replace(c.Value, " ", " ")
Next c
Run Code Online (Sandbox Code Playgroud)
任何提高速度的想法?
Jvd*_*vdV 14
聚会迟到了,但是...
不需要遍历单元格/值,也不需要递归函数来搜索和替换范围内的多个空格。
Application.Trim 实际上会处理单词之间的多个空格(并将修剪前导/尾随空格),在单词之间保留单个空格完好无损。
关于它的伟大之处在于,您可以在一次扫描中为函数提供全范围(或数组)以执行此操作!
Sub Test()
Dim rng As Range
Set rng = Sheets("Sheet1").Range("A1:A3")
rng.Value = Application.Trim(rng)
End Sub
Run Code Online (Sandbox Code Playgroud)
需要考虑的一件事是,通过这种方式,您将使用其值覆盖位于目标范围内的任何公式。但是根据您的问题,您使用的是Range包含文本值的对象。只是不需要迭代=)
循环正在杀死你。这将一次性删除整列中的空格:
Sub SpaceKiller()
Worksheets("Sheet1").Columns("A").Replace _
What:=" ", _
Replacement:="", _
SearchOrder:=xlByColumns, _
MatchCase:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
调整范围以适应。如果你想删除双空格,那么:
Sub SpaceKiller()
Worksheets("Sheet1").Columns("A").Replace _
What:=" ", _
Replacement:=" ", _
SearchOrder:=xlByColumns, _
MatchCase:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑#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
Run Code Online (Sandbox Code Playgroud)
您可以重新运行,直到看到完成为止
编辑#2:
根据Don Donoghue的评论,此版本将递归运行,直到所有双精度数都转换为单精度数:
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
Run Code Online (Sandbox Code Playgroud)