Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
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

VBA - Vektorproblem

VBA - Vektorproblem
20.05.2014 22:19:28
Andreas
Hallo zusammen,
Ich habe folgendes Problem, welches ich mit VBA lösen muss, aber mein Ansatz funktioniert nicht so wie ich will...Ich habe ein Excel-Sheet mit vielen Daten (Börsenkurse-Zeitreihe) die in Spalte G sind.
Mein erster Schritt wäre es die Tagesrendite zu berechnen, dann möchte ich für 1200 Handelstage für jeweils 60-Tage einen Durchschnitt berechnen und diesen in einem Vektor auf meinem Sheet ausgeben, leider funktioniert da etwas nicht so ganz...
Ich weiß es wäre einfacher, sich einfach alles auf dem Excel-Sheet zu erstellen, ich muss es aber mit VBA lösen...
Hier wäre mein Code, mit der Frage: "Wo liegt mein Fehler" bzw. was muss ich anders machen?
Vielen vielen Danke!!!
Option Explicit
Option Base 1
Sub Rendite()
Dim wb As Workbook
Set wb = Workbooks("Datei")
Dim ws1 As Worksheet
Set ws1 = Worksheets("Siemens")
Dim ws2 As Worksheet
Set ws2 = Worksheets("Ausgabe")
Dim rendite() As Double
Dim WinAve(1, 1141) As Single
Dim WinStd(1, 1141) As Single
Dim St As Variant
Dim t As Double
t = ws1.Cells(1, 1).End(xlDown).Row
St = ws1.Range("G2:G" & t)
Dim i As Single
Dim n As Single
ReDim rendite(UBound(St) - 1)
For n = 1 To UBound(St) - 1
rendite(n) = (St(n, 1) / St(n + 1, 1)) - 1
Next n
For i = 1 To 1141
WinAve(1, i) = WorksheetFunction.Average(Range(rendite(i + 1), rendite(i + 60)))
Next i
ws2.Range("A" & i + 1).Value = WinAve(1, i)
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Keine Tabelle, kein Fehler: keine Lösung
21.05.2014 06:42:05
MCO
Moin!
Leider hast du weder den Fehler beschrieben noch eine Beispieltabelle angehängt.
Damit würde sich die Chance deutlich erhöhen, Antworten zu erhalten!
Gruß, MCO

AW: Keine Tabelle, kein Fehler: keine Lösung
21.05.2014 08:32:00
Andreas
Hallo MCO,
entschuldigung, macht natürlich Sinn die Datei und den Fehler zu beschreiben!
hier ist die Datei: https://www.herber.de/bbs/user/90763.xlsx
Die Fehlmeldung lautet: "Laufzeitfehler 1004 - Die Methode Range für das Objet _Global ist fehlgeschlagen"
Viele Grüße,
Andreas

was hat dein Code ...
21.05.2014 09:45:28
Rudi
.... mit dieser Mappe zu tun?

Anzeige
AW: VBA - Vektorproblem
21.05.2014 09:41:55
Rudi
Hallo,
WinAve(1, i) = WorksheetFunction.Average(Range(rendite(i + 1), rendite(i + 60)))
kann ja nicht gehen.
Rendite ist ein Array mit Werten.
Gruß
Rudi

AW: VBA - Vektorproblem
21.05.2014 10:13:37
Andreas
Hallo Rudi,
vielen Dank! Meine Datei war zu groß, daher habe ich die Test-Datei nachgebaut. Der Code muss _ dann abgeändert werden, habe ich leider vergessen

Sub Rendite()
Dim wb As Workbook
Set wb = Workbooks("Datei")
Dim ws1 As Worksheet
Set ws1 = Worksheets("1")
Dim ws2 As Worksheet
Set ws2 = Worksheets("Ausgabe")
Dim rendite() As Double
Dim WinAve(1, 1141) As Single
Dim WinStd(1, 1141) As Single
Dim St As Variant
Dim t As Double
t = ws1.Cells(1, 1).End(xlDown).Row
St = ws1.Range("b2:1" & t)
Dim i As Single
Dim n As Single
ReDim rendite(UBound(St) - 1)
For n = 1 To UBound(St) - 1
rendite(n) = (St(n, 1) / St(n + 1, 1)) - 1
Next n
For i = 1 To 1141
WinAve(1, i) = WorksheetFunction.Average(Range(rendite(i + 1), rendite(i + 60)))
Next i
ws2.Range("A" & i + 1).Value = WinAve(1, i)
End Sub
Hast du eine Idee wie ich es anders lösen kann?
Meine Aufgabenstellung ist wie folgt:
Berechnung der Erwartungswerte und (Stichproben-)Standardabweichungen auf Basis von 60 Handelstagen.
Verschieben des Betrachtungsfensters um einen Tag, bis 1200 TAge betrachtet wurden und die Ergebnisse sollen als Vektor eintragen werden und anschließend auf dem Tabellenblatt ausgegeben werden...
Ich habe es zunächst falsch gemacht und einfach mti den Schlusskursen gerechnet und kam auf diesen Code der auch funktioniert hat...

Anzeige
AW: VBA - Vektorproblem
21.05.2014 10:29:31
Rudi
Hallo,
vom Prinzip her so:
Sub rendite()
Dim sum As Double
Dim wb As Workbook
'Set wb = Workbooks("Datei")
Dim ws1 As Worksheet
Set ws1 = Worksheets("1")
Dim ws2 As Worksheet
Set ws2 = Worksheets("Ausgabe")
Dim rendite() As Double
Dim WinAve(1 To 1141, 1 To 1) As Single
Dim WinStd(1, 1141) As Single
Dim St As Variant
Dim t As Double
t = ws1.Cells(1, 1).End(xlDown).Row
St = ws1.Range("b2:b" & t)
Dim i As Single
Dim n As Single
ReDim rendite(UBound(St) - 1)
For n = 1 To UBound(St) - 1
rendite(n) = (St(n, 1) / St(n + 1, 1)) - 1
Next n
For i = 1 To 1141
sum = 0
For n = 1 To 60
sum = sum + rendite(i + n)
Next
WinAve(i, 1) = sum / 60
Next i
ws2.Cells(2, 1).Resize(UBound(WinAve)) = WinAve
End Sub

Gruß
Rudi

Anzeige
AW: VBA - Vektorproblem
21.05.2014 10:46:18
Andreas
Hallo Rudi,
super danke!
Ich hatte es bei der Standardabweichung genauso gelöst
Std = WorksheetFunction.StDev(Range(ws1.Cells(i + 1, 7), ws1.Cells(i + 60, 7)))
Wenn ich es nun Analog mache

For i = 1 To 1141
StDev = 0
For n = 1 To 60
StDev = StDev + rendite(i + n)
Next
WinStd(i, 1) = StDev
Next i
Kommt der Fehler: Laufzeitfehler 9 - Außerhalb des gültigen Index...was mache ich falsch?

AW: VBA - Vektorproblem
21.05.2014 11:21:42
Andreas
So, habe es doch hinbekommen:

For i = 1 To 1141
StDev = 0
For n = 1 To 60
StDev = StDev + rendite(i + n)
Next
WinStd(i, 1) = StDev / 60
Next i
Ich habe allerdings ein Problem...ich fange erst mit den Werten aus Zeile 3 an...der erste Wert wird nicht einbezogen, wie verschiebe ich alles um eins nach oben?

Anzeige
AW: VBA - Vektorproblem
21.05.2014 11:24:12
Andreas
So ich hab es hinbekommen...einfache -1 eingefügt
StDev = StDev + rendite(i + n-1)
Sorry, dass ich erst frage und es dann löse, aber immer wenn ich den Post sende funktioniert es danach :)

AW: VBA - Vektorproblem
21.05.2014 12:00:18
Andreas
Ich wollte es mit der Standardabweichung genauso machen, da kommt aber leider wieder der E'Wert raus...was mache ich falsch?
   For i = 1 To 1141
StDev = 0
For n = 1 To 60
StDev = StDev + rendite(i + n - 1)
Next
WinStd(i, 1) = StDev / 60
Next i

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige