EXCEL VBA 代码在运行时速度非常慢???
Sub清收清欠数据处理()'消除计算过程在窗口界面的显示Application.ScreenUpdating=(False)'声明长整数的变量DimA,B,C,D,E,F...
Sub 清收清欠数据处理()
'消除计算过程在窗口界面的显示
Application.ScreenUpdating = (False)
'声明长整数的变量
Dim A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, S, T As Integer
A = Range("E1").Value
B = Range("F1").Value
C = Range("G1").Value
D = Range("H1").Value
F = Range("I1").Value
G = Range("J1").Value
For I = 7 To 7 + A - 1
For J = 7 + A + 1 To 7 + B + A
For K = 7 + A + 2 + B To 7 + B + A + C + 1 Step 3
For L = 7 + A + 2 + B + 1 To 7 + B + A + C + 2 Step 3
Select Case Range("D1")
Case "1月份":
'(1)应收客户合同工程款年初余额----------------------------------------------------!!!!!(使用for多重循环需要在数据库第500行,成果表之间进行数据适配)
'对调入项目在数据库中进行数据匹配
Sheets("成果表").Cells(7, I) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(3, I), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对直管工区在数据库中进行数据匹配
Sheets("成果表").Cells(7, J) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(3, J), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对托管项目(处)在数据库中进行数据匹配
Sheets("成果表").Cells(7, K) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(4, K), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对托管项目(局)在数据库中进行数据匹配
Sheets("成果表").Cells(7, L) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(4, L), Sheets("1月").Range("AA5:AB500"), 2, 0) / 10000, 0)
Next L
Next K
Next J
Next I
End Select
End Sub
' 展开
'消除计算过程在窗口界面的显示
Application.ScreenUpdating = (False)
'声明长整数的变量
Dim A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, S, T As Integer
A = Range("E1").Value
B = Range("F1").Value
C = Range("G1").Value
D = Range("H1").Value
F = Range("I1").Value
G = Range("J1").Value
For I = 7 To 7 + A - 1
For J = 7 + A + 1 To 7 + B + A
For K = 7 + A + 2 + B To 7 + B + A + C + 1 Step 3
For L = 7 + A + 2 + B + 1 To 7 + B + A + C + 2 Step 3
Select Case Range("D1")
Case "1月份":
'(1)应收客户合同工程款年初余额----------------------------------------------------!!!!!(使用for多重循环需要在数据库第500行,成果表之间进行数据适配)
'对调入项目在数据库中进行数据匹配
Sheets("成果表").Cells(7, I) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(3, I), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对直管工区在数据库中进行数据匹配
Sheets("成果表").Cells(7, J) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(3, J), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对托管项目(处)在数据库中进行数据匹配
Sheets("成果表").Cells(7, K) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(4, K), Sheets("1月").Range("A5:B500"), 2, 0) / 10000, 0)
'对托管项目(局)在数据库中进行数据匹配
Sheets("成果表").Cells(7, L) = Application. _
IfError(Application.VLookup(Sheets("成果表").Cells(4, L), Sheets("1月").Range("AA5:AB500"), 2, 0) / 10000, 0)
Next L
Next K
Next J
Next I
End Select
End Sub
' 展开
1个回答
展开全部
因为你大量使用VLOOKUP去查数据导致了速度慢,应该把VLOOKUP查找的内容建立一个字典存在内存里面,以后成千上万次检测某数据是否在里面的时候,可以瞬间获得查询结果。
另外,你这样的程序会写得长,因为你CASE每个月份都要写一段代码,一般的做法是把各月份的数据都存放在一个字典里面。
此外,逐一单元格填写影响速度,可以使用数组统一获取内容、更新后填回去,这样可以进一步减少一些时间。
如果需要代劳修改代码,请【百度云盘】(一个使用百度账户登录的可以对话和传送文件的应用)加友私下传文件,直接在文件上修改。
另外,你这样的程序会写得长,因为你CASE每个月份都要写一段代码,一般的做法是把各月份的数据都存放在一个字典里面。
此外,逐一单元格填写影响速度,可以使用数组统一获取内容、更新后填回去,这样可以进一步减少一些时间。
如果需要代劳修改代码,请【百度云盘】(一个使用百度账户登录的可以对话和传送文件的应用)加友私下传文件,直接在文件上修改。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |