【发布时间】:2021-05-13 09:42:50
【问题描述】:
我有一个小代码可以在一列中格式化电话号码,从某种意义上说: -如果中间有空格,则将其删除 - 之后,从右边开始取 9 个数字,并检查它是否为整数,如果是,则将其放入单元格中。
问题是完成所有替换需要将近 6-7 秒(3000 个单元格,其中大部分是空白的)。请知道如何加快速度?
非常感谢
targetSheet.Columns("M:M").Cells.Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
For i = 2 To targetSheet.Range("M" & Rows.Count).End(xlUp).Row
If Len(targetSheet.Cells(i, 13).Value) > 9 Then
Phone = Right(targetSheet.Cells(i, 13).Value, 9)
If IsNumeric(Phone) = True Then
targetSheet.Cells(i, 13).Value = Phone
Else
targetSheet.Cells(i, 13).Value = ""
End If
End If
Next i```
【问题讨论】:
-
哪一部分?替换?还是for循环?看起来您的 for 循环正在跳过长度小于九的单元格,应该跳过空白。注意:您可以从任何看到它的地方删除
= True。这是双重评价。模式是If Boolean Then。 -
每次写入工作表都会提示重新计算相关单元格,在写入单元格时,Excel 会尝试在两个 VBA 指令之间插入以重新绘制工作表 - 您可以“加快”通过在循环之前关闭重新计算和重新绘制,然后再将它们重新打开来执行代码。请参阅
Application.Calculation和Application.ScreenUpdating。如果您正在运行Worksheet_Change事件处理程序,请也禁用事件(请参阅Application.EnableEvents)。 -
非常好,非常感谢!
-
仅供参考,您可能会发现将 几乎 个电话号码删除的条目令人沮丧,因为它们不是“完美的”,没有机会更正它们,因此最好突出问题条目而不是删除它们?
-
嗨蒂姆,你完全正确。非常感谢您指出这一点