Was macht Sensitivitätstabellen (Ein- und Zwei-Variablen)?
Wann verwenden
Verwenden Sie dies, wenn ein Strategie- oder Finanzmodell einen einzelnen Schlüsseloutput hat und Sie zeigen möchten, wie dieser Output reagiert, wenn ein oder zwei Treiber über einen Bereich variiert werden. Typische Treiber sind Preis, Volumen, Diskontsatz, Wachstum, Abwanderung oder Kosten pro Einheit. Diese Fähigkeit ERSTELLT eine herunterladbare .xlsx von Grund auf in der Claude-App (openpyxl plus numpy), mit Live-Formeln und einem Neuberechnungs- und Verifikationsdurchlauf. Es ist nicht das Claude-Excel-Add-In.
Was erstellt wird
Ein einzelner Sensitivity-Tab, der an ein bestehendes Modell anknüpft. Er referenziert die Eingabezellen und die Ausgabezelle des Modells, legt Ein-Variablen- und Zwei-Variablen-Gitter an und färbt den Ergebnisblock mit einer Farbskala ein. Wenn das Quellmodell auf einem anderen Tab liegt, verknüpft sich das Gitter mit tabellenübergreifenden Referenzen, sodass es live bleibt.
Erstellungs-Workflow
- Identifizieren Sie die Ausgabezelle (z. B.
Model!B40für NPV) und die eine oder zwei Eingabezellen, die sie antreiben (z. B.Model!B6Diskontsatz,Model!B7Wachstum). - Bestätigen Sie, dass der Output eine Live-Formelkette zurück zu diesen Eingaben ist. Wenn der Output hartcodiert ist, stoppen Sie und verdrahten Sie das Modell zuerst; eine Datentabelle über eine Konstante gibt die Konstante zurück.
- Wählen Sie Eingabebereiche um den Basisfall herum (z. B. Basisdiskontsatz 10 %, Durchlauf 6 bis 14 % in Schritten von 2).
- Erstellen Sie die native Excel-Datentabellenstruktur: Eckformel, Eingabeachsen und das
{=TABLE(r,c)}-Array (siehe Spezifikation). - ERSTELLEN SIE AUCH das codeberechnete Gitter als robuste Fallback-Lösung: Bewerten Sie das Modell in Python für jede Eingabekombination neu und schreiben Sie die resultierenden Werte als beschriftete Matrix.
- Wenden Sie eine 3-Farben-Skala auf den Ergebnisblock an und beschriften Sie beide Achsen mit den Namen der Eingabezellen.
- Fügen Sie den Prüfblock hinzu.
- Berechnen Sie die Arbeitsmappe in einer echten Engine (headless LibreOffice) neu.
- Überprüfen Sie null Formelfehler (#REF!, #DIV/0!, #WERT!, #NAME?), bestätigen Sie, dass die Prüfungen bestanden werden, und liefern Sie die .xlsx aus.
Tab-für-Tab-Spezifikation
Sensitivity-Tab, Ein-Variablen-Block
Wählen Sie eine Layout-Richtung. Für Eingaben, die eine SPALTE hinunterlaufen:
B3: die Ausgabeformel, die den Live-Output referenziert:=Model!B40. Dies ist die Eckzelle.A4:A10: die Eingabewerte, die Sie durchlaufen (blaue Eingaben), z. B. 6%, 8%, 10%, 12%, 14%.B4:B10: die Datentabellen-Ergebnisspalte.- Wählen Sie
A3:B10aus, dann Daten > Was-wäre-wenn-Analyse > Datentabelle, lassen Sie das Feld "Zeileneingabezelle" leer und setzen Sie "Spalteneingabezelle" aufModel!B6. Excel schreibt{=TABLE(,Model!B6)}inB4:B10. - openpyxl kann die Array-Formelzeichenfolge
=TABLE(,Model!B6)in den Block und=Model!B40in die Eckzelle schreiben, aber die Werte werden erst nach der Neuberechnung in einer echten Engine ausgefüllt.
Codeberechnete Fallback-Lösung für denselben Block (empfohlen bei der Generierung per Code), geschrieben als beschriftete Matrix darunter, z. B. ab A14:
A14: Beschriftung "Diskontsatz".B14: "NPV (berechnet)".- Für jeden Eingabewert in
A15:A21setzt PythonModel!B6auf diesen Wert, berechnet die Modelllogik in numpy neu und schreibt den resultierenden NPV als einfachen Wert in Spalte B. - Behalten Sie beide: Die native Datentabelle beweist, dass sie live ist; die berechnete Matrix garantiert ausgefüllte Zahlen, auch bevor der Benutzer Excel öffnet.
Sensitivity-Tab, Zwei-Variablen-Block
- Eckzelle
E3:=Model!B40(der Live-Output). E4:E10: Zeileneingabewerte die LINKE Kante hinunter (erster Treiber, z. B. Wachstum 0%, 1%, ..., 6%).F3:L3: Spalteneingabewerte über die OBERE Zeile (zweiter Treiber, z. B. Diskontsatz 6% ... 14%).- Wählen Sie
E3:L10aus, Daten > Was-wäre-wenn-Analyse > Datentabelle, Zeileneingabezelle =Model!B7(der horizontale Treiber), Spalteneingabezelle =Model!B6(der vertikale Treiber). Excel fülltF4:L10mit{=TABLE(Model!B7,Model!B6)}. - Achten Sie auf die Ausrichtung: Die Zelle, die mit der OBERE Zeile verbunden ist, geht in das Feld "Zeileneingabezelle"; die Zelle, die mit der LINKEN Spalte verbunden ist, geht in das Feld "Spalteneingabezelle". Ein Vertauschen transponiert das Ergebnis stillschweigend.
- Codeberechnete Fallback-Lösung: Eine doppelte Schleife in Python über beide Achsen, die die Wertematrix in einen beschrifteten Block schreibt (Achsenüberschriften in Grün, wenn sie aus dem Modell stammen, blau, wenn es Literal-Durchlaufwerte sind).
Auswahl der Achsenbereiche
- Zentrieren Sie jede Achse auf den Basisfallwert, sodass die Basis in der mittleren Zeile und der mittleren Spalte sitzt, was den Mittelzellen-Check sinnvoll macht.
- Verwenden Sie eine ungerade Anzahl von Schritten (5, 7 oder 9), sodass eine einzelne mittlere Zelle exakt mit dem Basisfall übereinstimmt, anstatt zwischen zwei Zellen zu liegen.
- Halten Sie die Schrittgrößen auf jeder Achse gleichmäßig (konstantes Inkrement), damit das Raster als sauberer Gradient lesbar ist und die Farbskala interpretierbar bleibt.
- Bei Zinssätzen in absoluten Punkten durchlaufen (8%, 10%, 12%), nicht als relativer Prozentsatz des Basisfalls, um Leser nicht zu verwirren.
openpyxl-Erstellungshinweise
- Schreiben Sie die Eckzelle als echte Formelzeichenfolge:
ws["B3"] = "=Model!B40". Fügen Sie nicht den aktuellen numerischen Wert des Outputs ein. - Für das native Datentabellen-Array kann openpyxl den
=TABLE(...)-Text speichern, aber eine echte Engine muss neu berechnen, um den Block zu füllen; behandeln Sie das Array als Platzhalter, bis der Neuberechnungsschritt ausgeführt wird. - Beim Schreiben der berechneten Fallback-Lösung setzen Sie die Datenwerte mit Python (
ws.cell(row=r, column=c, value=float(npv))) und halten Sie sie visuell getrennt vom Live-Block mit einer Kopfnotiz wie "berechneter Schnappschuss". - Wenden Sie die Farbskala mit
openpyxl.formatting.rule.ColorScaleRuleüber den Ergebnisblock an, ordnen Sie Min einer Farbe und Max einer anderen über einen Mittelpunkt zu.
Formel- und Formatierungskonventionen
- Blaue Schrift für Eingaben (die durchlaufenen Achsenwerte, die Sie eingeben).
- Schwarze Schrift für tabelleninterne Formeln.
- Grüne Schrift für tabellenübergreifende Verknüpfungen wie
=Model!B40. - Keine Hardcodes, wo eine Formel hingehört: Die Eckzelle muss
=Model!B40sein, niemals die getippte Basisfallzahl. - Eine konsistente Formel pro Zeile oder Spalte: Der gesamte Datentabellenblock ist ein einzelnes Array; die berechnete Fallback-Lösung verwendet einen Python-Ausdruck, der auf das gesamte Raster angewendet wird.
- Zahlenformate: Zinssätze als
0,0%, Währungsoutputs als#.##0, Verhältnisse als0,00. Achsenwerte entsprechen der Einheit der Eingabezelle, die sie ersetzen.
Prüfungen
- Eckzelle entspricht dem Live-Output:
=(B3=Model!B40)gibt WAHR zurück. - Achsen mit den Namen der Eingabezellen beschriftet (eine Textbeschriftung über oder neben jeder Achse, die den Treiber und seine Zelladresse nennt).
- Mitte des Rasters stimmt mit dem Basisfall überein: Die Rasterzelle an der Basisfall-Zeile und Basisfall-Spalte entspricht dem aktuellen Output des Modells,
=(<Mittelzelle>=Model!B40)WAHR. - Für die berechnete Fallback-Lösung: Die Zelle bei den Basiseingaben entspricht der nativen Datentabellen-Zelle bei denselben Eingaben (innerhalb der Rundung).
Neuberechnen und verifizieren
Speichern Sie mit openpyxl, berechnen Sie dann headless neu (z. B. libreoffice --headless --convert-to xlsx), damit =TABLE(...) und tabellenübergreifende Links Werte erhalten. Laden Sie neu und scannen Sie jede Zelle auf #REF!, #DIV/0!, #WERT!, #NAME?. Bestätigen Sie, dass die drei Prüfungen WAHR ergeben. Wenn ein Fehler oder FALSCH auftritt, korrigieren Sie die Referenz oder den Bereich und wiederholen Sie den Vorgang, bis alles sauber ist, und liefern Sie dann aus.
Zu sammelnde Eingaben
- Pfad zum Quellmodell und die genaue Ausgabezelladresse.
- Die eine oder zwei Eingabezelladressen zum Durchlaufen.
- Basisfallwerte und der gewünschte Bereich und Schritt für jede Achse.
- Einheiten und bevorzugte Zahlenformate für Achsen und Output.
Beispiel
Hypothetisches Modell: Model!B40 = Projekt-NPV, angetrieben durch Model!B6 Diskontsatz (Basis 10%) und Model!B7 Umsatzwachstum (Basis 3%). Ein-Variablen-Block durchläuft Diskontsatz 6% bis 14% in 2%-Schritten und liefert NPV von (z. B.) 1.210 / 980 / 760 / 560 / 380 in hypothetischen Einheiten. Zwei-Variablen-Block kreuzt Wachstum 0% bis 6% gegen Diskontsatz 6% bis 14%; die Mittelzelle bei 3% Wachstum und 10% Diskontsatz entspricht Model!B40 von 760, was bestätigt, dass der Basisfall in der Mitte des Rasters sitzt.