Forestil dig, at du kunne kigge ind i fremtiden, køre tusindvis af mulige scenarier for din investering – og få Excel til at gøre det tunge løft for dig på få sekunder. Lyder det som raketvidenskab? Det er det ikke. Det er Monte Carlo-simulering.
I denne guide viser USD Finans dig, hvordan du forvandler et helt almindeligt regneark til en kraftfuld krystalkugle, der kvantificerer usikkerhed og omsætter den til håndgribelige beslutningsgrundlag. Vi zoomer ind på alt fra fordelingstræk og korrelation til datatabeller, histogrammer og VaR – og vi gør det skridt for skridt, så både Excel-novicer og erfarne modelleringsnørder kan være med.
Uanset om du skal værdiansætte en potentiel investering, lægge budget for næste regnskabsår eller optimere en portefølje, giver Monte Carlo-metoden dig et mere nuanceret billede end et enkelt “point estimate” nogensinde kan. Og det bedste? Du kan komme i gang nu – uden dyr specialsoftware.
Spænd sikkerhedsbæltet: Om få minutter er du klar til at sætte turbo på dine økonomiske modeller og træffe bedre, databaserede beslutninger.
Hvad er en Monte Carlo-simulering – og hvornår giver den mening i Excel?
Monte Carlo-metoden er i al sin enkelhed en gentagen, tilfældig prøvetagning af mulige udfald for at beregne et sandsynlighedsfordelt resultat. I stedet for at antage ét “point-estimate” – fx et årligt afkast på 7 % eller en omsætningsvækst på 3 % – lader vi modellen trække tusindvis af mulige værdier, beregner output for hver gentagelse og ser, hvordan resultaterne fordeler sig. Dermed kan vi kvantificere usikkerhed og tale i percentiler (P5, P50, P95) i stedet for i gennemsnit alene.
I finans og almindelige business cases bruges Monte Carlo-simulering bl.a. til:
- Netto Nuværdi (NPV) og Internal Rate of Return (IRR) for investeringsprojekter, hvor både omsætning, omkostninger og diskonteringsrenter er usikre.
- Porteføljeanalyse – fra simple to-asset cases til hele allokeringsproblemer med aktier, obligationer, råvarer og alternative investeringer.
- Budgetter og forecast for virksomheder, hvor fx salgsvolumen, pris, inputpriser og valutakurser varierer.
- Risikomål som Value at Risk (VaR) og Conditional VaR, der kræver en fuld fordeling af mulige tab.
Excel er ofte det oplagte værktøj til at komme i gang hurtigt, fordi:
- De fleste finans- og controlling-professionelle allerede behersker regnearkets funktioner.
- RAND(), NORM.INV() m.fl. giver adgang til tilfældige tal og standardfordelinger uden ekstra software.
- “Hvad-hvis-analyse ➜ Datatabel” kan køre tusindvis af iterationer uden VBA.
- Resultater kan visualiseres umiddelbart med histogrammer, boksplots og pivottabeller.
Der er dog situationer, hvor specialiserede værktøjer som @RISK, Crystal Ball, Python (NumPy/Pandas) eller R giver mere værdi:
- Behov for komplekse fordelinger eller diskrete/styktalsfordelinger, som Excel ikke understøtter direkte.
- Avanceret korrelationsstruktur på tværs af mange (10+) stokastiske variable.
- Meget store modeller, hvor 50.000-1.000.000 iterationer er nødvendige for konvergens og Excel bliver sløvt.
- Krav om automatiseret batch-kørsel, versionering og audit-trail, som er lettere i script-sprog.
- Regulatorisk rapportering, hvor værktøjer har indbyggede compliance-moduler og validerede tilfældighedsgeneratorer.
Som tommelfingerregel er Excel tilstrækkeligt, når du kan nøjes med nogle få (<20) stokastiske input, <10.000 simulationer og almindelige fordelinger – og når formålet er at understøtte hurtigere beslutningstagning snarere end produktionskørsel. Overskrides disse grænser, betaler det sig ofte at skifte til et mere specialiseret miljø, der tilbyder højere ydeevne, bedre dokumentation og indbygget risikoanalyse.
Opsætning: Antagelser, input og fordelinger i din Excel-model
Inden du kan trykke F9 og lade Excel kaste terningerne, skal modellen have et solidt skelet. Her er den proces, vi typisk følger, når vi designer en Monte Carlo-model i et regneark:
1. Kortlæg modellen: Fra driver til kpi
- List alle inputparametre – priser, mængder, vækstrater, diskonteringsrente, omkostningsprocenter osv.
- Udpeg output-KPI’er – f.eks. NPV, IRR, årligt porteføljeafkast, likviditetsreserve ultimo.
- Tegn afhængighederne i et simpelt flowdiagram (evt. i et noteark), så du ved præcis, hvilke celler der fodrer hvilke formler.
- Brug navngivne områder til alle input og output – det øger læsbarheden og gør VBA- eller tabel-loops langt nemmere.
2. Vælg fordelinger – Og begrund dem
| Type af input | Anbefalet fordeling | Hvorfor? | Excel-funktion |
|---|---|---|---|
| Moderat usikker vækst- eller inflationsrate | Normal | Symmetrisk omkring et forventet middel; ekstreme værdier sjældne. | =NORM.INV(RAND(); μ; σ) |
| Aktie- eller råvareafkast (procent) | Lognormal | Sikrer altid positivt resultat; fanger højresvans. | =LOGNORM.INV(RAND(); μ_ln; σ_ln) |
| Omkostningsandel (0-100 %) | Beta | Afgrænset mellem 0 og 1; fleksibel form. | =BETA.INV(RAND(); α; β) |
| Projektbudget eller byggepris | Triangulær | Nemt at parametrisere på min, most likely, max når få data findes. | Custom: se formel nedenfor |
Har du ingen historiske data, kan du starte med en triangulær fordeling: Antag a = min, b = mest sandsynlig, c = max og brug
=IF(RAND() < (b-a)/(c-a), a + SQRT(RAND()*(b-a)*(c-a)), c - SQRT((1-RAND())*(c-a)*(c-b)))
3. Estimér parametre systematisk
- Indsamling af data
Kobl til databaser (Bloomberg, Refinitiv, FRED, virksomhedens ERP) eller brug offentlige tidsserier. - Statistik i Excel
Brug=AVERAGE(),=STDEV.P()og=PERCENTILE.EXC()for at hente μ, σ, P5/P95. - Afsæt ekspertskøn
Når data er sparsomme, indhent estimater fra fagpersoner og kombinér dem med datadrevne intervaller. - Dokumentér kilde + metode i to kolonner: Datakilde og Kommentar. Det hjælper audit-trailen og gør opdateringer nemme.
4. Opret et særskilt “assumptions”-ark
Følgende struktur fungerer i praksis:
- Kolonne A: Inputnavn (fx “Inflation_yr1”)
- Kolonne B: Fordelingstype (Normal)
- Kolonne C-E: Parameter 1-3 (μ, σ, min / most likely / max …)
- Kolonne F: Datakilde (Navn + link/fil)
- Kolonne G: Sist. opdateret (dato)
- Kolonne H: Noter (forklar usikkerheder, antagelser, afhængigheder)
Knyt hver række til en navngivet variabel. I dit modelark trækker du så direkte på disse navne, så ændringer kun foretages ét sted.
5. Tjek konsistens og logik
- Er inputgrænser realistiske? (Ingen negative volumener, ingen rente > 100 %)
- Passer parametrene til historikken? Brug et overlappende histogram til visuel validering.
- Undersøg afhængigheder: Skal to priser korrelere? Overvej Cholesky senere, men notér det allerede nu.
Når alt det ovenstående er på plads, har du et veldokumenteret fundament, som du trygt kan udsætte for 10.000 Excel-kast – og som andre kan forstå om seks måneder.
Tilfældige tal i Excel: Fra RAND() til fordelingstræk og korrelation
Den helt centrale byggesten i en Monte Carlo-simulering er evnen til at trække uafhængige, tilfældige tal fra kendte sandsynlighedsfordelinger. I Excel sker det i tre trin:
- Generér uniforme tilfældige tal
- Omsæt til den ønskede fordeling med inverse fordelingsfunktioner
- Indbyg evt. korrelation på tværs af variabler
1. Rand() og randarray() – Den uniforme byggeklods
=RAND()giver ét tal i intervallet 0-1.=RANDARRAY(rows;columns)returnerer et helt array, f.eks. 10.000 rækker på én gang – langt hurtigere end 10.000 enkeltceller medRAND().- Brug F9 for at recalc’e én gang, eller Formler › Beregningsindstillinger › Manuel, så du styrer hvornår tallene fornyes.
- Seed og reproducerbarhed: Excel har ingen indbygget seed-funktion. Vil du kunne genskabe resultater:
- Gem hele RAND-kolonnen som værdier (
Ctrl + C › Indsæt speciel › Værdier). - Alternativt: styr simuleringen via VBA og
Randomize [seed].
- Gem hele RAND-kolonnen som værdier (
2. Fra uniform til ”rigtig” fordeling
Har du et u fra 0-1, kan du trække fra stort set enhver fordeling ved at kalde den inverse kumulative funktion:
| Fordeling | Typisk brug | Excel-formel |
|---|---|---|
| Normal | Afkast, fejlled | =NORM.INV(u; middel; sigma) |
| Lognormal | Aktiekurser, oliepris | =LOGNORM.INV(u; mu; sigma) |
| Beta | Sandsynligheder (0-1), projektafslutning | =BETA.INV(u; α; β) |
| Triangulær | Budgetposter med min/most likely/max | =IF(u<(mode-min)/(max-min); |
Afgrænsninger (min / max): Hvis fordelingen matematisk kan give ekstreme værdier (fx negativ omsætning), kan du:
- Skifte til en fordeling der naturligt har bounds (lognormal, beta, triangulær).
- Anvende
MAX(MIN(x; upper); lower)for at klippe hale/hoved – men vær bevidst om, at du ændrer fordelingens form.
3. Korrelation mellem input-variable
Mange real-life variabler bevæger sig ikke uafhængigt. Ønsker du fx at korrelere omsætningsvækst og bruttomargin, kan du bruge en simpel Cholesky-tilgang:
- Lav en korrelationsmatrix, f.eks.
| Vækst Margin-----------|----------------Vækst | 1 0,6Margin | 0,6 1
- Brug
=CHISQ.INV.RT()eller VBA til at finde Cholesky-dekompositionen L. Det kan også gøres manuelt:- L = { {1,0};{0, √(1-0,6²)} } * husk at Excel ikke har en native CHOLESKY, så de fleste bruger værktøjet ”Dataanalyse › Matrixdekomposition” (Office 365) eller en lille VBA-funktion.
- Lav to uafhængige normalfordelte z-scores i et array
Z, fx med=NORM.S.INV(RANDARRAY(2;1)). - Gang
L × Zved hjælp af=MMULT(L;Z). Resultatet er et nyt sæt korrelerede z-scores. - Skalér hvert element til den ønskede mean/volatilitet:
=middel+sigma*korreleret_z.
Tip: Har du mange korrelerede faktorer (10+), er det ofte lettere at køre hele matrixregningen i Power Query, Python eller R og blot importere de simulerede serier til Excel.
4. Ydelses- og stabilitetstricks
- Anvend én
RANDARRAY()i stedet for tusindvis afRAND()– det reducerer workbooks til en brøkdel i størrelse. - Saml alle tilfældige tal i et skjult ark, og link herfra – så kan du fryse/optø dem globalt.
- Navngiv ranges (fx
P_Rate_Sim) for at gøre formlerne kortere og minimere fejl.
Når du mestrer RAND(), inverse fordelingstræk og simpel korrelation, har du fundamentet til stort set enhver Monte Carlo-model direkte i Excel.
Trin-for-trin: Byg modellen og kør 10.000 simuleringer
En Monte Carlo-model i Excel kan bygges på under 30 minutter, hvis strukturen er gennemtænkt fra start. Følg guiden nedenfor, så du undgår de klassiske faldgruber og står tilbage med en model, der kan køre 10.000 simuleringer uden at bryde sammen.
- Opret en tydelig inputsektion
- Indsæt et nyt ark kaldet Inputs. Brug en tabel (
Indsæt > Tabel) med kolonnerne Navn, Fordeling, Parameter 1, Parameter 2, Formel. - Navngiv alle centrale celler (
Formler > Definer navn) – f.eks. Vækstrate, Margin, WACC. Det gør formlerne i resten af modellen meget mere læsbare. - Opsæt fordelingstræk med
RAND()ellerRANDARRAY()som grundlag. Eksempel på en normalfordelt vækstrate:
=NORM.INV(RAND(), 0,02, 0,01) - Vil du afgrænse værdier (f.eks. mellem 0 % og 10 %), så pak formlen ind i
MAX(MIN(...))eller brug en triangulær fordeling:
=IF(RAND()<=(B-A)/(C-A), A+SQRT(RAND()*(B-A)*(C-A)), C-SQRT((1-RAND())*(C-B)*(C-A)))
- Indsæt et nyt ark kaldet Inputs. Brug en tabel (
- Byg beregninger og output-KPI’er i et separat ark (Model)
- Hent inputs med de navngivne områder – aldrig med direkte cellereferencer (Vækstrate i stedet for Inputs!$C$7).
- Beregn cashflows, og slut af med en formel for NPV:
=NPV(WACC; Cashflow_1:Cashflow_n) + Initial_Investment - Gem øvrige nøgletal (IRR, årligt afkast, pay-back) i én lodret kolonne; de skal senere samles i en datatabel.
- Opret en “dummy”-variabel til at drive simuleringen
I et nyt ark (Sim) skriv tallet 1, 2, 3 … ned til 10.000 i kolonne A – eller brug:
=SEKVENS(10000;1;1;1)Det er kun en tæller; Excel vil genberegne alle tilfældige tal, hver gang tælleren bruges i en datatabel.
- Kør 10.000 simuleringer med Datatabel
- I Sim placerer du modellen sidste NPV-formel i celle B1 (eller refererer til den:
=Model!C10). - Marker området
A1:B10001(dummy-kolonnen + én outputkolonne). - Vælg
Data > Hvad-hvis-analyse > Datatabel…. - Lad Rækkeinputcelle stå tom og sæt Søjleinputcelle til en vilkårlig tom celle (f.eks.
Sim!Z1). Klik OK.
Excel gentager nu modellen 10.000 gange og returnerer et NPV-resultat i hver række.
Tip: Skal du samle flere outputs (NPV, IRR, afkast), udvid datatabellen vandret: kolonne C med IRR, kolonne D med afkast osv.
- I Sim placerer du modellen sidste NPV-formel i celle B1 (eller refererer til den:
- Alternativ: En ultrakort VBA-makro
Datatabeller kan være langsomme i større modeller. Paste følgende i VBA-editoren (
Alt + F11):Sub MonteCarlo() Dim i As Long, n As Long: n = 10000 For i = 1 To n 'Recalc alle tilfældige input Application.Calculate 'Kopier output til resultattabel Sheets("Sim").Cells(i + 1, 2).Value = Sheets("Model").Range("NPV_out").Value Next iEnd SubNPV_out er blot et navngivet område med din NPV-formel. Makroen giver fuld kontrol over hvor resultaterne gemmes, og du kan tilføje fejlfangst eller progress-bar efter behov.
- Performance- og fejlfangsttips
- Slå Automatisk beregning fra (
Formler > Beregningsindstillinger > Manuel) mens du opstiller modellen. Tænd først til sidst. - Brug
RANDARRAY()i ét hug i stedet for tusindvis af individuelleRAND()– det reducerer Excel-volatilitet. - Indsæt
=IFERROR(…; "")omkring outputformler; én fejl stopper hele datatabellen. - Gem en kopi, før du kører >5.000 iterationer – store datatabeller kan ikke fortrydes (Undo).
- Hold resultatområdet i et særskilt ark for at undgå unødvendig opdatering af grafer og pivottabeller under simuleringen.
- Slå Automatisk beregning fra (
Når de 10.000 resultater er på plads, er næste skridt at analysere dem – histogrammer, percentiler og VaR/CVaR – hvilket vi dækker i den følgende sektion.
Analysér resultaterne: Histogram, percentiler, VaR/CVaR og følsomhed
Når de f.eks. 10.000 simuleringer er gennemført, sidder du med en lang kolonne af resultater – typisk ét tal pr. iteration (fx NPV eller det årlige porteføljeafkast). Næste skridt er at strukturere, visualisere og fortolke tallene, så de giver ledelsesmæssig mening.
1. Saml outputtet i en resultattabel
- Opret et separat ark kaldet “Resultater”.
- Indsæt dine model-outputs i en kolonne (ofte via en dynamisk
SPILL-reference fra selve simuleringen). - Beregn de mest grundlæggende nøgletal lige ved siden af:
- Forventet værdi (middel):
=AVERAGE(OutputRange) - Standardafvigelse:
=STDEV.S(OutputRange) - P5 / P50 / P95:
=PERCENTILE.INC(OutputRange;0,05)osv.
- Forventet værdi (middel):
2. Visualisér usikkerheden
a) Histogram
- Opret et bin-interval (fx i trin af 1 mio. kr. eller 1 %-point).
- Brug
=FREQUENCY(OutputRange;BinRange)eller det moderne=HISTOGRAMi Excel 365. - Indsæt et kolonnediagram og tilføj dataetiketter, så fordelingsformen straks kan aflæses.
b) Empirisk CDF (kumulativ fordeling)
- Sorter outputkolonnen med
=SORT(OutputRange;1;TRUE). - Lav en hjælpekolonne med løbende andel:
=SEQUENCE(COUNT(OutputRange);;;1)/COUNT(OutputRange). - Plot et XY-diagram (scatter) – X-akse = det sorterede output, Y-akse = kumulativ sandsynlighed. Det giver et hurtigt blik på, hvor meget af massen der ligger over/under beslutningsrelevante tærskler.
3. Risk metrics: Var og cvar
- Value at Risk (VaRα): negativt værste resultat med sandsynlighed α. Formel i Excel:
=-PERCENTILE.INC(OutputRange;1-α). Sæt fx α = 95 % (0,95) for VaR95. - Conditional Value at Risk (CVaR / Expected Shortfall): gennemsnit af tab, der overskrider VaR.
- Filtrér output, der er mindre end VaR-grænsen (brug
FILTEReller en pivottabel). - Beregning:
=-AVERAGE(FILTER(OutputRange;OutputRange<VaR_grænse)).
- Filtrér output, der er mindre end VaR-grænsen (brug
4. Scenarie- og følsomhedsanalyse
Tornado-diagram (one-way sensitivity)
- Definér de vigtigste input-parametre (diskonteringsrente, vækst, marginer osv.).
- Løb hver parameter igennem et lavt og højt niveau (fx P5 og P95), mens de øvrige holdes på medianen.
- Beregning af ændringen i output:
=Output_high - Output_low - Anbring resultaterne i en vandret søjlegraf sorteret efter absolut påvirkning – de bredeste søjler viser, hvor beslutningsfokus skal ligge.
Scenarier
Hvis to-tre kombinationer af antagelser er særligt interessante (optimistisk, basis, pessimistisk), kan du opsummere deres respektive positioner i fordelingen ved at markere dem på histogrammet eller CDF’en. Det skaber genkendelige “ankre” for ledelsen.
5. Tolkning – Fra tal til beslutning
- Se på hele spektret i stedet for kun middelværdien. En høj standardafvigelse eller en tyk hale til venstre kan gøre et projekt uattraktivt trods positiv forventet NPV.
- VaR & CVaR fungerer som worst-case vagthunde: Hvor stor er sandsynligheden for at bryde låneaftaler eller afvige fra budget?
- Kryds referencepunkter (break-even, kapitalkrav, bonustriggere) med percentiler – “Der er 18 % risiko for, at NPV’en bliver negativ”.
- Brug tornado-diagrammet til at allokere analyseressourcer: Hvilke input bør undersøges nøjere, og hvor giver det mening at afdække risiko (FX-hedge, price floors, mv.)?
Med en velstruktureret resultatanalyse kan du sætte procenter og kroner på usikkerheden – præcis det, Monte Carlo-simulering i Excel handler om.
Best practices, faldgruber og næste skridt
En Monte Carlo-simulering er kun så god som de antagelser, der ligger bag. Brug nedenstående trin som en fast arbejdsgang, hver gang du bygger eller opdaterer en model.
- Valider inputfordelinger
- Sammenlign parametre (middel, spredning, haleopførsel) med historiske dataserier eller branchebenchmarks.
- Indhent ekspert-eliciterede vurderinger, især hvor datagrundlaget er tyndt. Dokumentér interview- eller workshop-noter i et særskilt ark (
Assumptions_Log). - Kør goodness-of-fit tests (fx Kolmogorov-Smirnov) i et hjælpeprogram som R, Python eller XLSTAT for at teste, om den valgte fordeling passer.
- Backtest og kalibrér
- Sammenhold ældre forecasts med de faktisk observerede udfald. Justér fordelingernes parametre, hvis modellen systematisk over- eller undervurderer risiko.
- Gem backtest-resultater i en versionsmappe (
/Backtest/2024Q1/) så du kan spore forbedringer over tid.
- Versionsstyring
- Gem
.xlsx-filer under versionsnumre (Model_v1.2.xlsx). Brug evt. Git LFS eller OneDrive-versioner for automatisk historik. - Frys en PDF-rapport af antagelser og resultater for hver publiceret version.
- Gem
Typiske faldgruber (og hvordan du undgår dem)
- Skjult antagelse om uafhængighed: Hvis inputvariabler reelt er korrelerede (fx omsætning og bruttomargin), skal du implementere korrelationsmatricer via Cholesky-faktoriseret
MMULT(). Ignorerer du dette, undervurderes risikoen. - For få iterationer: Under 1 000 iterationer giver typisk ustabile halestatistikker. Brug 5 000-10 000 som minimum, og test konvergens ved at plotte middelværdi ± 2·SE mod antal kørsel.
- Forkert fordelingstype: Normalfordelinger til klart positive variable (fx efter-skat cash flow) skaber negative, urealistiske udfald. Overvej lognormal, beta eller triangulær i stedet.
- ”Hard-coding” af seed: Et fikseret
RAND()-seed er fint til audit, men kør også en ”shake-down” med forskellige seeds for at sikre robusthed. - Manglende enhedskonsistens: Sørg for, at alle input er justeret til samme valuta, inflationsbasis og tidsenhed, inden du sampler.
Checkliste til kvalitetssikring
| Spørgsmål | Ja | Nej/N.A. |
|---|---|---|
| Er alle inputfordelinger dokumenteret med kilde & rationale? | ||
| Er korrelationer identificeret og korrekt implementeret? | ||
| Er modellen backtestet mod historik? | ||
| Er antal iterationer valideret (konvergens-test)? | ||
| Er alle formler låst til navngivne områder for let audit? | ||
| Er der genereret en fast PDF-rapport for versionen? |
Skabeloner og næste skridt
For at spare tid kan du bygge en basis-skabelon med følgende ark:
- Input_Distributions – samler parametre,
NORM.INV()/LOGNORM.INV()-formler, dokumentation. - Simulation_Core – dummy-tæller i kolonne A,
Hvad-hvis-analysevia Datatabel. - Outputs – tabel til percentiler, VaR/CVaR, dynamiske histogrammer.
- Tornado – følsomhedsanalyse med
DATA.TABLE(). - Audit_Trail – changelog, seed-nummer, timestamp og ansvarlig modellør.
- ”Financial Modelling in Excel for Dummies” – Danielle Stein Fairhurst.
- ”Simulation Modeling Using @RISK” – Albright & Winston (relevant også uden @RISK-licens).
- xlwings og openpyxl – hvis du vil automatisere Excel fra Python.
- Oracle Crystal Ball, Palisade @RISK – specialværktøjer til mere avancerede modeller.
- Towards Data Science: Monte Carlo-introduktion – hands-on eksempler i flere sprog.
Med en solid proces, klare dokumentationskrav og et par simple tjeklister bliver dine Excel-simulationer både troværdige, reproducerbare og nemme at forklare til beslutningstagere.












