VBA массив обратный

Всем доброго дня

Я пытаюсь в Excel VBA получить некоторые значения из таблицы в квадратный массив инвертировать этот массив. У меня есть следующий код

Private Sub CommandButton1_Click()
Dim A As Variant
Dim i As Integer, j As Integer
ReDim A(1 To 3, 1 To 3) As Double

For i = 1 To 3
    For j = 1 To 3
        A(i, j) = Cells(i, j).Value      
    Next j
Next i

A = Application.WorksheetFunction.MInverse(A)

End Sub

В соответствии:

A = Application.WorksheetFunction.MInverse(A)

Я получаю ошибку:

ошибка времени выполнения 1004: ошибка приложения или объекта

Может ли кто-нибудь помочь мне в этом? заранее спасибо

2 ответа

Решение

Возможно, вы пытаетесь инвертировать плохо обусловленную матрицу. Я попробовал ваш код на простом примере:

Sub dural()

    Dim A As Variant
    Dim i As Integer, j As Integer
    ReDim A(1 To 3, 1 To 3) As Double

    For i = 1 To 3
        For j = 1 To 3
            A(i, j) = Cells(i, j).Value
        Next j
    Next i

    A = Application.WorksheetFunction.MInverse(A)

    For i = 1 To 3
        For j = 1 To 3
            Cells(i + 5, j + 5).Value = A(i, j)
        Next j
    Next i
End Sub

и получил:

что представляется правильным. (произведение двух матриц очень близко к единичной матрице)

Попробуйте код ниже, чтобы прочитать массив 3×3 из ячейки A1 и написать обратное на клетке A5,

Private Sub CommandButton1_Click()
    Dim A() as Variant, B() as Variant
    A = Range("A1").Resize(3,3).Value
    B = WorksheetFunctions.MMinverse(A)
    Range("A5").Resize(3,3).Value = B
End Sub

Нет необходимости перебирать каждую ячейку, что является медленной операцией. Чтение и запись целых таблиц с помощью одной команды, используя Range().Resize().Value синтаксис.

Другие вопросы по тегам