Variabele variabele naam

Status
Niet open voor verdere reacties.

mrbombastic

Gebruiker
Lid geworden
19 feb 2003
Berichten
38
Ik wil de volgende functie maken:

Code:
Function matproduct(matrix1 As Range, matrix2 As Range, matrix3 As Range, Optional matrix4 As Range, Optional matrix5 As Range, Optional matrix6 As Range, Optional matrix7 As Range, Optional matrix8 As Range, Optional matrix9 As Range, Optional matrix10 As Range)

matproduct = WorksheetFunction.MMult(matrix1, WorksheetFunction.MMult(matrix2, matrix3))

If Not IsMissing(matrix4) Then
matproduct = WorksheetFunction.MMult(matproduct, matrix4)
End If

If Not IsMissing(matrix5) Then
matproduct = WorksheetFunction.MMult(matproduct, matrix5)
End If

...

If Not IsMissing(matrix10) Then
matproduct = WorksheetFunction.MMult(matproduct, matrix10)
End If

End Function


Is het mogelijk om het middenstuk te vervangen door een while loop, als volgt ongeveer?

Code:
Dim iter As Integer
iter = 4

while Not IsMissing(matrix&iter) Then
matproduct = WorksheetFunction.MMult(matproduct, matrix&iter)
End If
 
Ik begrijp de vraag, maar ik denk niet dat het zo kan.

Is er misschien de mogelijkheid om alle optionele argumenten in 1 keer door te geven? Bv. als 1 grote range, en met wat code maak je dan een lus doorheen die grote range.

BTW, als je denkt dat die lijnen code niet zo goed staan: dat is echt niet zo erg. Dat is nog altijd redelijk performant naar mijn idee. Ook al heb je een stuk of 7 keer ongeveer dezelfde code staan.

Wigi
 
Als je de matrix zelf als array aanmaakt, dan kun je door die array heen 'loopen':

Code:
Function matproduct(matrix() As Range)

for i = 1 to 10
   If Not IsMissing(matrix(i)) Then
      matproduct = WorksheetFunction.MMult(matproduct, matrix(i))
   End If
next i

End Function
 
Als je de matrix zelf als array aanmaakt, dan kun je door die array heen 'loopen':

Code:
Function matproduct(matrix() As Range)

for i = 1 to 10
   If Not IsMissing(matrix(i)) Then
      matproduct = WorksheetFunction.MMult(matproduct, matrix(i))
   End If
next i

End Function

Hoe maak je de matrix dan als array aan? Ik heb nu dit geprobeerd, maar het werkt nog niet.
Code:
Function matproduct(options As String, matrix1 As Range, matrix2 As Range, matrix3 As Range, Optional matrix4 As Range, Optional matrix5 As Range)

Dim Stringlength As Integer
Dim myarray() As Range
Stringlength = Len(options)
ReDim myarray(1 To Stringlength)
myarray(1) = matrix1
myarray(2) = matrix2
myarray(3) = matrix3

If Not IsMissing(matrix4) Then
    myarray(4) = matrix4
End If
If Not IsMissing(matrix5) Then
    myarray(5) = matrix5
End If

For i = 1 To Stringlength
    If Mid(options, i, 1) = 1 Then
        myarray(i) = WorksheetFunction.Transpose(myarray(i))
    ElseIf Mid(options, i, 1) = 2 Then
        myarray(i) = WorksheetFunction.MInverse(myarray(i))
    End If
    
    If i = 1 Then
        matproduct = myarray(i)
    Else
        matproduct = WorksheetFunction.MMult(matproduct, myarray(i))
    End If
Next i

End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan