OKRシートのアーキテクチャ:3タブ設計
タブを3枚に分ける。
| タブ名 | 役割 | データの流れ |
|---|---|---|
| OKR_Data | KR入力・スコア計算 | Assumptionsへ出力のみ |
| Assumptions | シナリオスイッチ・財務仮定(DSO、Capex含む) | P&L、BS、CFへ出力 |
| P&L / BS / CF | 財務3表 | Assumptionsから受取のみ |
一方向性がモデルの整合性を保つ。P&LがOKR_Dataを直接参照すると、タブ間の依存関係が複雑になり監査が追えなくなる。Assumptionsタブがすべての財務仮定を一元管理することで、シナリオ変更が3表全体に整合して波及する。
OKRシートの各行に必要なFP&A標準フィールド
John Doerr は『Measure What Matters』(Portfolio/Penguin, 2018)第4章で「Key Resultは他のKRと独立して達成可否を判定できなければならない」と定義している。この独立性原則をスプレッドシートに翻訳すると、各行に最低限7項目が必要になる。
| 列 | フィールド名 | 型 | 例 |
|---|---|---|---|
| A | KR_ID | テキスト | 2026Q3-SALES-01 |
| B | 目標記述 | テキスト | ARR ¥5億達成 |
| C | 目標値 | 数値 | 500,000 |
| D | 重み(0〜1) | 数値 | 0.35 |
| E | 現在値 | 数値 | 338,000 |
| F | 進捗率 | 数式 | =E2/C2 |
| G | 確信度スコア | 数値(手入力) | 0.72 |
| H | 最終更新日 | 日付 | 2026/05/01 |
確信度スコア(列G)は進捗率(列F)とは別物だ。ARRが目標の67%に達していても、パイプラインの質が落ちていれば確信度は50%を下回ることがある。この主観的な見積もりがシナリオスイッチを動かすインプットになる。
加重平均スコアはAssumptions!B3に置く。
// Assumptions!B3: KR確信度の加重平均
=SUMPRODUCT(OKR_Data!G2:G20, OKR_Data!D2:D20)
/ SUMPRODUCT(OKR_Data!D2:D20)
Google Sheets の公式ドキュメントによると、SUMPRODUCTは配列を要素ごとに乗算して合計する関数で、空白セルは0として扱われる。500万行のARRAYFORMULAでも50ms以下で再計算する。
EBITDAへのカスケード
Assumptions!B3のスコアに基づいてシナリオを分岐させる。
// Assumptions!B4: シナリオフラグ
=IF(B3>=0.75,"OnTrack",IF(B3>=0.55,"Caution","Downside"))
// Assumptions!B5: 月次売上仮定(¥千)
=IFS(B4="OnTrack", 42000, B4="Caution", 36000, B4="Downside", 29000)
2026年Q2の加重平均KRスコアは75.7%でOnTrackだった。Q3に入り、製品ロードマップKRと顧客成功KRが遅延し、スコアが67.8%に落ちた。シナリオはCautionに自動で切り替わる。
| シナリオ | 月次売上 | 四半期EBITDA(22%) | NOPAT(税率30%) |
|---|---|---|---|
| OnTrack(≥75%) | ¥42,000千 | ¥27,720千 | ¥19,404千 |
| Caution(55〜75%) | ¥36,000千 | ¥23,760千 | ¥16,632千 |
| Downside(<55%) | ¥29,000千 | ¥19,140千 | ¥13,398千 |
// P&L!C5: 四半期EBITDA
='P&L'!C3 * Assumptions!$B$8 // C3=四半期売上, B8=EBITDAマージン(0.22)
// P&L!C7: NOPAT
='P&L'!C5 * (1 - Assumptions!$B$9) // B9=実効税率(0.30)
KR確信度スコアからFCFFウォーターフォールへ
ここからが投資家に提示できる水準になる。P&Lへのシナリオトグルだけでは、FCFFは完成しない。KR確信度の変化は運転資本(DSO)とCapexタイミングを動かし、それがキャッシュフローに直接波及する。
DSO仮定とBalance Sheet連動
製品KRが遅延すると顧客の検収が遅れ、回収サイトが伸びる。Cautionシナリオでは平均DSOを45日から52日に引き上げる。
// Assumptions!B6: DSO(日)
=IFS(B4="OnTrack", 45, B4="Caution", 52, B4="Downside", 60)
// BS!C15: 売掛金残高
='P&L'!C3 / 90 * Assumptions!$B$6
// P&L!C3 = 四半期売上(Caution: ¥108,000千)
// → AR残高: ¥108,000 / 90 × 52 = ¥62,400千
// BS!C16: ΔAR(前期比)
=C15 - B15
// B15 = Q2末売掛金(OnTrack: ¥126,000/90×45 = ¥63,000千)
// → ΔAR = ¥62,400 - ¥63,000 = ▲¥600千(AR微減 = WC小幅改善)
Capexタイミングの連動
製品ロードマップKRが遅延しているときに成長Capexを全額執行し続けるのは非合理だ。Cautionではエンジニアリング設備への成長Capexを50%繰延にする。Downsideでは全凍結する。
// Assumptions!B7: 四半期Capex(¥千)
=IFS(B4="OnTrack", 45000, B4="Caution", 22500, B4="Downside", 0)
FCFFウォーターフォール(CFタブ)
// CF!C3: NOPAT(P&Lから)
='P&L'!C7
// CF!C5: D&A(固定、¥9,000千/Q)
=Assumptions!$B$10
// CF!C7: 運転資本変化(ΔARを逆符号)
=-'BS'!C16
// CF!C9: Capex
=-Assumptions!$B$7
// CF!C11: FCFF
=C3 + C5 + C7 + C9
3シナリオのFCFFを並べると、見落としがちな構造が浮かぶ。
| FCFFウォーターフォール(Q3 2026、¥千) | OnTrack | Caution | Downside |
|---|---|---|---|
| NOPAT | ¥19,404 | ¥16,632 | ¥13,398 |
| D&A | ¥9,000 | ¥9,000 | ¥9,000 |
| ΔWC(ΔAR逆符号) | ¥0 | +¥600 | +¥4,400 |
| Capex | ▲¥45,000 | ▲¥22,500 | ¥0 |
| FCFF | ▲¥16,596 | +¥3,732 | +¥26,798 |
DownsideシナリオのFCFFがOnTrackより高い。Capexをゼロにしたからだ。この逆説をQBRで投資家に説明するとき「Downsideでも現金は厚い」では通らない。「成長投資を全停止した結果であり、来期以降の成長余地を犠牲にしている」と説明できる。それがOKRシートとFCFFを結んだ価値だ。
OnTrackからCautionへの移行でFCFF+¥20,328千のデルタが出るが、内訳はこうなる。
| FCFFブリッジ(OnTrack→Caution、¥千) | 金額 |
|---|---|
| ① NOPAT縮小(売上▲¥18,000千 × 22% × 70%) | ▲¥2,772 |
| ② ΔWC改善(AR▲¥600千、WC解放) | +¥600 |
| ③ Capex繰延(¥45,000→¥22,500) | +¥22,500 |
| FCFFデルタ | +¥20,328 |
このブリッジを月次取締役会資料に1枚追加すれば、「OKRが未達のためCapexを繰り延べた、その結果FCFFへの影響は+¥20,328千」という説明が数式ベースで成立する。KR達成率の話をしているのに、バランスシートとキャッシュフローまで数字が追えるのがこの設計の肝だ。
陳腐化アラートで鮮度を保つ
KRの確信度スコアが14日以上更新されないと、Assumptionsタブのシナリオが古いインプットで動き続ける。2026年5月現在、多くのチームが「更新し忘れ」に気づかないまま四半期予測を出している。
// Assumptions!D3: 最終更新からの経過日数
=TODAY() - MAX(OKR_Data!H2:H20) // H列 = 各KRの最終更新日
// Assumptions!E3: アラートメッセージ
=IF(D3>14,
"⚠ KRスコアが" & D3 & "日未更新 — モデル要検証",
"✓ 最新")
このセルをAssumptionsタブの最上部に置き、条件付き書式で赤くしておくと、モデルを開いた瞬間に目に入る。SUMIFS で特定の担当者のKRだけを抽出して個別アラートにする応用も効く。
// 担当者別の陳腐化チェック
=SUMPRODUCT((TODAY()-OKR_Data!H2:H20>14)*(OKR_Data!I2:I20="田中"))
// I列 = 担当者名; 戻り値が1以上なら要フォロー
ModelMonkeyで更新サイクルを回す
OKRシートの設計自体は上記のSUMPRODUCTと3タブ構造で完結するが、8本以上のKRを毎週更新する運用コストは無視できない。ModelMonkeyをGoogle Sheetsに接続すると、SlackやGoogleフォームからの確信度スコア入力をOKR_Dataタブに自動書き込みできるため、Assumptions→P&L→BSとCF全体の再計算が更新のたびに走る。14日アラートが発火する頻度が下がり、QBR直前の「数字合ってる?」確認が減る。
ModelMonkeyを無料で14日間試す — Google SheetsとExcelの両方で動作する。