Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MMult-Problematik in VBA

Forumthread: MMult-Problematik in VBA

MMult-Problematik in VBA
01.12.2016 12:00:31
Christian
Hallo zusammen,
ich habe folgendes Problem: In Excel funktioniert MMult zusammen mit MINV perfekt siehe Screenshot: Userbild
Wenn ich das gleiche mit folgendem Code in VBA umsetzen möchte, erhalte ich eine Fehlermeldung (Laufzeitfehler 1004 - Die MMult-Eigenschaft kann nicht zugeordnet werden):
Sub Matrixeln()
Dim a(1 To 2, 1 To 2)
Dim d(1 To 2, 1)
Dim b
Dim c
a(1, 1) = 0
a(2, 1) = -2
a(1, 2) = -4
a(2, 2) = 2
d(1, 1) = 40
d(2, 1) = 25
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(d, b)
MsgBox "Zahl lautet:" & c(1, 1)
MsgBox "Zahl lautet:" & c(2, 1)
End Sub

An was kann das liegen? Vielen Dank im Voraus
VG Christian
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sieh dir mal deine Fml und dann dein VBA-...
01.12.2016 13:39:39
Luc:-?
…Konstrukt genau an, Christian!
Worin unterscheiden die sich? Ist wie bei diesen Bildchen, finde die Unterschiede!
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Sieh dir mal deine Fml und dann dein VBA-...
01.12.2016 14:05:34
Christian
Ah sorry, das war der falsche Code. Hab nur aus Verzweiflung probiert:
Sub Matrixeln()
Dim a(1 To 2, 1 To 2)
Dim d(1 To 2, 1)
Dim b
Dim c
a(1, 1) = 0
a(2, 1) = -2
a(1, 2) = -4
a(2, 2) = 2
d(1, 1) = 40
d(2, 1) = 25
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, d)
MsgBox "Zahl lautet:" & c(1, 1)
MsgBox "Zahl lautet:" & c(2, 1)
End Sub
Muss natürlich so heißen. Aber leider funktioniert das auch nicht.
Was mache ich falsch?
VG
Anzeige
Du bist in eine VBA-Dim-Falle getappt, ...
01.12.2016 15:52:53
Luc:-?
…Christian;
hast dir zwar viel Mühe gegeben, das zu vermeiden, ist dir aber nicht gelungen:
Dim d(1 To 2, 1) heißt, du deklarierst eine Matrix mit den Zeilen 1 und 2, sowie den Spalten 0 und 1, was du sicher nicht wolltest. Anschld füllst du nur deren 2.Spalte, die 1. enthält also Empties, was hier sicher als 0en interpretiert wird, obwohl d Variant ist. MMult ergibt dann ebenfalls eine 2×2-Matrix, die, weil c als Variant deklariert wurde, die Indizes 0,0…1,1 aufweisen dürfte, falls MMult bei den unterschiedlichen Indizes von b und d überhpt fktt.
Luc :-?
Anzeige
AW: Du bist in eine VBA-Dim-Falle getappt, ...
01.12.2016 16:04:27
Christian
Alles klar, das war es. Erst mal vielen Dank dafür.
Leider reißen meine Probleme nicht ab:
Sub Matrixeln()
Dim a(1, 1)
Dim b(1, 0)
Dim c
a(0, 0) = 0
a(1, 0) = -2
a(0, 1) = -4
a(1, 1) = 2
b(0, 0) = 40
b(1, 0) = 25
c = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(a), b)
MsgBox "Zahl lautet:" & c(0)
MsgBox "Zahl lautet:" & c(1)
End Sub
Hier erhalte ich bei der ersten MsgBox einen "Laufzeitfehler (9): Index außerhalb des gültigen Bereichs".
Wie kann ich noch auf das Array zugreifen? Hab es auch mit c(0,0) und c(1,0) probiert.
Gruß
Christian
Anzeige
Noch eine Dim-Falle, ...
01.12.2016 20:10:33
Luc:-?
…Christian,
die ich möglicherweise in der letzten AW durch meine Ergebnis-Indizes-Erwähnung provoziert hatte. VB-Fktt benutzen idR ein 0basiertes Index-System, Xl-Fktt ein 1basiertes. Darauf hat man auch mit Option Base 0 (VB-Standard/-Default) bzw Option Base 1 kaum bis keinen Einfluss. Da c nicht nur vom DatenTyp Variant ist, sondern durch die Zuweisung eines kompletten mehrwertigen Ergebnisses (einer Xl-Fkt) zu einem Variant mit einem Array wird, wdn auch die Xl-Indizes mit übernommen. Sie lauten also (1, 1) und (2, 1). Damit fktioniert die MsgBox-Ausgabe dann auch.
Noch ein Hinweis: Es reicht WorksheetFunction.MMult (voran­gestelltes Application. ist hier gleichbedeutend und optional) bzw Application.MMult, wobei letzteres auch FehlerWerte ausgibt (was bei einem Variant als Ergebnis­Variable im Prinzip unproblematisch wäre), ersteres nicht, sondern in einen Fehler läuft, den man abfangen muss.
Luc :-?
Anzeige
AW: Noch eine Dim-Falle, ...
02.12.2016 10:39:29
Christian
Vielen Dank, es klappt! Gar nicht so einfach :)
Schönes Wochenende!
Gruß
Christian
Ja, danke, dito! Und ja, da hilft nur probieren, …
02.12.2016 13:29:37
Luc:-?
…Christian;
alle Datenfelder, die direkt aus Xl kommen oder mit Xl-Fktt ermittelt wdn, sind grundsätzlich 1basiert. Nur die Indizierung von in VBA und aus VBA erzeugten Arrays kann (mit Option Base 0/1) beeinflusst wdn. Außerdem gibt's noch einen anderen Array-Typ, der den vektororientierten Array-Objekten anderer Sprachen ähnelt und dann auch wie in diesen üblich indiziert wird → zB (i)(j)(k). Dabei sind aber in VBA auch Mischformen möglich → zB (i)(j, k).
Schö2AdWE, Luc :-?
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige