VBA绝对宏取胜

时间:2016-06-22 22:14:07

标签: vba excel-vba excel

我正在尝试使选择的单元格列都为正数。我创建了这个宏,它正在工作....只需要一段时间。它现在已经运行了大约5分钟。请注意,我确实有200k行的数据供它搜索...其他人之前有这个问题或想法下次更快吗?

Sub Positive()
Dim Cel As Range
For Each Cel In Selection 
If IsNumeric(Cel.Value) Then
Cel.Value = Abs(Cel.Value)
End If
Next Cel 
End Sub

2 个答案:

答案 0 :(得分:4)

尝试一下,让我知道性能如何:

Option Explicit

Sub Positive()

Dim varArray As Variant
Dim lngRow As Long, lngColumn As Long

varArray = Selection.Value2
For lngRow = LBound(varArray, 1) To UBound(varArray, 1)
    For lngColumn = LBound(varArray, 2) To UBound(varArray, 2)
        If IsNumeric(varArray(lngRow, lngColumn)) Then
            varArray(lngRow, lngColumn) = Abs(varArray(lngRow, lngColumn))
        End If
    Next lngColumn
Next lngRow
Selection.Value2 = varArray

End Sub

答案 1 :(得分:1)

我认为您可以将范围保存到数组中,然后处理数组并将其写回范围,未经测试但应该关闭。

Dim myArr() As Variant
myArr = Range("A1:A10")
Dim iCount As Long
For iCount = LBound(myArr) To UBound(myArr)
   myArr(iCount) = abs(myArr(iCount))
Next iCount
Range("A1:A10") = myArr