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

Matrizen subtrahieren bzw. übergeben

Forumthread: Matrizen subtrahieren bzw. übergeben

Matrizen subtrahieren bzw. übergeben
23.06.2019 16:58:23
Bernd
Hallo Forum,
um noch etwas fitter in der Matrizenrechnung mit VBA zu werden habe ich zwei weitere kurze Fragen:
Frage 1: Übergabe der Werte einer Matrix an eine andere Matrix
wie übergebe ich elegant zum Beispiel in einer Schleife die Werte der neu berechnenten Matrix an die bisherige Matrix, also z.B.
Matrix_alt(i,j) = Matrix_neu(i,j)
Muss ich das mit einer Doppelschleife programmieren oder gibt es hier auch vba Funktionsbefehle? Wenn ja, wie lautet der VBA-Code des Befehls "Setze eine Matrix mit der anderen Matrix gleich". Kann man eventuell den Befehl mmult hier auch nutzen?
Frage 2: Subtrahieren einer Matrix
Muss ich das mit einer Doppelschleife programmieren oder gibt es hier auch vba Funktionsbefehle? Wenn ja, wie lautet der VBA-Code des Befehls "Subtrahiere eine Matrix von der anderen Matrix"
Besten Dank vorab
Bernd
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:04:37
Hajo_Zi
Hallo Bernd,
Teil 1
Sub Eintragen()
For LoI = 0 To UBound(StArr1)
StArr1(LoI) = StArr2(LoJ)
Next LoI
End Sub

Teil 2
Sub Eintragen()
For LoI = 0 To UBound(StArr1)
StArr1(LoI) = StArr1(LoI)-StArr2(LoJ)
Next LoI
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:09:40
Daniel
Hi
frage 1)
wenn die Matrix_alt genauso groß ist wie die Matrix_neu und alle Werte überschrieben werden sollen:
Matrix_alt = Matrix_neu
ansonsten Doppelschleife
frage 2)
Doppelschleife
wenn du schleifenfrei programmieren willst, gäbe es noch folgenden Workaround:
1. schreibe beide Matritzen in einen Zellbereich
2. kopiere die Werte des einen Zellbereichs und füge in mit .PasteSpecial xlpastevalues, Operation:=xlSubtract in den anderen Zellbereich ein
3. lies dann den neu berechneten Zellbereich wieder ins Array ein.
ist zumindest mal für dich in VBA schleifenfrei. dass es schneller ist als die Doppelschleife, glaube ich kaum.
Gruß Daniel
Anzeige
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:12:44
Bernd
Hallo Hajo und Daniel,
danke euch für die Antworten - das hilft mir sehr weiter und ich will ja gerade das Programmieren in VBA lernen und nicht wie bisher "schleifenfrei" programmieren...
BG
Bernd
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:17:16
Daniel
naja, zum lernen von Programmieren mit VBA gehört auch, dass man nicht nur die Möglichkeiten von VB kennt und nutzt, sondern auch die der Application, dh Excel.
prinzipiell versuche ich Schleifen zu vermeiden, wenn es gleichwertige Workarounds gibt, weil Schleifen einfach lästig sind, wenn man seinen Code im Einzelstep testen muss.
Gruß Daniel
Anzeige
Zyklische Verarbeitung (Schleifen) ist eine ...
24.06.2019 03:36:57
Luc:-?
…wesentlich Grundlage klassischer Pgmmierung, Bernd;
dass hochentwickelte und KI-Sprachen hier einfachere Lösungen anbieten und VBA auch Xl-Methoden nutzen kann, ändert nichts daran, dass man ihre Wirkungsweise verstehen sollte. Und was das Testen (im Einzelschritt) betrifft → man kann HaltePunkte auch geschickt setzen u/o mit Debug.Print arbeiten…
Morhn, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Zyklische Verarbeitung (Schleifen) ist eine ...
24.06.2019 18:56:53
Bernd
Hallo Luc:-?,
erst einmal vielen Dank für die ausführlichen Informationen, die ich mir in Ruhe ansehen muss - ist ein bißchen viel auf einmal. Naja, und Hajo hat so seine ganz eigene Art zu helfen :-), aber immerhin, er gibt sein Wissen weiter, auch wenn es vielleicht unter Experten nicht perfekt ist und manchmal vielleicht auch falsch ist. In dem von dir genannten Fall habe ich mich einfach über die schnelle Antwort gefreut, weil sie mir weitergeholfen hat und ohne zu prüfen, ob die Antwort richtig war - Hintergrund ist, dass ich ein Excelprogramm in ein VBA Makro umschreiben will. d.h. ich kann die Rechnungsergebnisse Schritt für Schritt mit meinem Excelprogramm überprüfen.
Scheint, dass du ein Experte bist auf gerade diesem Gebiet der Tensor- bzw. Matrizenrechnung.
Insofern würde mich natürlich schon interessieren, wie deine optimale Lösung aussieht im Hinblick auf
das Subtrahieren von zwei Matrizen
die Übergabe bzw. Umbenennung von einer Matrix
die optimale Multiplikation zweier Matrizen, wenn mmult funktioniert für den Anwendungsfall.
Komplexere Themen muss ich eh mit zwei Schleifen programmieren...
Beschäftigst du dich auch mit KI-Themen?
Beste Grüße
Bernd
Anzeige
OT: Beschäftigung
26.06.2019 01:37:57
Luc:-?
Morhn, Bernd;
vor 35 Jahren fand eine KI-Sprache in ihren Anfängen meine Aufmerksamkeit → PROLOG. 1990/91 wurde mir meine Mitgliedschaft dann zu teuer… Der Rest ist mehr oder weniger dem Zufall unterworfenes AllgemeinInteresse, bspw die übliche Abbildung des Tensor-Produkts als größere Matrix zum Zwecke effizienterer Speicherung.
Ansonsten befasse ich mich vornehmlich mit der Pgmmierung von VBA-basierten UDFs (user defined functions) und ihrer Anwendung bzw Einbindung in ZellFmln auch unter Nutzung von Xl-Standard-Fktt (UDFs sollen diese ergänzen und so ggf Fmln vereinfachen bzw Bestimmtes überhaupt erst ermöglichen).
Es gibt ja 2 Arten von SchleifenFor … = … To … (Step …) für Arrays mit beliebigem DatenTyp und indizierbare ObjektListen, sowie For Each … In … für Variant-Arrays und ObjektMengen. Es gibt auch 2 Arten von Arrays → das klassische rechteckige (reguläre) n-di­men­sionale VBA-Array und das allgemeinere, idR aus Tensoren aufgebaute Array. In VBA kann man Letzteres auch aus Ersteren auf­bauen, sogar irregulär. Für beide Formen gilt aber, dass sie in ein reguläres 2dim-Array transponierbar sein müssen, um auf ein Xl-Blatt komplett abgebildet wdn zu können (das macht nur Xl selbst automatisch bei Fml- [inkl UDF-gestützter], nicht bei reinen VBA-Ergeb­nis­sen!). Bei Letzterem können aber auch Teile (komplette Elemente-KoVektoren bzw -Matrizen) recht leicht angesprochen und abgebildet wdn.
Allerdings kann man den für ZellBereiche und Datenfelder (Arrays) unterschiedlichen automatischen Durchlauf des For-Each-Schlei­fen­Typs nicht von außen steuern, sondern muss ihn kennen und ggf benötigte Speicherungsindizes nach Bedarf bilden, wobei auch die MatrixForm der Ausgabe beliebig festgelegt wdn kann. Weitere Unterschiede zwischen beiden SchleifenTypen gibt's dann beim Durchlauf diskontinuierlicher Bereiche, die beim 1.Typ eine zusätzliche Schleife erfordern.
Alles Weitere (die 3 speziellen Pktt) im unteren Thread.
Gruß, Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Matrizen subtrahieren und übergeben in VBA


Schritt-für-Schritt-Anleitung

Um Matrizen in VBA zu subtrahieren oder deren Werte zu übergeben, kannst du die folgenden Schritte befolgen:

  1. Matrix definieren: Lege deine Matrizen als Arrays fest. Hier ein Beispiel:

    Dim Matrix_alt() As Variant
    Dim Matrix_neu() As Variant
  2. Werte übergeben: Wenn die Matrizen gleich groß sind, kannst du die Werte direkt übergeben:

    Matrix_alt = Matrix_neu
  3. Matrizen subtrahieren: Verwende eine Doppelschleife, um die Subtraktion durchzuführen. Dies ist notwendig, wenn du die Werte einzeln subtrahieren möchtest:

    Dim i As Long, j As Long
    For i = LBound(Matrix_alt, 1) To UBound(Matrix_alt, 1)
        For j = LBound(Matrix_alt, 2) To UBound(Matrix_alt, 2)
            Matrix_alt(i, j) = Matrix_alt(i, j) - Matrix_neu(i, j)
        Next j
    Next i

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Lösung: Stelle sicher, dass die Dimensionen beider Matrizen übereinstimmen, bevor du die Subtraktion oder Übergabe vornimmst.
  • Fehler: Typkonflikt

    • Lösung: Überprüfe, ob die Matrizen korrekt als Variant deklariert sind. Wenn du spezifische Datentypen verwendest, müssen diese übereinstimmen.

Alternative Methoden

Wenn du die Schleifen vermeiden möchtest, kannst du auch Excel-Funktionen nutzen:

  1. Zellenbereich verwenden: Platziere die Matrizen in einem Arbeitsblatt. Dann kannst du mit PasteSpecial die Werte subtrahieren:

    ' Angenommen, die Matrizen sind in den Bereichen A1:B2 und D1:E2
    Range("D1:E2").Copy
    Range("A1:B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlSubtract
  2. MMULT-Funktion nutzen: Diese Funktion ist jedoch nicht direkt für die Subtraktion gedacht, sondern für die Multiplikation. Um Matrizen zu subtrahieren, musst du die oben genannten Methoden verwenden.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Matrizenbearbeitung in VBA:

  1. Matrizen subtrahieren:

    Sub MatrixSubtraktion()
        Dim Matrix_a(1 To 2, 1 To 2) As Variant
        Dim Matrix_b(1 To 2, 1 To 2) As Variant
    
        ' Beispielwerte
        Matrix_a(1, 1) = 5: Matrix_a(1, 2) = 7
        Matrix_a(2, 1) = 3: Matrix_a(2, 2) = 1
    
        Matrix_b(1, 1) = 2: Matrix_b(1, 2) = 4
        Matrix_b(2, 1) = 1: Matrix_b(2, 2) = 0
    
        ' Subtraktion
        Dim Matrix_result(1 To 2, 1 To 2) As Variant
        For i = 1 To 2
            For j = 1 To 2
                Matrix_result(i, j) = Matrix_a(i, j) - Matrix_b(i, j)
            Next j
        Next i
    End Sub

Tipps für Profis

  • Nutze Debug.Print, um Zwischenergebnisse während der Ausführung deines Codes zu überprüfen.
  • Experimentiere mit For Each-Schleifen, wenn du mit Objekten oder einzelnen Zellen arbeitest, um deinen Code flexibler zu gestalten.
  • Halte deinen Code modular, indem du Funktionen für wiederkehrende Aufgaben erstellst.

FAQ: Häufige Fragen

1. Wie kann ich die Größe einer Matrix dynamisch anpassen?
Du kannst die Größe einer Matrix mit der Funktion ReDim ändern. Beispiel:

ReDim Matrix(1 To 3, 1 To 3)

2. Kann ich Matrizen mit unterschiedlichen Dimensionen subtrahieren?
Nein, die Dimensionen der Matrizen müssen identisch sein, um die Subtraktion durchzuführen. Andernfalls wird ein Laufzeitfehler auftreten.

3. Was ist der Vorteil von UDFs in Excel?
UDFs (benutzerdefinierte Funktionen) ermöglichen es dir, maßgeschneiderte Berechnungen durchzuführen, die nicht in Excel standardmäßig verfügbar sind. Sie können in Kombination mit Matrizenoperationen sehr nützlich sein.

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