Использование нескольких экземпляров одной и той же пользовательской функции в Excel - PullRequest
0 голосов
/ 28 февраля 2019

Я пишу пользовательскую функцию с целью выполнения умножения нескольких массивов, содержащих комплексные числа в Excel.Например, у меня есть эти 3 массива, определенные на моем листе Excel:

MATZ1:
0.99995021721684+0.0172827928509254i    -0.040624595514759-0.000234038263707613i
0.00490168593281832-0.850839538828158i  0.99995021721684+0.0172827928509254i

MATZ2:
 0.996262283629251+0.149720806155247i   -0.952677113437938-0.0475875415517989i
0.0156809592632005-0.313924412139317i   0.996262283629251+0.149720806155247i

MATZ3:
  0.998558978121825+0.0929765994909912i -0.128534373384092-0.00398493017536902i
0.0448308688243513-1.44602474297277i    0.998558978121825+0.0929765994909912i

И я написал следующую функцию в VBA:

Function IMATMULT(rng1 As Range, rng2 As Range) As Variant
    Dim i As Integer
    Dim j As Integer
    Dim l As Integer

    Dim temp As String

    Dim NumColumns As Variant
    Dim NumRows As Variant
    Dim NumRows2 As Variant

    NumRows = rng1.Rows.Count - 1
    NumColumns = rng2.Columns.Count - 1

    If (rng1.Columns.Count = rng2.Rows.Count) Then        
        NumRows2 = rng1.Columns.Count    
    Else    
        IMATMULT = "non compatible arrays"
        Exit Function
    End If

    Dim matrix() As String
    ReDim matrix(NumRows, NumColumns)

    For i = 0 To NumRows
        For j = 0 To NumColumns
            temp = "0"
            For l = 1 To NumRows2  
                temp = WorksheetFunction.ImSum(temp, WorksheetFunction.ImProduct(rng1(i + 1, l).Value, rng2(l, j + 1).Value))
            Next l

            matrix(i, j) = temp
        Next j
    Next i

    IMATMULT = matrix()
End Function

, которая может умножить два сложныхмассивы вместе.Когда я пишу следующую строку кода в Excel, я получаю правильный результат:

enter image description here

Однако, когда я пытаюсь умножить более двух массивов, яполучить сообщение об ошибке:

enter image description here

Я знаю, что могу просто просто умножить один массив за раз, но я хотел бы знать, почему с помощьюмоя функция дважды не работает, так как мои текущие знания VBA не позволяют мне понять причину этого.

Большое спасибо.

EDIT1:

ItКазалось бы, проблема в том, что вывод этой функции отличается от формата ввода.Чтобы работать так, как мне нужно, эта функция должна принимать массив текста в качестве входных данных.Однако я не знаю, как передать такой массив в функцию, любая помощь будет приветствоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...