Johan Eriksson, controller på ett byggföretag i Stockholm, behövde uppskatta risken för budgetöverskridning på ett 12 MSEK-projekt. Med en Monte Carlo-simulering i Excel körde han 10 000 scenarion och identifierade att det fanns 30 % risk för överskridning med mer än 1 MSEK. Beslutsunderlaget ändrade projektplanen — och sparade bolaget pengar.
Monte Carlo används av 70 % av Fortune 500-företag för finansiell planering. Metoden låter dig ersätta ett enda osäkert tal med en hel sannolikhetsfördelning — och Excel har alla verktyg som behövs, utan ett enda tillägg.
Den här guiden visar hur du bygger en fullständig simulering från grunden: antagandetabell, iterationer via Datatabell, histogram och konfidensintervall.
Vad är Monte Carlo-simulering och när används den?
Grundidén är enkel: istället för att mata in ett enda värde för en osäker variabel — säg materialkostnad — definierar du en sannolikhetsfördelning (min, max, mest sannolikt). Sedan drar Excel tusentals slumpmässiga värden från den fördelningen och beräknar utfallet varje gång. Resultatet är inte ett tal utan en distribution av möjliga utfall.
Metoden används brett för projektkostnadsuppskattning, investeringsanalys, riskbedömning och supply chain-optimering. Den passar bäst när du har flera osäkra variabler som samverkar och när ett enda "mest troligt"-scenario inte ger tillräcklig information för beslutet.
Monte Carlo passar inte för deterministiska processer utan verklig variation, eller när historiska data för att definiera fördelningarna saknas helt.
Steg 1–2: Bygg antagandetabellen
Börja med att identifiera vilka variabler i din modell som är genuint osäkra. Lägg dessa i en strukturerad tabell med min, max och mest sannolikt värde per variabel.
-
Identifiera osäkra variabler
Exempel från ett byggprojekt: Materialkostnad (min 400 000 kr, max 600 000 kr, mest sannolikt 490 000 kr) och Arbetstid (min 800 h, max 1 200 h, mest sannolikt 950 h). Håll listan kortfattad — 3–8 variabler räcker för de flesta modeller.
-
Välj sannolikhetsfördelning per variabel
Likformig (alla värden lika sannolika inom intervallet): enklast att implementera. Triangulär (tyngd kring "mest sannolikt"): mer realistisk för projektkostnader. Normal: lämplig när processen styrs av många oberoende faktorer.
För likformig fördelning i Excel:
För normalfördelning:
Steg 3–4: Kör 1 000 iterationer med Datatabell
Det smarta med Excels inbyggda Datatabell är att den kör om hela beräkningskedjan för varje rad — utan VBA. Varje rad blir en ny simulering med nya slumptal.
-
Skapa en samlingscell för utfallet
Bygg en formel som summerar dina slumpvariabler till ett totalt utfall, exempelvis:
totalkostnad = materialkostnad + arbetstid * timkostnad + overheadandel. Se till att formeln refererar till cellerna i din antagandetabell. -
Sätt upp Datatabellen
Skriv siffrorna 1–1 000 i kolumn A (rad 2–1001). I cell B1 skriver du en referens till din utfallscell. Markera A1:B1001. Välj Data → Konsekvensanalys → Datatabell. Lämna Radindata tom — klicka OK. Excel räknar om slumptalen 1 000 gånger och fyller kolumn B med resultaten.
Steg 5: Analysera resultatet med histogram och konfidensintervall
Med 1 000 värden i kolumn B kan du nu beräkna statistik och visualisera fördelningen.
Percentiler och konfidensintervall
Använd PERCENTIL-funktionen för att beräkna var utfallen koncentreras:
Tolkning: "Med 90 % sannolikhet hamnar totalkostnaden mellan P5 och P95." Det ger beslutsfattare ett konkret intervall att planera kring.
Exempelresultat — projektbudget 5 MSEK
| Percentil | Belopp | Tolkning |
|---|---|---|
| P5 | 4 250 000 kr | Optimistiskt scenario (5 % chans att hamna lägre) |
| P50 | 5 120 000 kr | Mediankostnaden — lika sannolikt att hamna högre |
| P95 | 6 480 000 kr | Pessimistiskt scenario (5 % chans att överskrida) |
| Genomsnitt | 5 180 000 kr | Förväntat värde över alla simuleringar |
Histogram med FREKVENS()
Definiera en serie intervallgränser (t.ex. 4,0 / 4,5 / 5,0 / 5,5 / 6,0 / 6,5 MSEK). Använd =FREKVENS(B2:B1001;E2:E8) som en matrisformel (Ctrl+Skift+Enter) för att räkna antalet utfall per intervall. Bygg sedan ett stapeldiagram på de värdena.
Vanliga fel och hur du undviker dem
- Fel 1 — RAND() direkt i alla celler: Slumptalen räknas om vid varje knapptryckning, vilket gör resultaten instabila. Lösning: kör alltid via Datatabellen som "fryser" värdena per iteration.
- Fel 2 — För få iterationer: Under 500 ger instabila percentiler. Använd minimum 1 000, helst 10 000 för professionella analyser.
- Fel 3 — Likformig fördelning för allt: I verkligheten är de flesta kostnadsvariabler inte jämnt fördelade. Triangulär eller PERT-fördelning är mer realistisk och ger snävare konfidensintervall.
- Fel 4 — Ignorera korrelation: Om material- och arbetskostnader tenderar att stiga tillsammans ger oberoende simulering ett falskt optimistiskt resultat. Korrelerade variabler kräver mer avancerade tekniker eller specialverktyg.
Vanliga frågor
Behöver jag VBA-makron för Monte Carlo i Excel?
Nej. Excels inbyggda Datatabell (Data → Konsekvensanalys) ger dig hundratals eller tusentals iterationer utan en enda rad VBA-kod. VBA kan vara användbart om du vill automatisera upprepade körningar eller exportera resultat, men det är inte nödvändigt för en grundläggande simulering.
Hur många iterationer ger tillräcklig precision?
För de flesta praktiska syften räcker 1 000 iterationer för att ge stabila medianvärden. Extrema percentiler (P1, P99) kräver minst 5 000–10 000 iterationer för att vara tillförlitliga. Tumregel: kör 1 000, kontrollera om P95 varierar mer än 2–3 % vid ny körning. Gör det det, öka till 10 000.
Kan jag använda Monte Carlo för aktieportföljer?
Ja — Monte Carlo är en standardmetod för att simulera portföljavkastning. Du modellerar varje tillgångs dagliga avkastning som normalfördelad (med historisk volatilitet) och kör tusentals möjliga framtida banor. Resultatet visar fördelningen av möjliga portföljvärden vid en given tidshorisont. Observera att historisk volatilitet inte garanterar framtida resultat.
Hur skiljer sig RAND() från SLUMP() i äldre Excel-versioner?
RAND() och SLUMP() är exakt samma funktion — SLUMP() är bara det svenska namnet i äldre lokaliserade Excel-versioner (pre-2013). I moderna Excel 365/2019+ fungerar båda synonymt och returnerar ett likformigt fördelat slumptal mellan 0 och 1. RAND() rekommenderas för kompatibilitet med engelska formler och dokumentation.