Anzeige
Archiv - Navigation
732to736
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
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrix-Berechunng in VBA

Matrix-Berechunng in VBA
Daniel
Hallo,
folgendes Problem:
ich habe mehrere 2-dimensionale Felder gleicher Grösse
die Ersten beiden Enthalten die Daten, in den anderen sollen die Berechnungsergebnisse gespeichert werden.
In etwa so:
Feld_1(1,1) x Feld_2(1,1) Ergbenis in Feld_3(1,1) speichern
Feld_1(1,2) x Feld_2(1,2) Ergbenis in Feld_3(1,2) speichern
Feld_1(1,3) x Feld_2(1,3) Ergbenis in Feld_3(1,3) speichern
...
und so weiter, die ganze Tabelle durch.
ist soetwas nur mit einer geschachtetln Schleife möglich oder gibt es ein andere Möglichkeit sowas zu berechnen?
Würde es dann auch direkt mit Excel-Tabellen (also Range-Objekten) funktionieren oder muß ich die Tabellenwerte erst in Felder kopieren?
Gruß, Daniel Eisert

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

Betreff
Benutzer
Anzeige
AW: Matrix-Berechunng in VBA
18.02.2006 11:20:48
Franz
Hallo Daniel,
ich kenne keine Matrix-Operation, die unter VBA diese Rechenoperation direkt durchführen kann.
Es bleibt also die Schachtelung in zwei FOR ... NEXT schleifen.
Die Rechenoperationen kannst du direkt mit Range-Objekten durchführen. Die Übernahme in eine Feldvariable ist notwendig.
Unter VBA sieht das Ganze dann so aus:
Sub MatrixOperation_mit_For_Schleifen()
Dim Bereich_1 As Range, Bereich_2 As Range, Bereich_3 As Range
Set Bereich_1 = ThisWorkbook.Sheets("Tab1").Range("A2:B7")
Set Bereich_2 = ThisWorkbook.Sheets("Tab1").Range("C2:D7")
Set Bereich_3 = ThisWorkbook.Sheets("Tab1").Range("E12:F17")
For I = 1 To Bereich_1.Rows.Count
For J = 1 To Bereich_1.Columns.Count
Bereich_3(I, J) = Bereich_1(I, J) * Bereich_2(I, J)
Next J
Next I
End Sub

Gruß
Franz
Anzeige
AW: Matrix-Berechunng in VBA
18.02.2006 14:28:10
HW
Das muss auch VBA nicht können, weil es Tabellen-Matrixfunktionen gibt

With Application.WorksheetFunction
Bereich_3 = .MMult(Bereich_1, .Transpose(Bereich_2))
End With

d.h. die ganze VBA-Konstruktion ist überflüssig aber vielleicht doch lehrreich...
Gruß HW
ppt-user.de
AW: Matrix-Berechunng in VBA
18.02.2006 19:13:06
Franz
Hallo HW und Daniel,
Die Prozedur mit FOR .... NEXT liefert ein anderes Ergebnis als die Prozedur mit der Tabellenfunktion MMult. Also Vorsicht bei der Anwendung.
Aber ich habe wieder etwas dazugelernt :)
Tabellenblattname: Tab1
A    B    C    D       E       F
1  A1   A2   B1   B2   For Next Ergebnis
2   1    3    2    1          2    3
3   2    4    3    2          6    8
4   3    5    4    3         12   15
5   4    6    5    4         20   24
6   5    7    6    5         30   35
7   6    8    7    6         42   48
8                         MMult Ergebnis
9                             5    9
10                             8   14
11                            11   19
12                            14   24
13                            17   29
14                            20   34   

Gruß
Franz
Anzeige
AW: Matrix-Berechunng in VBA
18.02.2006 21:11:07
HW
Die Matrix-Funktionen arbeiten Zeile*Spalte.
Je nach dem was Du haben willst, musst Du Deine Matizen strukturieren und aufteilen!
Oder einfach Vektoren (als Arrayformel) z.B: {=(A2:A7)*(C2:C7)} multiplizieren.
Geht auch am besten ohne VBA?
oder halt doch:
Bereich_3.FormulaArray = "=" & Bereich_1.Address & "*" & Bereich_2.Address
'Und hau wech die Formeln
Bereich_3.Value = Bereich_3.Value
Such Dir was aus...
Gruß HW
ppt-user.de
Danke:
19.02.2006 22:30:56
Daniel
Hallo,
zunächst mal Danke für eure Mühe, aber ich glaube, ich werde weiterhin mit den For-Next-Schleifen arbeiten.
Die MMult-Funktion liefert nicht das gewünschte Ergebnis und das mit den Vektor-Berechungen blicke ich noch nicht so ganz.
Außderdem möchte ich bei der Berechnung VBA verwenden und keine Formeln, da die Ergebnisse sich in der Folge nicht mehr ändern und deshalb statisch bleiben können.
Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige