vba - For Loop VBA 通过放入数组来加速
问题描述
我正在尝试遍历大约 2000 行数据,并在每个循环中执行一个 for 循环和几个 if 语句。它有效,但现在它非常缓慢。我从我的研究中了解到,如果我可以将数据放入一个数组并在那里对其进行操作,然后将数据放回单元格中会更快,但我可以在编码方面使用一些帮助来做到这一点。这是我的代码。
Sub EliminateVariance()
Dim Old As Long
Dim Older As Long
Dim Oldest As Long
Dim Current As Long
Dim VarianceOld As Long
Dim VarianceNew As Long
Dim VarianceNew1 As Long
Dim VarianceNew2 As Long
Dim Month1 As Variant
Dim SheetName As Variant
Dim LastRow As Long
Dim i As Long
Month1 = InputBox("What is this month?")
SheetName = Month1 & " SummaryByCust"
Worksheets(SheetName).Activate
LastRow = Cells(Rows.count, "B").End(xlUp).row
For i = 3 To LastRow
VarianceOld = Range("V" & i)
Oldest = Range("I" & i)
Older = Range("H" & i)
Old = Range("G" & i)
Current = Range("F" & i)
If VarianceOld > Oldest Then
VarianceNew = VarianceOld - Oldest
Range("I" & i) = 0
If VarianceNew > Older Then
VarianceNew1 = VarianceNew - Older
Range("H" & i) = 0
If VarianceNew1 > Old Then
VarianceNew2 = VarianceNew1 - Old
Range("G" & i) = 0
If VarianceNew2 > Current Then
MsgBox ("Error: Deferred is greater than what it should be. Verify your numbers")
Else
Range("F" & i) = Current - VarianceNew2
End If
Else
Range("G" & i) = Old - VarianceNew1
End If
Else
Range("H" & i) = Older - VarianceNew
End If
Else
Range("I" & i) = Oldest - VarianceOld
End If
Next i
End Sub
解决方案
下面是一个关于如何使用数组的示例:
Sub arrayEx()
'Set the range
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("A1:B20000")
'Bulk load the values from the range into an array
'Even if a single column this will create a 2D array
Dim rngArr As Variant
rngArr = rng.Value
'Loop the "Rows" of the array
Dim i As Long
For i = LBound(rngArr, 1) To UBound(rngArr, 1)
'Do something with that array
'when loaded from a range it is similar nomenclature to Cells: array(row,column)
If rngArr(i, 1) = "A" Then
rngArr(i, 2) = "B"
End If
Next i
'overwrite the values in range with the new values from the array.
rng.Value = rngArr
End Sub
尝试适应您的需求。
推荐阅读
- sharepoint - 在 Microsoft 自定义视觉训练 API 中使用 CreateImagesFromUrls 端点时如何修复“ErrorSource”
- powershell - 等待团队准备就绪
- angular - 角度材质无法在地图获取自定义组件中设置第二个参数
- meteor - 使用 https://app 和 https//www 在 digitalocean 上的 Meteor 应用程序。有时无法提供 https://app
- javascript - 引用函数和调用函数之间的区别( this.myFunc 与 this.myFunc() )
- c# - 我使用 Intent 来增加额外的活动并获得额外的活动,但下一次获得额外的数据是第一次额外增加的数据(对不起,我的英语不好)
- java - 如何修复 BindingContextFactory 导入?
- kotlin - 在 Kotlin 中编译和运行一个简单程序时,我收到错误“no main manifest attribute”
- scala - java.lang.ClassNotFoundException 与 spark-submit
- react-admin - 带有列表的自定义路线