この​記事で​分かる​こと

  • PythonでDCF(割引キャッシュフロー法)を実装する手順:FCF予測→割引→継続価値→企業価値(EV)
  • 整数設例(FCF100〜140百万円・WACC10%・継続成長率2%)をpandasのコードと表で完全に一致させて検算する方法
  • 感応度分析(WACC×成長率の3×3表)を二重ループで自動化する書き方
  • Excelとの使い分け:再現性・自動化のPython、監査性・共有のExcel

結論:構造は​Excelと​まったく​同じ。​Pythonの​武器は​「再現性」

PythonでDCF(Discounted Cash Flow:割引キャッシュフロー法)を組むと聞くと高度に感じますが、計算構造はExcelのDCFモデルと完全に同じです。フリー・キャッシュフロー(FCF)を予測し、割引率(WACC)で現在価値に割り引き、継続価値(Terminal Value)を加えて企業価値(Enterprise Value、EV)を求めます。この流れをセルの代わりにコードで書くだけです。

違いが出るのは再現性と自動化です。コードは「どの数値をどう計算したか」が1行ずつ残るため、前提を変えた再計算や、100社分の一括計算が数秒で終わります。DCFの理論そのものを確認したい方は先にDCF法の​解説記事を、Python自体が初めての方はPython for Finance​入門をご覧ください。

Pythonに​よる​DCF計算の​全体像

本記事では次の設例を最後まで使います。FCF予測は1年目から5年目まで100・110・120・130・140百万円、割引率(WACC)10%、継続成長率(g)2%。この前提での企業価値は1,556.04百万円になります。まず計算フローの全体像を図で確認しましょう。

DCFの計算フロー(設例:WACC10%・g2%) ① FCF予測(1〜5年目) 100・110・120・130・140 百万円 ② 現在価値(PV)に割引 ÷(1.10)^t → 合計 447.70 百万円 ③ 継続価値(TV) 140×1.02÷0.08=1,785.00 百万円 ④ TVを現在価値に割引 1,785.00÷1.10^5=1,108.34 百万円 企業価値(EV) 447.70+1,108.34 =1,556.04 百万円 単位:百万円。割引率(WACC)10%、継続成長率(g)2%。数値は本文のコード例・表と一致。
図:DCF​計算​フロー。​5年分の​FCFの​現在価値447.70百万円と​継続価値の​現在価値1,108.34百万円の​合計が、​企業価値1,556.04百万円に​なる。

DCFの​構成要素の​復習

コードを書く前に、計算式を確認します。企業価値(EV)は次の2つの部分の合計です(n=予測最終年、本記事ではn=5)。

EV = Σ FCFt ÷ (1+WACC)t + TV ÷ (1+WACC)n

継続価値(TV:Terminal Value)は永久成長モデル(Gordon Growth Model)で求めます。

TV = FCFn × (1+g) ÷ (WACC-g)

分子は「最終予測年の翌年のFCF」、分母は「割引率から成長率を引いた差」です。WACC(Weighted Average Cost of Capital:加重平均資本コスト)が10%、gが2%なら分母は0.08。符号と分母の順序(WACC-g)を逆にしないことが、実装でも最初のチェックポイントになります。

コード​例:FCF​予測→割引→EVを​pandasで​書く

設例(FCF 100・110・120・130・140百万円、WACC10%、g2%)をそのままコードにします。

Python
import pandas as pd

fcf = [100, 110, 120, 130, 140]      # FCF予測(百万円)
wacc = 0.10                          # 割引率(WACC)
g = 0.02                             # 継続成長率

df = pd.DataFrame({"year": [1, 2, 3, 4, 5], "fcf": fcf})
df["pv"] = df["fcf"] / (1 + wacc) ** df["year"]

pv_fcf = df["pv"].sum()               # → 447.70(百万円)
tv = fcf[-1] * (1 + g) / (wacc - g)   # → 1785.00(百万円)
pv_tv = tv / (1 + wacc) ** 5          # → 1108.34(百万円)
ev = pv_fcf + pv_tv                   # → 1556.04(百万円)

実行結果を表で確認します。割引係数は(1.10)tです。

年(t)FCF(百万円)割引係数 (1.10)^t現在価値PV(百万円)
11001.100090.91
21101.210090.91
31201.331090.16
41301.464188.79
51401.610586.93
PV合計447.70
継続価値TVのPV1.61051,108.34
企業価値(EV)1,556.04

手計算でも検証できます。1年目は100÷1.10=90.91、2年目は110÷1.21=90.91、5年目は140÷1.61051=86.93で、5年分の合計が447.70百万円。TVは140×1.02÷(0.10-0.02)=1,785.00百万円、その現在価値は1,785.00÷1.61051=1,108.34百万円。したがってEV=447.70+1,108.34=1,556.04百万円となり、図・表・コードの結果が一致します。

感応度分析を​ループで​回す

Pythonの真価が出るのが感応度分析(Sensitivity Analysis)です。Excelではデータテーブルで作る部分を、二重ループで書けます。

コード
rows = {}
for w in [0.09, 0.10, 0.11]:              # WACC
    row = {}
    for gr in [0.01, 0.02, 0.03]:         # 継続成長率g
        pv = sum(f / (1 + w) ** t for t, f in zip(range(1, 6), fcf))
        tv = fcf[-1] * (1 + gr) / (w - gr)
        row[gr] = round(pv + tv / (1 + w) ** 5, 1)
    rows[w] = row
sens = pd.DataFrame(rows).T               # 行=WACC、列=g
EV(百万円)g=1%g=2%g=3%
WACC=9%1,608.81,785.92,022.1
WACC=10%1,423.21,556.01,726.8
WACC=11%1,275.01,377.41,505.5

中心ケース(WACC10%×g2%)の1,556.0百万円に対し、前提を1%ポイント動かすだけでEVは1,275.0〜2,022.1百万円まで振れます。DCFの結論は前提の関数であることがひと目で分かります。表の設計の考え方は感応度分析の​記事で詳しく解説しています。

Excelとの​使い分けと、​Pythonの​限界

実務での使い分けは次のとおりです。

Excelが向く場面:案件ごとの一回性のモデル(M&Aの交渉資料など)、セルを指させばレビューできる監査性が必要な場面、相手方や上司とファイルで共有する場面。日本のIB・PE・FASの案件実務は現在もExcel中心です。手を動かして学びたい方はExcelで​DCF​モデルを​組む​チュートリアルを参照してください。

Pythonが向く場面:多数銘柄の一括バリュエーション、毎月・毎四半期の定型計算の自動化、モンテカルロ法など大量の反復計算、Gitでの変更履歴管理。一方で限界もあります。コードを読めない関係者にはブラックボックスに見えること、セル単位の監査証跡を求める現場では説明コストがかかることです。「Excelを置き換える」のではなく「Excelで固めたロジックを、量と頻度が必要な場面でPythonに移す」のが現実的な使い方です。

面接での​答え方​(30秒回答例)

Q:財務​モデリングにPythonを使う利点と限界を教えてください。
「計算構造はExcelと同じで、FCFを予測しWACCで割り引いて継続価値を加える流れをコードで書きます。利点は再現性と自動化で、前提を変えた再計算や多数企業への横展開が高速に行えます。限界は監査性と共有で、セルを指させるExcelと違い関係者がレビューしづらいため、案件の交渉資料はExcel、定型・大量の分析はPythonと使い分けるのが実務的だと考えています。」

よく​ある​質問​(FAQ)

Pythonで​DCFを​組めるようになれば、​Excelは​不要に​なりますか?

なりません。​日本の​投資銀行・​PE・​FASの​案件実務は、​監査性と​共有の​しやすさから​Excelが​標準です。​Pythonは​定型化・​大量処理・​再現性が​必要な​場面での​補完ツールと​位置づけ、​まず​Excelで​モデルの​構造を​理解するのが​近道です。

numpy-financialなどの​専用​ライブラリを​使うべきですか?

学習段階では​本記事のように​素の​Pythonと​pandasだけで​書く​ことを​勧めます。​割引や​継続価値を​自分で​書くと​計算構造が​身に​つく​ためです。​実務で​IRRや​NPVを​多用する​段階に​なれば、​numpy-financial​等の​関数で​置き換えると​簡潔に​なります。

まとめ

PythonによるDCFは、FCF予測→割引→継続価値→EVというExcelと同一の構造を、リストとpandasの数行で表現するものです。設例(FCF100〜140百万円・WACC10%・g2%)ではEVは1,556.04百万円となり、手計算でも検証できました。感応度分析をループで自動化できる再現性がPythonの武器ですが、実務ではExcelの監査性・共有性と使い分けることが重要です。まずは本記事のコードを自分の手で実行し、数値が一致することを確かめてみてください。

出典・参考​(2026-07-19確認)

  • pandas公式ドキュメント(pandas.pydata.org)— DataFrameの演算・集計
  • Python公式ドキュメント(docs.python.org)— 数値演算・内包表記
  • Aswath Damodaran(NYU Stern)公開講義資料(pages.stern.nyu.edu)— DCFバリュエーションの構成要素と継続価値

※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための仮設例です。