excel - 如何优化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, n_col), 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
循环。
推荐阅读
- arrays - 使用惰性 var 并且 Xcode 仍然说不能使用实例,属性初始化程序在“自我”之前运行?
- angular - 即使在尝试了多种方式之后,GitLab 管道也经常失败
- rabbitmq - 如何在 MQ 上捕获错误请求?
- regex - 设置正则表达式的优先级
- angular - 动态设置 scss 变量 angular ionic
- python - 如何使用 XPath 查找标题包含单引号和双引号的元素?
- intellij-idea - IntelliJ - 仅更改项目菜单的文本大小
- azure - 在 Azure 应用服务中更改系统日期?
- python - 重命名 groupby 的列名并使用 Pandas 计算结果
- android - 单击项目后,recyclerview 中的项目数量会自行增加