Revolutionary
Gebruiker
- Lid geworden
- 1 apr 2009
- Berichten
- 183
Goedemiddag helpers,
Achtergrondinformatie:
Ik ben al een tijdje bezig met het ontwikkelen van een Monte Carlo Simulatie (MCS) in Excel. Mijn excelbestand voert 5000 simulaties, waarbij iedere simulatie 500 keer ad random een getal kiest uit een reeks van 30 getallen. In totaal gaat het dus om 2,5miljoen berekeningen. Vervolgens wordt in een ander tabblad van deze 5000 simulaties het eindkapitaal berekend (dus dat zijn nog eens 2,5 miljoen berekeningen). De waarden staan in de cellen A2:SF5001.
Het eindkapitaal van de simulaties geef ik vervolgens weer in een grafiek, maar omdat 5.000 lijntjes in een grafiek wat onoverzichtelijk wordt heb ik er voor gekozen om 7 lijntjes met eindkapitaal in de grafiek op te nemen. In de grafiek worden de volgende lijnen getoond: hoogste eindkapitaal, hoogste 1%, hoogste 10%, mediaan, laagste 10%, laagste 1% en laagste eindkapitaal. Ik heb een printscreen toegevoegd om mn verhaal over de grafieklijnen te verduidelijken. Zie
Met behulp van VBA sorteer ik het eindkapitaal van hoog naar laag en vervolgens worden daar de 7 regels uitgehaald die ik hiervoor beschreef. Met behulp van sorteren is het vrij eenvoudig om bijvoorbeeld het hoogste eindkapitaal te vinden. Maar het proces van sorteren duurt vrij lang, dus ik vroeg mij af of het mogelijk is om de VBA-code te laten zoeken naar het hoogste eindkapitaal en de andere 6 lijnen en deze vervolgens in een grafiek weer te geven?
Mijn VBA-code ziet er nu als volgt uit:
Ik verwacht dat de macro een stuk sneller wordt als ik het commando voor sorteren eruit kan halen, maar ik heb te weinig verstand van VBA om zelf een dergelijke code te maken.
Lang verhaal deze keer, maar ik hoop dat iemand kan helpen. Alvast bedankt!
Tim
Achtergrondinformatie:
Ik ben al een tijdje bezig met het ontwikkelen van een Monte Carlo Simulatie (MCS) in Excel. Mijn excelbestand voert 5000 simulaties, waarbij iedere simulatie 500 keer ad random een getal kiest uit een reeks van 30 getallen. In totaal gaat het dus om 2,5miljoen berekeningen. Vervolgens wordt in een ander tabblad van deze 5000 simulaties het eindkapitaal berekend (dus dat zijn nog eens 2,5 miljoen berekeningen). De waarden staan in de cellen A2:SF5001.
Het eindkapitaal van de simulaties geef ik vervolgens weer in een grafiek, maar omdat 5.000 lijntjes in een grafiek wat onoverzichtelijk wordt heb ik er voor gekozen om 7 lijntjes met eindkapitaal in de grafiek op te nemen. In de grafiek worden de volgende lijnen getoond: hoogste eindkapitaal, hoogste 1%, hoogste 10%, mediaan, laagste 10%, laagste 1% en laagste eindkapitaal. Ik heb een printscreen toegevoegd om mn verhaal over de grafieklijnen te verduidelijken. Zie
Met behulp van VBA sorteer ik het eindkapitaal van hoog naar laag en vervolgens worden daar de 7 regels uitgehaald die ik hiervoor beschreef. Met behulp van sorteren is het vrij eenvoudig om bijvoorbeeld het hoogste eindkapitaal te vinden. Maar het proces van sorteren duurt vrij lang, dus ik vroeg mij af of het mogelijk is om de VBA-code te laten zoeken naar het hoogste eindkapitaal en de andere 6 lijnen en deze vervolgens in een grafiek weer te geven?
Mijn VBA-code ziet er nu als volgt uit:
Code:
Sub Macro_EQ_5000sim()
With Application
.ScreenUpdating = False
.EnableEvents = False
'Van hoog naar laag sorteren
Sheets("MCS Equity").Select
Columns("SF:SF").Select
ActiveWorkbook.Worksheets("MCS Equity").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("MCS Equity").Sort.SortFields.Add Key:=Range("SF2") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("MCS Equity").Sort
.SetRange Range("A2:SF5001")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Update grafiek
Sheets("Output").Select
ActiveSheet.ChartObjects("Grafiek 5").Activate
'De volgende regel zoekt de juiste eindkapitalen op en geeft ze weer in de grafiek
ActiveChart.SetSourceData Source:=Sheets("MCS Equity").Range("5001:5001,4951:4951,4501:4501,2501:2501,501:501,51:51,2:2")
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(1).Name = "=""Max"""
ActiveChart.SeriesCollection(2).Name = "=""Max 1%"""
ActiveChart.SeriesCollection(3).Name = "=""Max 10%"""
ActiveChart.SeriesCollection(4).Name = "=""Median"""
ActiveChart.SeriesCollection(5).Name = "=""Min 10%"""
ActiveChart.SeriesCollection(6).Name = "=""Min 1%"""
ActiveChart.SeriesCollection(7).Name = "=""Min"""
ActiveChart.ChartTitle.Text = "Gesimuleerde equitylijnen" & Chr(13) & "5.000 Sims"
Range("A2").Select
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Ik verwacht dat de macro een stuk sneller wordt als ik het commando voor sorteren eruit kan halen, maar ik heb te weinig verstand van VBA om zelf een dergelijke code te maken.
Lang verhaal deze keer, maar ik hoop dat iemand kan helpen. Alvast bedankt!
Tim