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

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

0 голосов
/ 11 декабря 2018

Всем доброго времени суток

Я пытаюсь в 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 ]

0 голосов
/ 11 декабря 2018

Попробуйте приведенный ниже код, чтобы прочитать массив 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.

0 голосов
/ 11 декабря 2018

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

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

и получил:

enter image description here

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

...