删除循环,使我的VBAmacros能够运行更多的数据
在我的数据中有超过一千个不同的六位数字,没有特定的模式重现。 我需要find列A中存在的所有六位数字代码和每个数字。 例如123456,然后find列B中的值列A中有123456的每一行的值。我的代码不是很有效,但运行时是不是一个问题,如果我只有10行的运行。 但是,在真实的数据表中有80 000行,我的代码将花费很多时间。 有人可以帮我编辑我的代码,但删除循环内的某些循环或一些停止条件。 我是VBA的新手,不能在有限的时间内自己做。
Sub Test2() Dim summa As Long Dim x As Long Dim condition As Boolean Dim lRows As Long Dim k1 As Integer Dim i As Long x = 1 Worksheets("Sheet1").Activate For i = 100000 To 999999 k1 = 1 lRows = 10 condition = False While k1 <= lRows If Cells(k1, "A").Value = i Then condition = True End If k1 = k1 + 1 Wend If condition = True Then Cells(x, "F").Value = Application.SumIf(Range("A:A"), CStr(i), Range("B:B")) Cells(x, "E").Value = i x = x + 1 End If Next i MsgBox "Done" End Sub
这个任务你不需要VBA。 按着这些次序。
- 在原始数据表的副本中插入一个空白列C.
- 在C2中插入一个SUMIF公式,例如
=SUMIF(A:A, A2, B:B)
,然后一直向下复制。 - 现在所有项目123456在C栏中的总数相同
- 复制C列和粘贴值(用它们的值replace公式)。
- 删除栏B.
- 删除重复项。