如何解决如何在Excel VBA MMult中优化处理时间
我想对乘法矩阵做一个循环,但是我一直被这个过程的长时间困扰。
我附上代码:
Call back_setup_OFF
n_col = 105
dia = 1
Do
dia = dia + 1
Hoja7.Cells(2,n_col) = dia
Hoja7.Cells(105,n_col) = dia
Do
n_row = 106
If Hoja7.Cells(n_row + 103,5) >= dia Then
J_usar = Hoja7.Cells(n_row + 103,3)
Else
J_usar = 0
End If
Hoja7.Cells(n_row,n_col) = -Hoja7.Cells(n_row + 103,2) * Hoja7.Cells(n_row - 103,n_col - 1) - J_usar * Hoja7.Cells(n_row + 103,4)
n_row = n_row + 1
Loop Until n_row = 206
Hoja7.Range(Hoja7.Cells(3,n_col),Hoja7.Cells(102,n_col)) = Hoja7.Application.WorksheetFunction.MMult(Hoja7.Range("B106:CW205"),Hoja7.Range(Hoja7.Cells(106,Hoja7.Cells(205,n_col)))
n_col = n_col + 1
Loop Until dia = 100
Call back_setup
以及back_setup和back_setup_OFF
Sub back_setup()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.StatusBar = False
End Sub
Sub back_setup_OFF()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
问题是Excel会在很长的过程中自行关闭,知道吗?
解决方法
您每次在循环中重置n_row,因此它只能达到107 ...
Do
n_row = 106 '<<<<<< ???
If Hoja7.Cells(n_row + 103,5) >= dia Then
J_usar = Hoja7.Cells(n_row + 103,3)
Else
J_usar = 0
End If
Hoja7.Cells(n_row,n_col) = -Hoja7.Cells(n_row + 103,2) * Hoja7.Cells(n_row - 103,n_col - 1) - J_usar * Hoja7.Cells(n_row + 103,4)
n_row = n_row + 1
Loop Until n_row = 206
仅供参考,您有固定的起点/终点和固定的增量,但是您使用的是Do...Loop
-您可能应该使用For...Next
循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。