Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Multiplikation großer Datenmengen - Datenfelder?!


Betrifft: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 26.09.2019 20:43:16

Guten Abend zusammen,

ich komme gerade bei einem Problem nicht weiter und benötige die Hilfe von euch.

Ich würde das ganze gerne mit Arrays/Datenfeldern in VBAlösen.

Ich möchte für 246 Zeilen und 5 Spalten jeweils einen Wert pro Zeile errechnen.
Dieser einzelne Wert setzt sich zusammen aus.
w = Gewicht Asset
r = Rendite Asset
R = w1*r1 + w2*r2 + w3*r3 + w4*r4 + w5*r5

Die Daten für (w1-5) liegen im Bereich C14:G259 vor und
die Daten für (r1-5) liegen im Bereich B5:B250 eines anderen Tabellenblattes vor.

Wie bereits oben beschrieben würde ich dieses Problem gerne per VBA lösen, da im späteren Verlauf die anzahl der Gewichte respektiv der Renditen erhöht/reduziert werden sollen.

Über Anregungen bzw. Hilfe würde ich mich freuen. Einen vernünftige Code dafür habe ich noch nicht zustande bekommen. Da mir dafür der Ansatz fehlt.

Beste Grüße

Christian

  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 26.09.2019 21:20:20

"die Daten für (r1-5) liegen im Bereich B5:B250 eines anderen Tabellenblattes vor." ??
Du meinst wphl B5:F250.


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 26.09.2019 21:25:40

Hi onur,

danke für die Berichtigung!

Ja so ist es.

Grüße


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Dieter Klemke
Geschrieben am: 26.09.2019 21:46:16

Hallo Christian,

das könnte z.B. so aussehen (Ergebnis wird in das separate Blatt "Ergebnis" geschrieben):

Sub Multiplikation()
  Dim i As Long
  Dim produkt As Double
  Dim varG As Variant
  Dim varR As Variant
  Dim wb As Workbook
  Dim wsE As Worksheet
  Dim wsG As Worksheet
  Dim wsR As Worksheet
  Dim zeileE As Long
  Dim zeileG As Long
  Dim zeileR As Long
  
  Set wb = ThisWorkbook
  Set wsE = wb.Worksheets("Ergebnis")
  Set wsG = wb.Worksheets("Gewicht")
  Set wsR = wb.Worksheets("Rendite")
  zeileE = 2
  zeileG = 14
  zeileR = 5
  For i = 1 To 246
    zeileG = i + 13
    zeileR = i + 4
    zeileE = i + 1
    varG = wsG.Cells(zeileG, "C").Resize(, 5)
    varR = wsR.Cells(zeileR, "B").Resize(, 5)
    produkt = WorksheetFunction.SumProduct(varG, varR)
    wsE.Cells(zeileE, "A") = produkt
  Next i
End Sub
https://www.herber.de/bbs/user/132225.xlsm

Viele Grüße
Dieter


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 26.09.2019 21:47:45

Oder so:

Private Sub CommandButton1_Click()
    Dim w, r, RR(1 To 246), i
    w = Sheets("Tabelle1").Range("C14:G259").Value 'Hier Blattnamen einsetzen
    r = Sheets("Tabelle2").Range("B5:F250").Value 'Hier Blattnamen einsetzen
    For i = 1 To 246
        RR(i) = w(i, 1) * r(i, 1) + w(i, 2) * r(i, 2) + w(i, 3) * r(i, 3) + w(i, 4) * r(i, 4) +  _
w(i, 5) * r(i, 5)
    Next i
End Sub



  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 26.09.2019 22:32:48

Danke Dieter und onur,

ich schau morgen danach wie ich die Ideen am besten bei mir einbauen kann und gebe euch nochmal bescheid.

Bis dahin gute Nacht und vielen Dank.

Grüße


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 27.09.2019 14:19:51

Hallo onur und alle anderen hier im Forum,

ich habe nun deinen Code bei mir eingebaut, funktioniert natürlich super! Danke dir.

Nun hätte ich noch eine Erweiterung bei der du/ Ihr mir ggf. auch helfen könnt.
Ich würde gerne das ganze dynamisch gestalten.
Dies bedeutet, das die Zeilen und Spaltenanzahl der zwei Bereich sich verändern kann, je nachdem wie viele Datenreihen ich betrachte. Die Zeilen und Spalten sind immer gleich.

Es sind jedoch immer mindestens 2 Spalten pro Bereich ( Gewichte, Renditen).

Ich habe deinen Code schonmal etwas umgeschrieben und die zeilenanzahl dynamisch gestaltet. Nun müssen noch die Spalten dynamisch sein.
Für mich stellt sich hier nur die Frage:
Wie lässt sich der Array Erp(i) ermitteln. Dieser wird ja nach folgender Formel ermittelt:
R = w1*r1 + w2*r2 + w3*r3 + w4*r4 + w5*r5
Und wenn ich nun nur 2 Spalten betrachte, fallen ja die w3*r3 bis w5*r5 weg.

Hier mal mein überarbeitetr Code.

Sub Portfoliorendite()

Dim Pr As Worksheet
Dim rg As Range
Dim Zeilen As Integer
Set Pr = ThisWorkbook.Worksheets("Portfoliorendite")
Dim w, r, ERp() As Double
Dim i As Long
Set rg = Range("C14").CurrentRegion

Zeilen = rg.Rows.Count


     w = Pr.Range("C14").CurrentRegion.Value
     r = Pr.Range("I14").CurrentRegion.Value
     ReDim ERp(1 To Zeilen)
     For i = 1 To Zeilen
         ERp(i) = w(i, 1) * r(i, 1) + w(i, 2) * r(i, 2) + w(i, 3) * r(i, 3) + w(i, 4) * r(i, 4)  _
+ w(i, 5) * r(i, 5)
     Next i
     
 End Sub



Beste Grüße Christian


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 27.09.2019 17:35:05

Ich dachte, die Datensätze befinden sich auf verschiedenen Blättern?

     For i = 1 To zeilen
        For ii = 1 To UBound(w, 2)
            ERp(i) = ERp(i) + w(i, ii) * r(i, ii)
        Next ii
     Next i



  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 27.09.2019 19:57:31

Hi onur,

danke dir für die schnelle Antwort.

Da ich noch relativ unerfahren bin mit VBA möchte ich dich bitten, mir kurz den Vorgang
hinter der inneren For-Schleife zu erklären.


For ii = 1 To UBound(w, 2)
ERp(i) = ERp(i) + w(i, ii) * r(i, ii)
Next ii

Hast du nun einen zweidimensionalen Array erstellt, welcher aus dem w array und einer zusätzlichen spalte besteht?

Ist dieser array nun dynamisch? Sprich ich könnte eine Datenfeld aus 2 Spalten mit einem Datenfeld mit 2 Spalten multipliziere,
Genauso zwei Datenfelder mit je 8 oder 10 Spalten?


Viele Grüße,danke für deine Hilfe und schönes Wochenende.

Christian


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 27.09.2019 20:15:46

Die Variablen w und r werden durch

w = Pr.Range("C14").CurrentRegion.Value
r = Pr.Range("I14").CurrentRegion.Value

automatisch in 2-dimensionale Arrays verwandelt, als ob du vorher geschrieben hättest:
Redim w(zeile, AnzahlSpalten) 
Redim r(zeile, AnzahlSpalten)

Das Einzige was ich geändert habe, ist, dass die innere Schleife mit Varable ii, die von 1 bis Anzahl der Spalten (die Obergrenze der 2. Dimension von ERp) läuft, alles aufsummiert. Wenn 2 Spalten da sind, wird die innere Schleife 2x ausgeführt, bei 3 Spalten 3x usw.


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 27.09.2019 20:17:11

Meine natürlich die Obergrenze der 2. Dimension von w (also Anzahl fer Spalten).


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: onur
Geschrieben am: 27.09.2019 20:17:36

Meine natürlich die Obergrenze der 2. Dimension von w (also Anzahl der Spalten).


  

Betrifft: AW: Multiplikation großer Datenmengen - Datenfelder?! von: Christian
Geschrieben am: 27.09.2019 21:47:02

Hi onur,

mehr oder weniger habe ich die Erklärung verstanden :-).
Der Code funktioniert aufjedenfall.

Besten Dank.

Grüße

Christian


Beiträge aus dem Excel-Forum zum Thema "Multiplikation großer Datenmengen - Datenfelder?!"