DCFモデルビルダー は何をしますか?
概要
このスキルは、投資銀行基準に準拠した機関投資家向けDCF(ディスカウント・キャッシュフロー)モデルを作成します。各分析は、詳細なExcelモデル(感応度分析はDCFシートの下部に含まれます)を生成します。
ツール
- ユーザーから提供された情報およびデータソーシングに利用可能なMCPサーバーをすべてデフォルトで使用します。
重要な制約 - 最初に必ず読んでください
これらの制約は、すべてのDCFモデル構築プロセスに適用されます。開始前に確認してください:
環境:Office JS vs Python/openpyxl:
- Excel内で実行する場合(Officeアドイン / Office JS環境): Office JSを直接使用してください。Python/openpyxlは使用しないでください。
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 エラーが発生します。代わりに、値を左上のセルのみに書き込み、その後で範囲全体をマージしてフォーマットします:
// 間違い — InvalidArgumentが発生:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["MARKET DATA & KEY INPUTS"]]; // 1×1の配列 vs 1×8の範囲 → 失敗
// 正しい — 最初に単一セルに値を設定し、その後で範囲をマージ+フォーマット:
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内のすべてのマージセクションヘッダー(マーケットデータ、シナリオブロック、キャッシュフロー予測、ターミナルバリュー、評価サマリー、感応度テーブル)に適用されます。
数式優先、ハードコード回避(譲歩不可):
- すべての予測、マージン、割引係数、現在価値、感応度セルは、ライブのExcel数式でなければなりません。Pythonで計算して数値として書き込むことは絶対に避けてください。
- openpyxlを使用する場合:
ws["D20"] = "=D19*(1+$B$8)"が正しく、ws["D20"] = calculated_revenueは間違いです。 - ハードコード値として許可されるのは次のものだけです:(1) 生の過去データ、(2) 仮定のドライバー(成長率、WACCインプット、ターミナルg)、(3) 現在の市場データ(株価、負債残高)。
- Pythonで何かを計算し、その結果を書き込もうとしていることに気づいたら — すぐに止めてください。モデルはユーザーが仮定を変更したときに柔軟に再計算される必要があります。
ユーザーと段階的に確認する(エンドツーエンドで一気に構築しない):
- データ取得後 → ユーザーに生のインプットブロック(収益、マージン、株式数、純負債)を表示し、投影前に確認を得る。
- 収益予測後 → 予測されたトップラインと成長率を表示し、マージン構築前に確認を得る。
- FCF構築後 → 完全なFCFスケジュールを表示し、WACC計算前にロジックを確認する。
- WACC後 → 計算とインプットを表示し、割引前に確認を得る。
- ターミナルバリュー+現在価値後 → 株式価値ブリッジ(EV → 株式価値 → 1株当たり価値)を表示し、感応度テーブル前に確認を得る。
- 各段階でエラーを発見する — 間違ったマージン仮定を感応度テーブル構築後に発見すると、下流のすべてを再構築する必要があります。
感応度テーブル:
- 行と列の数は奇数にします(標準:5×5、場合によっては7×7) — これにより真の中心セルが保証されます。
- 中心セル=ベースケース。軸の値を設定して、中央の行ヘッダーと中央の列ヘッダーがモデルの実際の仮定と正確に一致するようにします(例:ベースWACC = 9.0%の場合、中央の行は9.0%、ターミナルg = 3.0%の場合、中央の列は3.0%)。したがって、中心セルの出力はモデルの実際の暗黙の株価と等しくなる必要があります — これがテーブルが正しく構築されていることの妥当性チェックです。
- 中心セルを強調表示:中程度の青い塗りつぶし(
#BDD7EE)+太字フォントで、どのセルがベースケースかを即座に視認できるようにします。 - すべてのセル(通常は3つのテーブル×25セル=75)に完全なDCF再計算数式を入力します。
- openpyxlのループ(またはOffice JSのループ)を使用して、プログラムで数式を記述します。
- プレースホルダーテキスト、線形近似、手動ステップは禁止です。
- 各セルは、その仮定の組み合わせに対して完全なDCFを再計算する必要があります。
セルコメント:
- 各ハードコード値を作成するときに、セルコメントを追加します。
- 形式:"出典:[システム/文書]、[日付]、[参照]、[該当する場合はURL]"
- 次のセクションに進む前に、すべての青色のインプットにコメントが付いている必要があります。
- 最後にまとめて追加したり、「TODO: 出典を追加」と書いたりしないでください。
モデルレイアウト計画:
- 数式を書き始める前に、すべてのセクションの行位置を定義します。
- 最初にすべてのヘッダーとラベルを記述します。
- 2番目にすべてのセクション区切り線と空白行を記述します。
- その後、固定された行位置を使用して数式を記述します。
- 数式は作成後すぐにテストします。
数式の再計算:
- 納品前に
python recalc.py model.xlsx 30を実行します。 - ステータスが「成功」になるまで、すべてのエラーを修正します。
- 数式エラーはゼロにする必要があります(#REF!、#DIV/0!、#VALUE! など)。
シナリオブロック:
- ベア/ベース/ブルの各ケースに対して個別のブロックを作成します。
- 各ブロック内で、予測期間全体にわたって仮定を横方向に表示します。
- IF数式を使用:
=IF($B$6=1,[Bearのセル],IF($B$6=2,[Baseのセル],[Bullのセル])) - 数式が正しいシナリオブロックのセルを参照していることを確認します。
DCFプロセスのワークフロー
ステップ1:データの取得と検証
MCPサーバー、ユーザー提供データ、およびウェブからデータを取得します。
データソースの優先順位:
- MCPサーバー(設定されている場合) - Daloopaなどのプロバイダーからの構造化財務データ
- ユーザー提供データ - ユーザーのリサーチによる過去の財務データ
- ウェブ検索/フェッチ - 必要に応じて現在の株価、ベータ、負債、現金
検証チェックリスト:
- 純負債と純現金を確認(評価において重要)
- 希薄化後の発行済株式数を確認(最近の自社株買い/発行をチェック)
- 過去のマージンがビジネスモデルと整合していることを検証
- 収益成長率を業界ベンチマークと相互確認
- 税率が妥当であることを確認(通常21-28%)
ステップ2:過去の分析(3〜5年)
分析と文書化:
- 収益成長トレンド:CAGRを計算し、ドライバーを特定
- マージンの推移:粗利益率、EBITマージン、FCFマージンを追跡
- 資本集約度:D&AおよびCapExの売上高に対する割合
- 運転資本効率:NWC変化の売上高成長に対する割合
- リターン指標:ROIC、ROEのトレンド
以下のようなサマリーテーブルを作成:
過去の指標(LTM):
収益:X百万ドル
収益成長率:X% CAGR
粗利益率:X%
EBITマージン:X%
D&Aの売上高比率:X%
CapExの売上高比率:X%
FCFマージン:X%
ステップ3:収益予測の構築
方法論:
- 最新の実際の収益(LTMまたは最新会計年度)から開始
- 各予測年度に成長率を適用
- 金額と計算された成長率%の両方を表示
成長率のフレームワーク:
- 1〜2年目:短期的な可視性を反映した高めの成長
- 3〜4年目:業界平均に向けて徐々に減速
- 5年目以降:ターミナル成長率に近づく
数式構造:
- 収益