簡體   English   中英

如何在excel VBA MMult中優化流程的時間

[英]How to optimize the time of a process in 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循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM