Как оптимизировать время процесса в Excel VBA MMult

#excel #vba #time

#excel #vba #время

Вопрос:

Я хочу выполнить цикл для умножения матриц, но меня постоянно прерывает длительное время процесса.

Я прилагаю код:

     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 закрывается для длительного процесса, есть идеи?

Ответ №1:

Вы сбрасываете 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 цикл.

Комментарии:

1. О да! спасибо, что увидели ошибку, я полностью прошел ее, я попробую и использую For… Далее