dcf-model について
dcf-modelは、株式評価用のExcel DCFモデルを作成するスキルです。数式による予測、段階ごとのユーザー確認、シナリオ分析、感応度表を重視します。
主な機能
- 01数式ベースのDCF予測
- 02弱気・基本・強気シナリオ
- 03WACCとターミナルバリューの計算
- 04数式による感応度表
- 05段階ごとのユーザー確認
- 06ハードコード入力への出典コメント
活用シーン
- 01DCFモデルによる企業価値評価
- 02複数シナリオでの評価比較
- 03WACCと成長率の前提別に株価を検証
MCP 対応
設定済みのMCPサーバーから構造化された財務データを取得できます。ユーザー提供データやWeb情報も利用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wind-alice/ alicemarket --skill dcf-modelインストール後、Claude Code で/dcf-modelを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
requirements.txtTROUBLESHOOTING.mdscripts/validate_dcf.py詳細
DCFモデルビルダー
概要
このスキルは、投資銀行の基準に従って、株式評価向けの機関投資家品質のDCFモデルを作成します。分析ごとに、詳細なExcelモデルが作成されます(DCFシートの下部に感応度分析が含まれます)。
ツール
- データ取得には、ユーザーから提供された情報と、利用可能なMCPサーバーの情報をすべて使用することを基本とします。
重要な制約事項 — まずお読みください
これらの制約事項は、すべてのDCFモデル構築に適用されます。作業を始める前に確認してください。
環境:Office JS と Python/openpyxl の使い分け:
- Excel 内で実行する場合(Office アドイン/Office JS 環境): Python/openpyxl は使用せず、Office JS を直接使用してください。数式は
range.formulas = [["=D19*(1+$B$8)"]]のように設定します。別途再計算する必要はありません。Excel がネイティブに計算します。書式設定にはrange.format.*を使用してください。ハードコードより数式を優先するルールは同じです。.formulasを設定し、派生セルには.valuesを決して使用しないでください。 - スタンドアロンの .xlsx ファイルを生成する場合(ライブのExcelセッションがない場合): 以下の説明に従って Python/openpyxl を使用し、納品前に
recalc.pyを実行してください。 - このスキルの残りの部分では openpyxl の例を使用しています。その環境では Office JS API の呼び出しに置き換えてください。ただし、数式文字列、セルのコメント、セクションごとのチェックポイント、感応度テーブルのループなど、すべての原則は同様に適用されます。
⚠️ Office JS のセル結合に関する注意点: 結合セルを使ってセクション見出しを作成する際、.merge() を呼び出してから結合範囲に .values を設定しないでください。Office JS は範囲の元のサイズを報告し続けるため、InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range エラーが発生します。代わりに、値を左上のセルだけに書き込んでから、範囲全体を結合して書式設定してください。
// WRONG — throws InvalidArgument:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["MARKET DATA & KEY INPUTS"]]; // 1×1 array vs 1×8 range → fails
// CORRECT — value first on single cell, then merge + format the range:
ws.getRange("A7").values = [["MARKET DATA & KEY INPUTS"]];
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.format.fill.color = "#1F4E79";
hdr.format.font.bold = true;
hdr.format.font.color = "#FFFFFF";
これは、DCF 内のすべての結合されたセクション見出し(市場データ、シナリオブロック、キャッシュフロー予測、ターミナルバリュー、評価サマリー、感応度テーブル)に適用されます。
ハードコードより数式を優先(必須):
- すべての予測、マージン、割引係数、PV、感応度セルは、必ず有効なExcel数式にしてください。Pythonで計算した値を数値として書き込んではいけません。
- openpyxl を使用する場合、
ws["D20"] = "=D19*(1+$B$8)"は正しい方法です。ws["D20"] = calculated_revenueは誤りです。 - ハードコードできる数値は、次のものに限られます:(1)過去の実績入力値、(2)前提条件のドライバー(成長率、WACCの入力値、ターミナル g)、(3)現在の市場データ(株価、負債残高)。
- Pythonで何かを計算して結果を書き込もうとしていることに気づいたら、そこで止めてください。ユーザーが前提条件を変更したときにモデルが連動して変化する必要があります。
ユーザーと段階ごとに確認する(最初から最後まで一気に構築しない):
- データ取得後 → 生の入力値ブロック(売上高、マージン、株式数、純負債)をユーザーに提示し、予測に進む前に確認してください。
- 売上高予測後 → 予測売上高と成長率を提示し、マージンの組み立てに進む前に確認してください。
- FCFの組み立て後 → FCFスケジュール全体を提示し、WACCを計算する前にロジックを確認してください。
- WACCの計算後 → 計算と入力値を提示し、割引計算に進む前に確認してください。
- ターミナルバリューとPVの計算後 → 株主価値へのブリッジ(EV → 株主価値 → 1株当たり価値)を提示し、感応度テーブルを作成する前に確認してください。
- 各段階でエラーを検出してください。感応度テーブルの作成後に誤ったマージン前提が判明した場合、後続のすべてを再構築することになります。 感応度テーブル:
- 行数と列数は奇数にします(標準は5×5、場合によっては7×7)。これにより、必ず真の中央セルができます。
- 中央セル=ベースケース。 中央の行見出しと列見出しが、モデルの実際の前提と完全に一致するように軸の値を設定します(例:ベースのWACCが9.0%の場合、中央の行は9.0%、ターミナル成長率が3.0%の場合、中央の列は3.0%)。そのため、中央セルの出力はモデルの実際のインプライド株価と一致する必要があります。これが、テーブルが正しく作成されていることを確認する健全性チェックになります。
- 中央セルを中程度の青色の塗りつぶし(
#BDD7EE)と太字で強調し、ベースケースのセルがすぐにわかるようにします。 - すべてのセル(通常は3つのテーブル×25セル=75セル)に、完全なDCF再計算式を設定します。
- openpyxlのループ(またはOffice JSのループ)を使って、数式をプログラムで書き込みます。
- プレースホルダーテキストや線形近似は使用せず、手作業も不要にします。
- 各セルで、その前提の組み合わせに基づいてDCF全体を再計算する必要があります。
セルのコメント:
- ハードコードした各値を作成する際に、その値のセルコメントを追加します。
- 形式:"Source: [System/Document], [Date], [Reference], [URL if applicable]"
- 次のセクションに進む前に、青色の入力セルすべてにコメントを付けます。
- 後回しにしたり、「TODO: add source」と記載したりしないでください。
モデルレイアウトの計画:
- 数式を書き込む前に、すべてのセクションの行位置を定義します。
- すべての見出しとラベルを先に書き込みます。
- 次に、すべてのセクション区切りと空白行を書き込みます。
- その後、固定した行位置を使って数式を書き込みます。
- 数式を作成したら、すぐにテストします。
数式の再計算:
- 納品前に
python recalc.py model.xlsx 30を実行します。 - ステータスが「success」になるまで、すべてのエラーを修正します。
- 数式エラー(#REF!、#DIV/0!、#VALUE!など)はゼロにする必要があります。
シナリオブロック:
- Bear/Base/Bullケースごとに個別のブロックを作成します。
- 各ブロック内で、予測対象年にわたる前提を横方向に表示します。
- IF数式を使用します:
=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell])) - 数式が正しいシナリオブロックのセルを参照していることを確認します。
DCFプロセスのワークフロー
ステップ1:データの取得と検証
MCPサーバー、ユーザー提供データ、ウェブからデータを取得します。
データソースの優先順位:
- MCPサーバー(設定されている場合)— Daloopaなどのプロバイダーから構造化された財務データを取得します
- ユーザー提供データ — ユーザーの調査による過去の財務データ
- ウェブ検索/取得 — 必要に応じて、現在の株価、ベータ、負債、現金を取得します
検証チェックリスト:
- 純負債か純現金かを確認します(バリュエーションにおいて重要です)。
- 希薄化後発行済株式数を確認します(最近の自社株買いや株式発行がないか確認します)。
- 過去の利益率がビジネスモデルと整合していることを検証します。
- 売上高成長率を業界ベンチマークと照合します。
- 税率が妥当であることを確認します(通常は21~28%)。
ステップ2:過去の実績分析(3~5年)
以下を分析して記録します:
- 売上高成長の傾向:CAGRを計算し、成長要因を特定します
- 利益率の推移:粗利益率、EBIT利益率、FCF利益率を追跡します
- 資本集約度:売上高に対するD&AおよびCapExの割合を確認します
- 運転資本効率:売上高成長に対するNWCの変化率を確認します
- リターン指標:ROIC、ROEの推移を確認します
以下を示す要約テーブルを作成します:
Historical Metrics (LTM):
Revenue: $X million
Revenue growth: X% CAGR
Gross margin: X%
EBIT margin: X%
D&A % of revenue: X%
CapEx % of revenue: X%
FCF margin: X%
ステップ3:売上高予測の作成
方法:
- 直近の実績売上高(LTMまたは直近の会計年度)を起点にします
- 各予測年度に成長率を適用します
- 金額と計算した成長率の両方を表示します
成長率の枠組み:
- 1~2年目:短期的な見通しを反映して、高めの成長率にします
- 3~4年目:業界平均に向けて徐々に減速させます
- 5年目以降:ターミナル成長率に近づけます
数式の構成:
- Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)
- Growth %(Year N) = Revenue(Year N) / Revenue(Year N-1) - 1
3シナリオのアプローチ:
Bear Case: Conservative growth (e.g., 8-12%)
Base Case: Most likely scenario (e.g., 12-16%)
Bull Case: Optimistic growth (e.g., 16-20%)
ステップ 4:営業費用のモデリング
固定費/変動費の分析:
営業費用では、現実的な営業レバレッジをモデル化する必要があります。
- 販売・マーケティング:ビジネスモデルに応じて、通常は売上高の15~40%です
- 研究開発:テクノロジー企業では通常10~30%です
- 一般管理費:通常は売上高の8~15%で、企業の規模拡大に伴うレバレッジを示します
主な原則:
- すべての比率は粗利益ではなく、売上高を基準とします
- 営業レバレッジをモデル化します。売上高の拡大に伴い、比率は低下する必要があります
- 販売・マーケティング、研究開発、一般管理費を個別の項目として管理します
- EBIT = 粗利益 - 営業費用合計で計算します
利益率拡大のフレームワーク:
Current State → Target State (Year 5)
Gross Margin: X% → Y% (justify based on scale, efficiency)
EBIT Margin: X% → Y% (result of revenue growth + opex leverage)
ステップ 5:フリーキャッシュフローの計算
適切な順序でFCFを構築します:
EBIT
(-) Taxes (EBIT × Tax Rate)
= NOPAT (Net Operating Profit After Tax)
(+) D&A (non-cash expense, % of revenue)
(-) CapEx (% of revenue, typically 4-8%)
(-) Δ NWC (change in working capital)
= Unlevered Free Cash Flow
運転資本のモデリング:
- 売上高の変化(売上高の増減額)に対する比率として計算します
- 一般的な範囲:売上高の増減額の-2~+2%
- 負の値 = キャッシュの源泉(運転資本の解放)
- 正の値 = キャッシュの使用(運転資本の積み増し)
維持設備投資と成長設備投資:
- 維持設備投資:現在の事業運営を維持します(売上高の約2~3%)
- 成長設備投資:事業拡大を支えます(売上高の追加2~5%)
- 設備投資合計は、企業の成長戦略と整合させる必要があります
ステップ 6:資本コスト(WACC)の調査
株主資本コストのCAPM手法:
Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium
Where:
- Risk-Free Rate = Current 10-Year Treasury Yield
- Beta = 5-year monthly stock beta vs market index
- Equity Risk Premium = 5.0-6.0% (market standard)
負債コストの計算:
After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)
Determine Pre-Tax Cost of Debt from:
- Credit rating (if available)
- Current yield on company bonds
- Interest expense / Total Debt from financials
資本構成のウェイト:
Market Value Equity = Current Stock Price × Shares Outstanding
Net Debt = Total Debt - Cash & Equivalents
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / Enterprise Value
Debt Weight = Net Debt / Enterprise Value
WACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)
特殊なケース:
- ネットキャッシュの状態:現金 > 負債の場合、ネットデットは負の値です
- 負債ウェイトが負になる場合があります
- WACCの計算ではそれに応じて調整します
- 負債がない場合:WACC = 株主資本コスト
一般的なWACCの範囲:
- 大型株、安定企業:7~9%
- 成長企業:9~12%
- 高成長/高リスク:12~15%
ステップ 7:割引率の適用(5~10年間の予測)
期中平均法:
- キャッシュフローは年の半ばに発生すると仮定します
- 割引期間:0.5、1.5、2.5、3.5、4.5など
- 割引係数 = 1 / (1 + WACC)^期間
現在価値の計算:
For each projection year:
PV of FCF = Unlevered FCF × Discount Factor
Example (Year 1):
FCF = $1,000
WACC = 10%
Period = 0.5
Discount Factor = 1 / (1.10)^0.5 = 0.9535
PV = $1,000 × 0.9535 = $954
予測期間の選択:
- 5年:ほとんどの分析で標準的です
- 7~10年:成長余地が長い高成長企業向けです
- 3年:成熟した安定企業向けです
ステップ 8:ターミナルバリューの計算
永久成長法(推奨):
Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)
Terminal Value = Terminal FCF / (WACC - Terminal Growth Rate)
Critical Constraint: Terminal Growth < WACC (otherwise infinite value)
ターミナル成長率の選択:
- 保守的:2.0~2.5%(GDP成長率)
- 中程度:2.5~3.5%
- 積極的:3.5~5.0%(市場をリードする企業に限る)
上限:リスクフリーレートまたは長期GDP成長率を超えないこと
出口マルチプル法(代替):
Terminal Value = Final Year EBITDA × Exit Multiple
Where Exit Multiple comes from:
- Industry comparable trading multiples
- Precedent transaction multiples
- Typical range: 8-15x EBITDA
ターミナルバリューの現在価値:
PV of Terminal Value = Terminal Value / (1 + WACC)^Final Period
Where Final Period accounts for timing:
5-year model with mid-year convention: Period = 4.5
ターミナルバリューの妥当性チェック:
- 企業価値の50~70%を占める必要があります
- 75%を超える場合、モデルがターミナルの前提条件に過度に依存している可能性があります
- 40%未満の場合、ターミナルの前提条件が保守的すぎないか確認します
ステップ 9:企業価値から株主価値へのブリッジ
評価サマリーの構成:
(+) Sum of PV of Projected FCFs = $X million
(+) PV of Terminal Value = $Y million
= Enterprise Value = $Z million
(-) Net Debt [or + Net Cash if negative] = $A million
= Equity Value = $B million
÷ Diluted Shares Outstanding = C million shares
= Implied Price per Share = $XX.XX
Current Stock Price = $YY.YY
Implied Return = (Implied Price / Current Price) - 1 = XX%
重要な調整項目:
- ネットデット = 有利子負債合計 - 現金および現金同等物
- 正の場合:企業価値から差し引きます(株主価値が減少します)
- 負の場合(ネットキャッシュ):企業価値に加算します(株主価値が増加します)
- 希薄化後株式数を使用:オプション、RSU、転換証券を含みます
- その他の調整項目(該当する場合):
- 非支配持分
- 年金債務
- オペレーティングリース債務
評価結果の形式:
Valuation Component,Amount ($M)
PV Explicit FCFs,X.X
PV Terminal Value,Y.Y
Enterprise Value,Z.Z
(-) Net Debt,A.A
Equity Value,B.B
,,
Shares Outstanding (M),C.C
Implied Price per Share,$XX.XX
Current Share Price,$YY.YY
Implied Upside/(Downside),+XX%
ステップ 10:感応度分析
DCF シートの下部に3 つの感応度テーブルを作成し、前提条件の違いによってバリュエーションがどのように変化するかを示します。
- WACC とターミナル成長率 - 割引率と永久成長率に対する企業価値の感応度を示します
- 売上高成長率と EBIT マージン - 売上高の成長と営業レバレッジの影響を示します
- ベータと無リスク金利 - 株主資本コストの構成要素に対する感応度を示します
実装:これらは各セルに数式を入れたシンプルな 2 次元グリッドです(Excel の「データ テーブル」機能は使用しません)。各セルには、その前提条件の組み合わせに対する DCF の完全な再計算結果を含める必要があります。openpyxl を使用して 75 個すべてのセルをプログラムで設定するための詳細な要件については、「重要な制約」セクションを参照してください。
<correct_patterns>
このセクションでは、DCF モデルの作成時に従うべき正しいパターンをすべて説明します。
シナリオブロックの選択パターン - この方法に従ってください
前提条件は、シナリオごとに個別のブロックに整理します。
重要な構造 - 各セクション見出しには 3 行を使用します。
BEAR CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),12%,10%,9%,8%,7%
EBIT Margin (%),45%,44%,43%,42%,41%
BASE CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),16%,14%,12%,10%,9%
EBIT Margin (%),48%,49%,50%,51%,52%
BULL CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),20%,18%,15%,13%,11%
EBIT Margin (%),50%,51%,52%,53%,54%
各シナリオブロックには、セクションタイトルのすぐ下に、予測年度(FY2025E、FY2026E など)を示す列見出し行を必ず設けてください。これがないと、どの前提値がどの年度に対応するのかユーザーが判断できません。
前提条件の参照方法 - 統合列を作成します。
- ケース選択セル(例:B6)には、1=Bear、2=Base、または 3=Bull を入力します
- INDEX または OFFSET の数式を使って、適切なシナリオブロックから値を取得する統合列を作成します
- 予測数式では統合列を参照します(明確なセル参照)
- 各シナリオブロックには、予測年度全体にわたる DCF 前提条件一式を含めます
推奨する統合列のパターン(INDEX を使用):
=INDEX(B10:D10, 1, $B$6)
次のようにしないでください - あちこちに IF 文を散在させる方法:
=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))
統合列を使う方法ではロジックが一元化され、モデルの監査が容易になります。
正しい売上高予測のパターン
INDEX 数式を使った統合列を作成し、予測ではその列を参照します。
ステップ 1 - FY1 成長率の統合列:
=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)
ステップ 2 - 売上高予測で統合列を参照:
Revenue Year 1: =D29*(1+$E$10)
ここで:
- D29 = 前年度の売上高
- $E$10 = FY1 成長率の統合列セル(INDEX 数式を含む)
- $B$6 = ケース選択セル(1=Bear、2=Base、3=Bull)
この方法は、各予測数式に IF 文を埋め込むよりもシンプルで、どのシナリオの前提条件が使われているかをはるかに簡単に監査できます。
正しい FCF 数式のパターン
INDEX 数式を使った統合列を使用し、FCF の計算ではその列を参照します。
統合列を使う方法:
Item,Formula,Reference
D&A,=E29*$E$21,$E$21 = consolidation column for D&A %
CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %
Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %
Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC
各統合列セルには、ケース選択に基づいて適切なシナリオブロックから値を取得する INDEX 数式を含めます。 これにより、予測数式が明確になり、監査しやすくなります。
数式を入力する前に、シナリオブロックの行位置を確認し、統合列を設定してください。
正しいセルコメントの形式
ハードコードされた値にはすべて、次の形式を使います。
"Source: [System/Document], [Date], [Reference], [URL if applicable]"
例:
Item,Source Comment
Stock price,Source: Market data script 2025-10-12 Close price
Shares outstanding,Source: 10-K FY2024 Page 45 Note 12
Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements
Beta,Source: Market data script 2025-10-12 5-year monthly beta
Consensus estimates,Source: Management guidance Q3 2024 earnings call
正しい前提条件テーブルの構造
重要:各シナリオブロックには、次の3つの構造要素が必要です。
- セクション見出し行(セルを結合):例:「BEAR CASE ASSUMPTIONS」
- 年度を示す列見出し行 — 必須です。省略しないでください
- 前提条件の値を含むデータ行
構造:
BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
BASE CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
BULL CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
予測年度(FY2025E、FY2026E など)を示す列見出し行がないと、ユーザーはどの前提条件の値がどの年度に対応するのか判断できません。この行は必須です。
次に、統合列を作成します(通常は右隣の列)。この列では、ケース選択に基づいて、選択したシナリオブロックから値を取得する INDEX 数式を使用します。この統合列を予測数式で参照します。
正しい行計画のプロセス
1. すべての見出しとラベルを先に書きます。
Row,Content
1,[Company Name] DCF Model
2,Ticker | Date | Year End
4,Case Selector
7,KEY ASSUMPTIONS
26,Assumption headers
27-31,Growth assumptions
...,...
2. すべてのセクション区切りと空白行を追加します
3. その後、確定した行位置を使って数式を書きます
4. 数式を作成したらすぐにテストします
建設にたとえると:
- 良い例:基礎を作ってから壁を建てる(構造が安定する)
- 悪い例:壁を建ててから基礎を作る(壁が崩れる)
Excel の場合:
- 良い例:見出しを追加してから数式を書く(数式が安定する)
- 悪い例:数式を書いてから見出しを追加する(数式が壊れる)
正しい感応度テーブルの実装
重要:これは Excel の「データ テーブル」機能ではありません。openpyxl を使用して通常の数式を書き込む、シンプルなグリッドです。つまり、数式が合計約75個(テーブル3つ × 各25セル)必要ですが、これは簡単であり、必須です。
数式によるプログラムでの入力:
各感応度テーブルには、前提条件の組み合わせごとに想定株価を再計算する数式をすべて入力する必要があります。Excel のデータ テーブル機能は使用しないでください(手動での操作が必要で、openpyxl では自動化できません)。
実装方法 — 具体例:
テーブル構造 — 5×5 のグリッド(奇数のサイズで、基本ケースを中央に配置):
モデルの基本 WACC が 9.0%、基本永久成長率が 3.0%の場合、これらの値を中心に軸を対称に構成します。
WACC vs Terminal Growth, 2.0%, 2.5%, 3.0%, 3.5%, 4.0%
8.0%, [fml], [fml], [fml], [fml], [fml]
8.5%, [fml], [fml], [fml], [fml], [fml]
9.0%, [fml], [fml], [★ ], [fml], [fml] ← middle row = base WACC
9.5%, [fml], [fml], [fml], [fml], [fml]
10.0%, [fml], [fml], [fml], [fml], [fml]
↑
middle col = base terminal g
★ = 中央のセルです。 その数式の出力は、モデルの実際の想定株価(評価サマリーから取得)と必ず一致する必要があります。基本ケースが視覚的に明確になるよう、このセルに中程度の青色の塗りつぶし(#BDD7EE)を適用し、太字にします。
軸の値に関するルール: axis_values = [base - 2*step, base - step, base, base + step, base + 2*step] — 基本値を中心に対称にします。個数を奇数にすると、中央の値が必ずできます。
数式のパターン — セル B88(WACC=8.0%、永久成長率=2.0%):
B88 の数式では、次の値を使って想定株価を再計算します。
- 行見出しの WACC:
$A88(8.0%) - 列見出しの永久成長率:
B$87(2.0%)
推奨する方法: メインの DCF 計算を参照し、これらの値を置き換えます。
数式の構造例:
=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) / [Shares]
重要 — 5×5 グリッドのすべてのセルに数式を書き込みます(テーブルごとに25セル、合計75セル)。 ループを使い、openpyxl で数式をプログラムから書き込みます。この手順を省略したり、プレースホルダーテキストのままにしたりしないでください。
Python の実装パターン:
# Pseudocode for populating sensitivity table
for row_idx, wacc_value in enumerate(wacc_range):
for col_idx, term_growth_value in enumerate(term_growth_range):
# Build formula that uses wacc_value and term_growth_value
formula = f"=<DCF recalc using {wacc_value} and {term_growth_value}>"
ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula
感応度テーブルは、ユーザーが手動で操作しなくても、モデルを開いた時点ですぐに機能する必要があります。
</correct_patterns>
<common_mistakes>
このセクションでは、DCF モデルの作成時に避けるべき誤ったパターンをすべて説明します。
誤り:感度分析表の単純な近似やプレースホルダーテキスト
線形近似は使用しないでください:
// WRONG - Linear approximation
B97: =B88*(1+(0.096-0.116)) // Assumes linear relationship
// WRONG - Division shortcut
B105: =B88/(1+(E48-0.07)) // Doesn't recalculate full DCF
プレースホルダーテキストを残さないでください:
// WRONG - Placeholder note
"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables."
// WRONG - Empty cells
[leaving cells blank because "this is complex"]
用語を混同しないでください:
- ❌ 「感度分析表には Excel のデータテーブル機能が必要です」(誤り — これは使用できない、特定の Excel ツールです)
- ✅ 「感度分析表は、各セルに数式を入力した単純なグリッドです」(正しい — これを作成します)
こうした近道が誤りである理由:
- 線形近似の数式では DCF を実際に再計算せず、単純な数値調整を適用するだけです
- 関係は線形ではないため、結果は不正確になります
- プレースホルダーテキストがあると、ユーザーによる手作業が必要になります
- 納品時にモデルをすぐに使用できません
- プロフェッショナルな仕上がりではなく、クライアントにそのまま提示できません
- 空のセルは未完成の成果物です
却下すべき、よくある正当化: 「75 個以上の数式を書くのは複雑そうなので、ユーザーが手動で完成させられるよう、メモを残しておきます。」
実際には: openpyxl を使い、Python のループを使用すれば、75 個の数式を書くのは簡単です。各数式は同じパターンに従い、行と列の値を置き換えるだけです。これは成果物に必須の要件です。
代わりに: 各感度分析セルに、その特定の前提の組み合わせについて DCF 全体を再計算する数式を入力してください
誤り:セルのコメントがない
次のようなことはしないでください:
- すべてのハードコード入力をコメントなしで作成する
- 「あとで追加すればよい」と考える
- 「TODO:ソースを追加」と書く
- ドキュメントのない青色の入力セルを残す
これが誤りである理由:
- データの出所を確認できません
- xlsx スキルの要件を満たしません
- 監査に対応できません
- あとで修正する時間が無駄になります
代わりに: ハードコード値を作成するたびに、そのセルのコメントを追加してください
誤り:数式の行参照がずれている
症状:
FCF セクションが誤った前提行を参照しています:
D&A: =E29*$E$34 // Should be $E$21, but referencing wrong row
CapEx: =E29*$E$41 // Should be $E$22, but row shifted
この問題が起きる理由:
- 数式を先に記述する
- その後で見出しを挿入する
- すべての行参照がずれる
- その結果、数式が誤ったセルを指し、#REF! エラーが発生する
代わりに: まず行のレイアウトを確定してから、数式を記述してください
誤り:シナリオごとの前提を単一の行にまとめる
前提を次のような構成にしないでください:
Assumption,Bear,Base,Bull
Revenue Growth FY1,10%,13%,16%
Revenue Growth FY2,9%,12%,15%
この縦型のレイアウトでは、各シナリオにおける年ごとの推移を把握しにくくなります。
これが誤りである理由:
- 各シナリオにおける前提の年ごとの変化を把握しにくくなります
- 予測期間全体にわたるシナリオ間の前提を比較しにくくなります
- シナリオのロジックを確認する際に直感的ではありません
代わりに:
- シナリオごとに別々のブロックを作成します(弱気、基本、強気)
- 各ブロック内では、予測年度に沿って前提を横方向に表示します
- これにより、各シナリオの前提を一貫したまとまりとして確認しやすくなります
誤り:罫線がない
罫線のないモデルを納品しないでください:
- セクションの区切りがない
- すべてのセルが混ざって見える
- 読みにくく、プロフェッショナルな印象にならない
これが誤りである理由:
- クライアントにそのまま提示できません
- 操作しにくくなります
- 素人っぽく見えます
代わりに: すべての主要セクションの周囲に罫線を追加してください
誤り:フォント色が間違っている、またはフォント色で区別していない
次のようなことはしないでください:
- すべての文字が黒色
- 塗りつぶしの色しか使わず、フォント色を変更しない
- 青色と黒色にすべきセルを取り違える
これが誤りである理由:
- 入力と数式を区別できません
- 監査が不可能になります
- xlsx スキルの要件に違反します
代わりに: すべてのハードコード入力は青色、すべての数式は黒色、シート間のリンクは緑色の文字にしてください
誤り:売上総利益に基づく営業費用
次のような式は使わないでください:
S&M: =E33*0.15 // E33 = Gross Profit (WRONG)
これが誤りである理由:
- 営業費用は売上総利益ではなく、売上高に連動します
- 現実離れした利益率の推移になります
- 実際の企業活動に即していません
代わりに:
S&M: =E29*0.15 // E29 = Revenue (CORRECT)
TOP 5 ERRORS SUMMARY
- 数式の行参照がずれている → 数式を入力する前に、すべての行位置を定義します
- セルコメントがない → 後でまとめてではなく、セルの作成時にコメントを追加します
- 感応度分析テーブルが簡略化されている → 近似値ではなく、完全な DCF 再計算数式ですべてのセルを埋めます
- シナリオブロックの参照が誤っている → IF 数式が正しい Bear/Base/Bull ブロックから値を取得していることを確認します
- 罫線がない → クライアントに提示できる見栄えにするため、セクションにプロフェッショナルな罫線を追加します
また、次のエラーにも注意してください。
WACC 計算のエラー
- 資本構成で簿価と時価を混在させる
- 株式ベータを資産ベータ/アンレバードベータとして誤って使用する
- 負債コストへの税率適用を誤る
- リスクフリーレートが正しくない(現在の 10Y Treasury を使用する必要があります)
- ネットデットとネットキャッシュのポジションを調整しない
成長率の前提に関する問題
- ターミナル成長率が WACC を上回る(企業価値が無限大になります)
- 予測期間の成長率が過去の業績と一致していない
- 業界の成長制約を無視する
- 売上高成長率がユニットエコノミクスと一致していない
- 業務上の根拠なしに利益率の拡大を見込む
ターミナルバリューの誤り
- 成長率の算出方法が誤っている(永久成長法と出口倍率法の混同)
- ターミナルバリューが企業価値の 80% を超える(過度な依存を示唆します)
- ターミナルマージンが定常状態の前提と一致していない
- ターミナルバリューの割引期間が誤っている
キャッシュフロー予測のエラー
- 営業費用を売上高ではなく売上総利益に基づいて算出する
- D&A/CapEx の比率がビジネスモデルと一致していない
- 運転資本の変動が正しく計算されていない
- 年度間で税率に一貫性がない
- NOPAT の計算が誤っている
これらは最もよくあるエラーです。DCF の作成を始める前に、このセクションを読み直してください。
</common_mistakes>
Excel ファイルの作成
このスキルでは、すべてのスプレッドシート操作に xlsx スキルを使用します。 xlsx スキルでは、次の機能を利用できます。
- 標準化された数式の作成ルール
- 数値書式の規則
recalc.pyスクリプトによる数式の自動再計算- 包括的なエラーチェックと検証
このスキルで作成するすべての Excel ファイルは、数式エラーがゼロであること、適切に再計算されていることなど、xlsx スキルの要件に従う必要があります。
品質評価基準
すべての DCF モデルでは、次の項目を最大限重視する必要があります。
- 過去の業績に基づく現実的な売上高と利益率の前提
- 適切な CAPM 手法による適切な資本コストの計算
- 評価額の範囲を示す包括的な感応度分析
- 根拠を示した明確なターミナルバリューの計算
- シナリオ分析を可能にするプロフェッショナルなモデル構造
- すべての主要な前提に関する透明性の高い文書化
入力要件
必須入力(最小限)
- 企業識別情報:ティッカーシンボルまたは企業名
- 成長率の前提:予測期間の売上高成長率(または「コンセンサスを使用」)
- 任意のパラメーター:
- 予測期間(デフォルト:5 年)
- シナリオケース(Bear/Base/Bull の成長率と利益率の前提)
- ターミナル成長率(デフォルト:2.5~3.0%)
- CAPM を使用しない場合の個別の WACC 入力値
Excel モデルの構造
シート構成
2 つのシートを作成します。
- DCF - 感応度分析を下部に配置したメインのバリュエーションモデル
- WACC - 資本コストの計算
重要:感応度分析テーブルは DCF シートの最下部に配置します(別のシートには配置しません)。これにより、すべてのバリュエーション出力をまとめて確認できます。
数式の再計算(必須)
Excel モデルを作成または変更した後、xlsx スキルの recalc.py スクリプトを使用して、すべての数式を再計算してください。
python recalc.py [path_to_excel_file] [timeout_seconds]
例:
python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30
スクリプトは次の処理を行います。
- LibreOffice を使用して、すべてのシートのすべての数式を再計算します
- すべてのセルをスキャンして、Excel のエラー(#REF!、#DIV/0!、#VALUE!、#NAME?、#NULL!、#NUM!、#N/A)を検出します
- エラーの場所と件数を含む詳細な JSON を返します
期待される出力形式:
{
"status": "success", // or "errors_found"
"total_errors": 0, // Total error count
"total_formulas": 42, // Number of formulas in file
"error_summary": {} // Only present if errors found
}
エラーが見つかった場合、出力には詳細が含まれます。
{
"status": "errors_found",
"total_errors": 2,
"total_formulas": 42,
"error_summary": {
"#REF!": {
"count": 2,
"locations": ["DCF!B25", "DCF!C25"]
}
}
}
すべてのエラーを修正し、モデルを納品する前に、status が "success" になるまで recalc.py を再実行してください。
書式設定の基準
重要:数式の作成ルールと数値の書式設定規則については、xlsx スキルに従ってください。DCF スキルでは、固有の視覚的な表示基準を追加しています。
配色 — 2 つのレイヤー:
レイヤー 1:フォントの色(xlsx スキルの必須事項)
- 青文字(RGB: 0,0,255):すべてのハードコードされた入力値(株価、株式数、過去データ、前提条件)
- 黒文字(RGB: 0,0,0):すべての数式と計算
- 緑文字(RGB: 0,128,0):他のシートへのリンク(WACC シートの参照)
レイヤー 2:塗りつぶしの色 — プロフェッショナルな青/グレーのパレット(ユーザーが指定しない場合の既定値)
- 最小限に抑えてください — 塗りつぶしには青とグレーのみを使用してください。緑、黄色、オレンジ、複数のアクセントカラーは使用しないでください。色が多すぎるモデルは素人っぽく見えます。
- 既定の塗りつぶしパレット:
- セクション見出し:背景は濃い青(RGB: 31,78,121 /
#1F4E79)、文字は太字の白 - 小見出し/列見出し:背景は薄い青(RGB: 217,225,242 /
#D9E1F2)、文字は太字の黒 - 入力セル:背景は薄いグレー(RGB: 242,242,242 /
#F2F2F2)、フォントは青 — または、極力シンプルにする場合は背景を白、フォントを青 - 計算セル:背景は白、フォントは黒
- 出力/サマリー行(1 株当たりの価値、EV など):背景は中程度の青(RGB: 189,215,238 /
#BDD7EE)、文字は太字の黒
- セクション見出し:背景は濃い青(RGB: 31,78,121 /
- 以上です — 青 3 色、グレー 1 色、白のみです。 色を増やしたくなる気持ちを抑えてください。
- ユーザー提供のテンプレートや明示的な色の指定がある場合は、常にこれらの既定値より優先してください。
各レイヤーの組み合わせ:
- 入力セル:青いフォント+薄いグレーの塗りつぶし=「ハードコードされた入力値」
- 数式セル:黒いフォント+白い背景=「計算値」
- シートリンク:緑のフォント+白い背景=「別シートからの参照」
- 主要な出力:黒の太字フォント+中程度の青の塗りつぶし=「これが答え」
フォントの色で値の種類(入力/数式/リンク)を示します。塗りつぶしの色で場所(見出し/データ/出力)を示します。
罫線の標準(プロフェッショナルな外観のために必須)
太い罫線(1.5pt):主要セクションの周囲に使用:
- KEY INPUTS セクション
- PROJECTION ASSUMPTIONS セクション
- 5-YEAR CASH FLOW PROJECTION セクション
- TERMINAL VALUE セクション
- VALUATION SUMMARY セクション
- 各 SENSITIVITY ANALYSIS 表
中程度の罫線(1pt):サブセクションの間に使用:
- Company Details と Historical Performance の間
- Growth Assumptions、EBIT Margin、FCF Parameters の間
細い罫線(0.5pt):データ表の周囲に使用:
- シナリオ前提表(Bear | Base | Bull | Selected)
- 過去と予測の財務マトリクス
罫線なし: 表内の個々のセル(すっきりと見やすく保つため)
罫線は必須です。プロフェッショナルな罫線のないモデルは、クライアントに提出できる品質ではありません。
数値形式(xlsx スキルの標準に従う):
- 年:テキスト文字列として書式設定(例:"2,024" ではなく "2024")
- パーセント:
0.0%(小数点以下1桁) - 通貨:百万単位は
$#,##0、1株当たりは$#,##0.00。単位は必ずヘッダーに明記すること("Revenue ($mm)") - ゼロ:数値書式を使ってすべてのゼロを "-" で表示する(例:
$#,##0;($#,##0);-) - 大きな数値:桁区切りを含む
#,##0 - 負の数:マイナス記号ではなく括弧
(#,##0)で表示
セルコメント(すべての手入力値に必須):
xlsx スキルに従い、すべての手入力値にはソースを記録したセルコメントを付けなければなりません。形式:"Source: [System/Document], [Date], [Reference], [URL if applicable]"
重要:セルを作成する時点でコメントを追加すること。最後にまとめて行わないこと。
DCF シートの詳細構造
セクション 1:ヘッダー
Row,Content
1,[Company Name] DCF Model
2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]
3,Blank
4,Case Selector Cell (1=Bear 2=Base 3=Bull)
5,Case Name Display (formula: =IF([Selector]=1"Bear"IF([Selector]=2"Base""Bull")))
セクション 2:市場データ(大文字小文字は区別しない)
Item,Value
Current Stock Price,$XX.XX
Shares Outstanding (M),XX.X
Market Cap ($M),[Formula]
Net Debt ($M),XXX [or Net Cash if negative]
セクション 3:DCF シナリオ前提
シナリオごと(Bear、Base、Bull)に個別の前提ブロックを作成し、DCF 固有の前提(売上成長率 %、EBIT マージン %、税率 %、売上比の D&A %、売上比の CapEx %、ΔRev 比の NWC 変動 %、ターミナル成長率、WACC)を予測年度にわたって横方向に配置してください。各ブロックには、セクションヘッダー、予測年度(FY1、FY2 など)を示す列ヘッダー行、およびデータ行を含める必要があります。正確なレイアウトは <correct_patterns> セクションの「Correct Assumption Table Structure」を参照してください。
セクション 4:過去および予測の財務
各予測行に散在する IF 数式ではなく、シナリオブロックから値を取得する統合列(例:"Selected Case")を参照すること。
Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
% growth,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
,,,,,,
Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
% margin,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
,,,,,,
Operating Expenses:,,,,,,,
S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
,,,,,,
EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
% margin,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
,,,,,,
Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
Tax rate,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41]
,,,,,,
NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]
主要な数式パターン:
- 売上成長率:
=E29*(1+$E$10)。ここで $E$10 は 1 年目の成長率の統合列です - 次のような形式は使用しないこと:
=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))
この方法はシナリオのロジックを一箇所に集約するため、より整理されており、監査しやすく、数式エラーも防げます。
セクション 5:フリーキャッシュフローの構築
重要:行参照が正しい前提行を指していることを確認してください。作成直後に数式をテストすること。
Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
% of Rev,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
% of Rev,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
% of Δ Rev,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
,,,,,,
Unlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]
行参照の例(レイアウト計画に基づく):
- $E$21 = D&A %の前提(統合列、21 行目)
- $E$22 = CapEx %の前提(統合列、22 行目)
- $E$23 = NWC %の前提(統合列、23 行目)
- E29 = 当該年度の売上(29 行目)
- E45 = 当該年度の NOPAT(45 行目)
数式を書く前に:これらの行番号がシートの実際のレイアウトと一致しているか確認してください。1 列でテストしてから、横にコピーしてください。
セクション 6:割引と評価
DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal
Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,
Period,0.5,1.5,2.5,3.5,4.5,
Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,
PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,
,,,,,,
Terminal FCF ($M),,,,,,,XXX
Terminal Value ($M),,,,,,,XXX
PV Terminal Value ($M),,,,,,,XXX
,,,,,,
Valuation Summary ($M),,,,,,
Sum of PV FCFs,XXX,,,,,
PV Terminal Value,XXX,,,,,
Enterprise Value,XXX,,,,,
(-) Net Debt,(XX),,,,,
Equity Value,XXX,,,,,
,,,,,,
Shares Outstanding (M),XX.X,,,,,
IMPLIED PRICE PER SHARE,$XX.XX,,,,,
Current Stock Price,$XX.XX,,,,,
Implied Upside/(Downside),XX%,,,,,
WACC シートの構造
COST OF EQUITY CALCULATION,,
Risk-Free Rate (10Y Treasury),X.XX%,[Yellow input]
Beta (5Y monthly),X.XX,[Yellow input]
Equity Risk Premium,X.XX%,[Yellow input]
Cost of Equity,X.XX%,[Calculated blue]
,,
COST OF DEBT CALCULATION,,
Credit Rating,AA-,[Yellow input]
Pre-Tax Cost of Debt,X.XX%,[Yellow input]
Tax Rate,XX.X%,[Link to DCF sheet]
After-Tax Cost of Debt,X.XX%,[Calculated blue]
,,
CAPITAL STRUCTURE,,
Current Stock Price,$XX.XX,[Link to DCF]
Shares Outstanding (M),XX.X,[Link to DCF]
Market Capitalization ($M),"X,XXX",[Calculated]
,,
Total Debt ($M),XXX,[Yellow input]
Cash & Equivalents ($M),XXX,[Yellow input]
Net Debt ($M),XXX,[Calculated]
,,
Enterprise Value ($M),"X,XXX",[Calculated]
,,
WACC CALCULATION,Weight,Cost,Contribution
Equity,XX.X%,X.X%,X.XX%
Debt,XX.X%,X.X%,X.XX%
,,
WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]
WACC の主要な数式:
Market Cap = Price × Shares
Net Debt = Total Debt - Cash
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / EV
Debt Weight = Net Debt / EV
WACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)
感度分析(DCF シートの下部)
用語に関する注意:「感度分析表」とは、行見出し、列見出し、各データセルの数式を備えたシンプルな 2D グリッドを指します。Excel の「データ テーブル」機能(データ → What-If 分析 → データ テーブル)ではありません。openpyxl を使って、各セルに通常の Excel 数式を書き込みます。
場所:DCF シートの 87 行目以降(別シートではありません)
3 つの感度分析表を縦に配置します:
- WACC 対ターミナル成長率(87~100 行目)- 5x5 グリッド = 数式を含む 25 セル
- 売上高成長率 対 EBIT マージン(102~115 行目)- 5x5 グリッド = 数式を含む 25 セル
- ベータ 対リスクフリーレート(117~130 行目)- 5x5 グリッド = 数式を含む 25 セル
書き込む数式の合計:75(必須であり、任意ではありません)
重要:すべての感度分析表のセルには、openpyxl を使って数式をプログラムで入力する必要があります。線形近似による近道は使用しないでください。プレースホルダーテキストや手作業が必要である旨の注記を残さないでください。「複雑だから」という理由でセルを空欄のままにすることを正当化せず、Python のループを使って数式を生成してください。
表の設定:
- 行見出しと列見出し(テストする前提値)を含む表の構造を作成します
- すべてのデータセルに、以下を満たす数式を入力します:
- 行見出しの値を使用する(例:WACC = 9.0%)
- 列見出しの値を使用する(例:ターミナル成長率 = 3.0%)
- 指定された前提条件に基づいて DCF 全体を再計算する
- そのシナリオの理論株価を返す
- 納品時に、すべてのセルに動作する数式が入力されている必要があります
- 条件付き書式を設定します:値が高いほど緑、低いほど赤になるカラースケール
- ベースケースのセルを太字にします
- 表と表の間に 1~2 行の空白を設けます
手作業での介入は不要です - ユーザーがファイルを開いたときに、感度分析表が完全に機能する状態にしてください。
ケース選択機能の実装
3 ケースのフレームワーク:
ベアケース
- 保守的な売上高成長率(過去のレンジの下限)
- マージンの縮小、または拡大なし
- WACC の上昇(リスクプレミアムの増加)
- 低いターミナル成長率
- 高めの設備投資の前提
ベースケース
- コンセンサスまたは経営陣のガイダンスに基づく売上高成長率
- オペレーティングレバレッジに基づく、適度なマージン拡大
- 現在の市場が織り込む WACC
- GDP に沿ったターミナル成長率(2.5-3.0%)
- 標準的な設備投資の前提
ブルケース
- 楽観的な売上高成長率(予測の上限)
- 大幅なマージン拡大
- 低い WACC(リスクプレミアムの低下)
- 高いターミナル成長率(3.5-5.0%)
- 低い設備投資強度
数式の実装:
ネストした IF 数式をあちこちに散在させないでください。 代わりに、適切なシナリオのブロックから値を取得する INDEX または OFFSET 数式を使った統合列を作成します。
推奨パターン(INDEX を使用):
=INDEX(B10:D10, 1, $B$6) ここで、B10:D10 = ベア/ベース/ブルーの値、1 = 行オフセット、$B$6 = ケース選択セル(1、2、または 3)
次に、すべての予測で統合列を参照します:
売上高 1 年目: =D29*(1+$E$10) ここで、$E$10 は 1 年目の成長率を示す統合列の値です。
この方法ではシナリオのロジックが一元化されるため、モデルの監査と保守が容易になります。
納品物の構成
ファイル名:[Ticker]_DCF_Model_[Date].xlsx
シートは 2 つです:
- DCF - ベア/ベース/ブルーのケースと、下部に 3 つの感度分析表(WACC 対ターミナル成長率、売上高成長率 対 EBIT マージン、ベータ 対リスクフリーレート)を備えた完全なモデル
- WACC - 資本コストの計算
主な機能:ケース選択(1/2/3)、INDEX/OFFSET 数式を含む統合列、色分けされたセル、すべての入力項目へのセルコメント、プロフェッショナルな罫線
ベストプラクティス
モデルの構築
- 段階的に構築する:次に進む前に、各セクションを完成させます
- 構築しながらテストする:サンプル数値を入力して数式を検証します
- 一貫した構造を使う:類似する計算には、同様のパターンを使います
- 複雑な数式にコメントを付ける:通常と異なる計算には注記を追加します
- チェック機能を組み込む:該当する場合は、合計チェックやバランスチェックを加えます
ドキュメント作成
- すべての前提を文書化する:重要な入力値の根拠を説明します
- データソースを明記する:各データポイントの出典を記載します
- 方法論を説明する:標準的でないアプローチがあれば説明します
- 不確実性を明示する:情報が限られている部分を強調します
品質管理
- 計算をクロスチェックする:複数の方法で計算を検証します
- 前提をストレステストする:感度分析を実行して、モデルの頑健性を確認します
- ピアレビューを行う:他の人に数式を確認してもらいます
- バージョン管理を行う:作業の進捗に合わせてバージョンを保存します
よくあるバリエーション
高成長テクノロジー企業
- 予測期間を長めに設定する(7~10年)
- 初期成長率を高めに設定する(20~30%)
- 時間の経過とともに大幅なマージン拡大を見込む
- WACCを高めに設定する(12~15%)
- ユニットエコノミクス(ユーザー数、ARPUなど)をモデル化する
成熟・安定企業
- 予測期間を短めに設定する(3~5年)
- 成長率を控えめに設定する(GDP+1~3%)
- マージンを安定させる
- WACCを低めに設定する(7~9%)
- キャッシュ創出と資本配分に重点を置く
景気循環企業
- 景気サイクル全体をモデル化する
- マージンを景気サイクルの中間水準に正常化する
- 景気の底とピークのシナリオを検討する
- 景気循環性に応じてベータを調整する
複数セグメント企業
- 事業部門ごとに個別のDCFを作成する
- セグメントごとに成長率とマージンを変える
- サム・オブ・ザ・パーツ法で評価する
- シナジーを考慮する
トラブルシューティング
エラーや妥当でない結果が発生した場合は、詳細なデバッグ手順についてトラブルシューティングをお読みください。
ワークフローとの統合
DCFモデルの構築開始時
-
市場データを収集する:
- 現在の市場データを取得できるMCPサーバーがあるか確認します
- 株価、ベータ、その他の市場指標には、ウェブ検索/取得を使用します
- 特定のデータが必要な場合は、ユーザーに依頼します
-
過去の財務データを収集する:
- 利用可能なMCPサーバー(Daloopaなど)があるか確認します
- MCP経由で入手できない場合は、ユーザーに依頼します
- 必要に応じて、10-Kから手作業でデータを抽出します
-
このスキルで詳述するDCFの方法論を使って、モデルの構築を開始する
モデル構築中
- 数式を使って(ハードコードした値ではなく)openpyxlでExcelモデルを構築する
- 数式の作成と書式設定には、xlsxスキルの規約に従う
- ユーザーから依頼された場合、または特定のブランドガイドラインが提示された場合に限り、塗りつぶし色を適用する
モデルの納品前(必須)
-
構造を検証する:
- 予測年全体にわたる前提を含む、Bear/Base/Bullのシナリオブロック
- 正しいシナリオブロックを数式で参照する、機能するケースセレクター
- DCFシートの下部にある感度分析テーブル(別シートにはしない)
- フォントの色:青は入力値、黒は数式、緑はシートへのリンク
- すべてのハードコード入力にセルコメントを付ける
- 主要セクションの周囲に見やすい罫線を付ける
-
数式を再計算する:
python recalc.py model.xlsx 30を実行します -
出力を確認する:
statusが"success"の場合 → ステップ4に進みますstatusが"errors_found"の場合 →error_summaryを確認し、デバッグ手順についてトラブルシューティングをお読みください
-
statusが"success"になるまで、エラーを修正してrecalc.pyを再実行します -
数式を抜き取り検査する:
- FCFの数式を1つ確認します。正しい前提行を参照していますか?
- ケースセレクターを変更します。集約列は正しく更新されますか?
- 売上高の数式が、ネストされたIF数式ではなく集約列を参照していることを確認します
-
モデルを納品する
利用可能なデータソース
- MCPサーバー:設定されている場合(過去の財務データにはDaloopa)
- ウェブ検索/取得:現在の株価、ベータ、市場データ用
- ユーザー提供データ:過去の財務データ、コンセンサス予想
- 手作業での抽出:代替手段としてのSEC EDGAR提出書類
最終出力チェックリスト
DCF モデルを納品する前に、次の項目を確認してください。
必須:
- ステータスが「success」(数式エラーがゼロ)になるまで、
python recalc.py model.xlsx 30を実行する - シートは 2 つ:DCF(下部に感度分析を配置)、WACC
- フォントの色:青=入力値、黒=数式、緑=シート間リンク
- すべてのハードコードされた入力値にセルコメントを付ける
- 感度分析テーブルを数式で完全に埋める
- 主要なセクションの周囲にプロフェッショナルな罫線を付ける
検証:
- OpEx は売上高に基づいている(売上総利益ではない)
- ターミナルバリューが EV の 50~70%を占めている
- ターミナル成長率 < WACC
- 税率は 21~28%
- ファイル名:
[Ticker]_DCF_Model_[Date].xlsx