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
синтаксис.