Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Probleme mit MMult in VBA

Probleme mit MMult in VBA
Frank
Hallo an Alle,
ich möchte gern MMult unter VBA nutzen, jedoch erhalte ich beim Ausführen des Codes folgende Meldung:
"Die MMult-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden."
Hier ist mein Code:
Sub Matrix_multiplizieren()
Dim Matrix(1 To 6, 1 To 6) As Variant
Dim Inverse
Dim Vektor(1 To 6) As Double
Dim Ergebnis
Dim i As Integer, j As Integer
For i = 1 To 6
For j = 1 To 6
Matrix(i, j) = Worksheets(1).Cells(i, j + 2)
Next j
Next i
For i = 1 To 6
Vektor(i) = Worksheets(1).Cells(i, 1)
Next i
Inverse = Application.WorksheetFunction.MInverse(Matrix)
Ergebnis = Application.WorksheetFunction.MMult(Inverse, Vektor) 'hier streikt VBA
End Sub
Kann mir bitte jemand sagen was ich falsch mache?
Vielen Dank und viele Grüße,
Frank

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Probleme mit MMult in VBA
17.11.2011 12:53:18
Harald
Hallo Frank,
vertausche Matrix und Vektor in MMUlt:
Ergebnis = Application.WorksheetFunction.MMult(Vektor, Inverse)
Gruß Harald
AW: Probleme mit MMult in VBA
17.11.2011 13:11:27
Frank
Vielen Dank Harald,
das ist aber komisch, denn ich bin vin der Syntax in Excel ausgegangen und da muss man bei MMult(Inverse,Vektor) angegeben (siehe Datei). Warum ist es in VBA genau andersrum?
das funzt in Excel: =MMULT(C8:H13;A1:A6) ,sprich MMult(Matrix, Vektor)
in VBA muss ich schreiben MMult(Vektor, Matrix)
https://www.herber.de/bbs/user/77541.xlsm
Das finde ich jetzt wirklich nicht sehr logisch, was meint Ihr?
Vielen Dank und viele Grüße,
Frank
Anzeige
Nicht logisch und noch schneller
17.11.2011 13:25:12
Harald
aber wenn's denn funktioniert.
Ich spekuliere mal, dass eine Matrix als Bereich eines Arbeitsblattes eben anders gespeichert wird, als eine Matrix in VBA. Wenn man das berücksichtigt, geht es noch schneller (und dann stimmt auch die Reihenfolge von Matrix und Vektor wieder):
Sub Matrix_multiplizieren()
Dim Matrix As Variant
Dim Inverse
Dim Vektor As Variant
Dim Ergebnis
Dim i As Integer, j As Integer
Matrix = Range("C1:H6")
Vektor = Range("A1:A6")
Inverse = Application.WorksheetFunction.MInverse(Matrix)
Ergebnis = Application.WorksheetFunction.MMult(Inverse, Vektor)
End Sub
Gruß Harald
Anzeige
AW: Nicht logisch und noch schneller
17.11.2011 13:34:08
Frank
Gut, dann wäre das geklärt :o). Warum auch immer das so ist - ich nehme das jetzt so hin. Deine Variante ist auch eine gute Idee, aber ich möchte/muss es gern dynamisch haben...
Vielen Dank nochmal Harald.
Viele Grüße, Frank
dynamisch geht auch
17.11.2011 14:06:55
Harald
Matrix = range(Cells(x1,y1),Cells(x2,y2))
Wobei X1, y1 die linke obere Ecke der Matrix ist (also die Startwerte für i und j in Deinem Code)
und x2, y2 ist die rechte untere Ecke der Matrix (also die Endwerte für i und j aus deinem Code)
Für den Vektor äquivalent:
Vektor = Range(Cells(x3,y3), Cells(x4,y3))
Hier 2*y3, da der Vektor eindimensional ist.
Gruß
Harald
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige