这个问题在这里已经有了答案:
Remove non-numeric characters from numeric fields without loop
(3 个回答)
3年前关闭。
我目前从特定列 (AK) 中的单元格中删除所有非数字字符的解决方案需要我的代码 7 分钟才能运行 360 行。当我使用“应用程序选择”运行代码选择所有 360 个单元格时,只需 10 秒即可运行。理想情况下,我希望宏自己选择标准。请注意,数据是通过 excel 从查询中提取的。
我在网上搜索过,但没有发现代码自行选择列的地方。我自己创建的代码需要 7 分钟和 10 秒。
下面的代码需要 7 分钟才能运行,但不需要用户选择数据。
Dim finRow As String
finRow = ActiveSheet.Range("A100000").End(xlUp).Row
Set myRange = ActiveSheet.Range("AK2:AK" & finRow)
For Each myCell In myRange
LastString = ""
For I = 1 To Len(myCell.Value)
mT = Mid(myCell.Value, I, 1)
If mT Like "[0-9]" Then
tString = mT
Else
tString = ""
End If
LastString = LastString & tString
Next I
myCell.Value = LastString
Next
下面的代码需要 10 秒,但用户必须在每次运行代码时选择标准。
Set myRange = Application.Selection
Set myRange = Application.InputBox("select one Range that you want to remove non numeric characters", "RemoveNonNum", myRange.Address, Type:=8)
For Each myCell In myRange
LastString = ""
For I = 1 To Len(myCell.Value)
mT = Mid(myCell.Value, I, 1)
If mT Like "[0-9]" Then
tString = mT
Else
tString = ""
End If
LastString = LastString & tString
Next I
myCell.Value = LastString
Next
当代码自行选择标准时,我希望输出为 10 秒。我感谢所有的帮助。谢谢你,马特
最佳答案
使用变体数组并对其进行迭代。迭代范围很耗时。
Dim finRow As Long
finRow = ActiveSheet.Range("A100000").End(xlUp).Row
Dim myRange() As Variant
myRange = ActiveSheet.Range("AK2:AK" & finRow)
Dim k As Long
For k = LBound(myRange, 1) To UBound(myRange, 1)
Dim lastSring As String
laststring = ""
Dim i As Long
For i = 1 To Len(myRange(k, 1))
Dim mT As String
mT = Mid(myRange(k, 1), i, 1)
If mT Like "[0-9]" Then
laststring = laststring & mT
End If
Next i
myRange(k, 1) = laststring
Next
ActiveSheet.Range("AK2:AK" & finRow).Value = myRange
关于excel - 如何从单元格/列中删除非数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399305/