Hallo zusammen,
ich führe eine Ereignistudie "Event Study" im Rahmen meiner Masterarbeit durch und habe ein Makro zur Berechnung meiner Daten geschrieben. Im Grunde soll Excel für ein vorgegebenes Datum eine Optimierung mithilfe des SolverTools durchführen, was auch super gelingt.
Ich habe in einem 1. Schritt die Funktion "ifind_date" definiert, die mir die Zeile (Row), in der das gesuchte Datum ("Event_date") steht, angibt! Das gesuchte Datum steht in der Definition von "Event_date" und lautet in diesem Fall "22.01.2008". Abhängig von der Zeile in der das Datum steht, wird die Optimierung für die 5 zuvorliegenden Tage durchgeführt (im Code entspricht dies dem Event_window = 5; 5 steht dabei wiederum für die Anzahl von Zeilen).
Meine Frage ist nun, wie ich das Ganze so programmieren kann, dass Excel die Optimierung für mehrere Zeitpunkte bzw. Daten durchführt. Denn ich habe eine Liste von Ereignissen, die ich untersuchen möchte. Ich habe also in einem anderen Tabellenblatt ("Event_list") z.B. 5 Zeilen mit jeweils einem Datum und Excel soll genau die beschriebene Optimierung für jedes Datum nacheinander durchführen.
Muss ich das Problem wieder mit einer For-Schleife angehen? Kriege es nicht auf die Reihe und würde mich über Eure Hilfe freuen!!! Danke!
Gruss :)
Function ifind_date(mySheet As Object, myDate As String) As Integer
ifind_date = -1
For i = 3 To mySheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If mySheet.Range("A" & i).Value = CDate(myDate) Then
ifind_date = i
End If
Next i
End Function
Sub Fitting_final()
Dim i As Integer 'Row counter
Dim Event_window As Byte
Event_window = 5
Event_date = ifind_date(Sheets("LS_Optimization"), "22.01.2008") - 1
'Setting boundaries for dates entered:
If Not Event_date > 2 Then
MsgBox "Event window or date not specified correctly!"
Exit Sub
End If
If Not Event_date - Event_window + 1 > 2 Then
MsgBox "Event window or date not specified correctly!"
Exit Sub
End If
' Calculating the sum of squared differences over the event window:
Range("P1") = "Sum_Sq.Differences"
Range("P2").Formula = "=SUM(G" & (Event_date - Event_window + 1) & ":G" & (Event_date) & ")"
For i = Event_date To (Event_date - Event_window + 1) Step -1
'Setting L=0,5 as standard model set-up:
Range("Q1") = "L_Opt(Ew)"
Range("Q2") = ".5"
'Calculating CDSmodel spread with user-defined funtion:
Range("F2") = "CDSmodel_OLD"
Range("$F$" & i).Formula = "=(CDSspread_new(RC[-3],RC[-4],R2C9,RC[-2],R2C10,R2C12,R2C13,R2C11))*10000"
'Computing squared Difference between CDSmodel_OLD and CDSmarket:
Range("G2") = "Sq. Difference"
Range("$G$" & i).Formula = "=(((CDSspread_new(RC[-4],RC[-5],R2C17,RC[-3],R2C10,R2C12,R2C13,R2C11))*10000) - RC[-2])^2"
'Finding the minimal value for L:
Range("Q2") = ".001"
SolverReset
SolverOk SetCell:=Range("P2"), MaxMinVal:=2, ValueOf:=0, ByChange:=Range("Q2"), _
Engine:=1, EngineDesc:="GRG Nonlinear"
'Add the constraint to the problem
SolverAdd CellRef:=Range("Q2"), Relation:=3, FormulaText:=".000000001"
'Solve the model but do not display the Solver Results dialog box / Finish and keep the final results
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
'Calculating new CDSmodel spread based on new L:
Range("N2") = "CDSmodel_NEW"
Range("$N$" & i).Formula = "=(CDSspread_new(RC[-11],RC[-12],R2C17,RC[-10],R2C10,R2C12,R2C13,R2C11))*10000"
Next i
End Sub
|