財務モデリング中級読了約 2 分

Google SheetsでOKRテンプレートシートを構築する方法

重み付きKRスコアリング、自動ロールアップ、財務モデル連携を備えた多タブOKRテンプレートをGoogle Sheetsで構築。財務チーム向けのステップバイステップガイドです。

重み付きキーリザルトスコアの計算、目標レベルへのロールアップ、財務前提条件タブとの直接連携を実現する多タブOKRテンプレートをGoogle Sheetsで構築しましょう。ARR目標が20億円に変更された際も、OKRスコアが自動的に更新されます。 これはシンプルな信号機チェックリストではありません。構造化されたモデルです。期間と重みの設定を管理するConfigタブ、進捗を入力するKR Detailタブ、担当者別・目標別に集計するRollupタブ、取締役会資料向けのダッシュボードタブで構成されます。7つのステップで完成させましょう。

必要なもの

  • 編集アクセス権を持つGoogle Sheetsアカウント
  • 複数タブ参照と名前付き範囲の基本知識
  • 3表財務モデルまたは前提条件タブ(任意ですが、ステップ6で推奨)
  • モデルに投入するための少なくとも1四半期分のOKRデータ
  • Apps Scriptの基本知識(ステップ2で短い関数を使用 - コピー&ペースト可能)

ステップバイステップ

1

OKRテンプレートのタブ構造を設計する

セルに触れる前に、タブのアーキテクチャを確定させてください。適切に設計されたOKRテンプレートは、入力・計算・出力を分離します。これは財務モデルを監査可能にするのと同じ原則です。

  • Config** - 期間設定、重み、閾値、担当者リスト
  • KR_Detail** - キーリザルト1件につき1行、全ての進捗入力はここに集約
  • Rollup** - SUMPRODUCTベースの目標スコアと担当者サマリー
  • Dashboard** - 取締役会向けビュー、RollupとConfigのみを参照
  • Fin_Link** - 財務モデルの前提条件タブへのオプション連携ブリッジ

Pro Tip

タブ名にスペースを使わないでください。取締役会資料の前夜23時にクロスタブSUMIFSを書く際、「KR_Detail」は「KR Detail」よりクリーンにインポートできます。
2

Configタブを構築する

ConfigはマスターコントロールパネルでBす。変更の可能性がある全ての前提条件(期間、スコアリング閾値、重みスキーム)はここにのみ集約します。

以下の名前付き範囲をConfigに設定してください(数式 > 名前付き範囲):

  • cfg_period → 現在のOKR期間ラベル(例:「2026年Q3」)(セルB2)
  • cfg_ontrack_threshold → 緑表示に必要な最小重み付きスコア(例:0.70)(セルB4)
  • cfg_owners → KR_Detailドロップダウン用の担当者名バリデーションリスト(B8:B20)
  • cfg_weight_sum_check → 目標ごとに重みの合計が1.0にならない場合を検出する検証数式:=SUMIF(KR_Detail!E:E,"*",KR_Detail!F:F)

Pro Tip

HubSpot、Salesforceなどの接続ソースから実績値を取得している場合は、この関数をonOpenトリガーとして設定してください。タイムスタンプによって、レビュアーはデータが最後にいつ取得されたかを確認できます。
3

KR Detailタブを構築する(OKRテンプレートのエンジン)

ここがモデルの核心です。KR_Detailはキーリザルト1件につき1行のデータを持ち、所属する目標、担当者、目標値、実績値、目標内の重み、算出スコアの列で構成されます。

A〜H列を以下のように設定してください:

列ヘッダー備考
AObjective_ID短縮コード(例:「OBJ-1」)
BKR_ID例:「KR-1.2」
COwnercfg_ownersからのドロップダウン
DKR_Description自由入力
ETarget数値または%
FActual数値または%(唯一の入力列)
GWeightObjective_IDごとに合計1.0であること
HKR_Score数式:=IFERROR(MIN(F2/E2,1)*G2, 0)

MIN(...,1)の上限は意図的なものです。目標100%に対して112%のNRRを達成しても、フル加重クレジットを得られますが、親目標スコアが1.0を超えることはありません。ストレッチパフォーマンスを評価したい場合は、上限を1.2に変更し、Configに記載してください。

  • 列Hをロックする(「表示形式」>「保護されたシートと範囲」):数式がハードコードされた数値で上書きされないよう保護してください
  • 列Fに条件付き書式を設定する:F < E*cfg_ontrack_thresholdの場合は赤、F >= Eの場合は緑
  • 列CにデータバリデーションでCfg_ownersへの制限を設定する:Rollupタブの数式を破壊するタイプミスを防止します

Pro Tip

「コンフィデンス」列(I列)に1〜3のドロップダウンを追加してください。スコアには影響しませんが、数式では捉えられない先行きの見通しを取締役会に示す指標となります。
4

重み付きスコアリング数式を設定する

KR_Detailが整ったら、H列のスコアリング数式はシンプルです。目標レベルのスコアこそが核心で、フィルタリングされた範囲に対するSUMPRODUCTが必要です。

Rollup!C2(A2に目標IDを入力している前提)での目標スコア数式:

=SUMPRODUCT(
  (KR_Detail!$A$2:$A$200=A2)*      // この目標でフィルタリング
  KR_Detail!$H$2:$H$200            // 重み付きKRスコアを合計
)

この数式は0から1の間の数値を返します。スコア0.46は目標の46%しか達成できていないことを意味し、Configで設定した0.70の閾値を下回るため、ダッシュボードでは赤表示になります。

会社全体のスコアを算出するには、目標自体にも重みを付けます。RollupにObj_Weight列を追加し、次の数式を入力してください:

=SUMPRODUCT(Rollup!$B$2:$B$10, Rollup!$C$2:$C$10)

B列が目標の重みで、C列が上記スコアです。4つの目標を30/30/20/20の重み付けで設定した場合、30%の目標2つの平均スコアが0.8、20%の目標のスコアが0.5であれば、会社全体のスコアは(0.8*0.3 + 0.8*0.3 + 0.5*0.2 + 0.5*0.2) = 0.68となり、目標達成ラインを1ポイント下回ります。

    Pro Tip

    ConfigでWeight合計チェックを実行してください。SUMIF(Rollup!B:B,"*",Rollup!B:B)が1.0を返さない場合、会社全体のスコアは無意味になります。不一致時に赤くなるセルでフラグを立ててください。
    5

    担当者別・期間別ロールアップを構築する

    Rollupタブには2つの役割があります:目標別の集計(ステップ4)と、パフォーマンス評価の場で活用する担当者別スライスです。

    Rollupの担当者サマリー(E〜G列):

    // 担当者が所有する全KRの平均重み付きスコア
    =IFERROR(
      AVERAGEIF(KR_Detail!$C$2:$C$200, E2, KR_Detail!$H$2:$H$200),
      0
    )
    

    前期比較のために、同じ構造を持つKR_Detail_Priorという名前の2つ目のKR_Detailタブを追加してください。Rollupのデルタ数式:

    =SUMPRODUCT(
      (KR_Detail!$A$2:$A$200=A2)*KR_Detail!$H$2:$H$200
    ) -
    SUMPRODUCT(
      (KR_Detail_Prior!$A$2:$A$200=A2)*KR_Detail_Prior!$H$2:$H$200
    )
    

    正のデルタは目標が前四半期比で改善したことを意味します。手動での計算不要で、取締役会向けの説明資料に直接活用できます。

    • Rollupタブ全体を編集から保護する(数式のみ、入力なし)
    • 下部に会社全体のコンポジットスコア行を追加する
    • 問題のある目標がすぐに見えるよう、スコアの昇順で目標を並び替える
    6

    OKRテンプレートを財務前提条件に連携させる

    ほとんどのOKRテンプレートが省略するステップですが、だからこそOKRレビューと財務レビューが別々の会議で行われることになります。これを連携させましょう。

    財務モデルにARR目標、粗利益率の閾値、人員計画を含む前提条件タブがある場合、KR_Detailで直接参照してください(ハードコーディングせずに):

    // KR_Detail E2: 「ARRを20億円に成長させる」KRのARR目標値
    ='Assumptions'!$B$12
    
    // KR_Detail F2: 実績タブからのARR実績値
    =SUMIFS('P&L'!$C:$C,'P&L'!$B:$B,">="&Assumptions!$B$3,'P&L'!$A:$A,"ARR")
    

    CFOがAssumptionsタブのARR目標を20億円から22億円に変更すると、そのKRのOKRスコアが自動的に再計算されます。先四半期に緑表示だった粗利益率72%目標・70.1%実績が、目標値の引き上げにより今四半期は黄色表示になることもあります。

    財務モデルの前提条件から直接リンクすべき目標値:

    • ARR / NRR目標(収益ビルドより)
    • 粗利益率目標(P&Lより)
    • 人員目標(人員計画より)
    • バーンレートまたはEBITDA閾値(キャッシュフローモデルより)

    Pro Tip

    全てのタブ間参照にIFERRORをラップしてください。誰かがAssumptionsタブの名前を変更した場合、ゼロを返してOKRスコアを静かに破壊するのではなく、「#REFエラー - Assumptionsタブ名を確認してください」がすぐに表示されるようにしてください。
    7

    OKRダッシュボードタブを構築する

    ダッシュボードタブは読み取り専用の出力です。全てのセルはRollupまたはConfigから参照します。ここには誰も直接入力しません。

    3つのゾーンに構成してください:

    ゾーン1 - ヘッダー行(1〜3行目):=Config!B2で期間ラベルを取得、Rollupからコンポジットスコアを参照、=IF(Rollup!composite>=cfg_ontrack_threshold,"順調","要注意")でRAGインジケーターを表示。

    ゾーン2 - 目標サマリーテーブル(5〜15行目):目標1件につき1行、Rollupから取得:

    =IFERROR(
      VLOOKUP(A6, Rollup!$A:$C, 3, FALSE),
      "-"
    )
    

    ゾーン3 - 担当者ヒートマップ(17〜30行目):列に担当者名、行に目標を配置し、セルの値はRollupの担当者スライスから取得。条件付き書式でカラーコード:>=0.70は緑、0.50〜0.69は黄、<0.50は赤。

    四半期の取締役会資料では、このタブだけを共有します。タブをロックし、保護されたシートと範囲を使って取締役会の閲覧者には数式バーを非表示にし、PDFにエクスポートする前にファイルを[会社名]_OKR_[四半期]_BOARD.xlsxと名前を付けてください。

      Pro Tip

      Config!B3(ステップ2のApps Scriptタイムスタンプ)を参照する「最終更新日時」セルを追加してください。取締役会のメンバーはデータがいつのものか必ず確認してきます。これで口頭で答える必要がなくなります。

      まとめ

      これで、実績からKRスコアを計算し、重み付けされた目標グレードにロールアップし、前提条件タブの財務目標に直接連携する5タブのOKRモデルが完成しました。第3四半期が終了して実績が確定したら、KR_DetailのF列を更新するだけで、Rollup、ダッシュボード、取締役会資料まで全ての数値が自動更新されます。

      ほとんどのOKRテンプレートの弱点はスコアリング数式ではなく、手動データ更新サイクルにあります。実績データがHubSpot、Salesforce、またはデータウェアハウスに蓄積されており、毎月誰かがそれをKR_Detailにコピー&ペーストしなければならない場合、モデルはずれていきます。ModelMonkeyは接続されたソースから直接KR_Detailに実績データを取得できるため、更新作業がルーティン作業ではなくプロンプト1つで完了します。ModelMonkeyのプランを選ぶ - Google SheetsとExcelの両方に対応しています。

      よくある質問

      目標内でキーリザルトの重みをどのように設定すればよいですか?

      均等配分ではなく、戦略的重要度で重みを設定してください。目標に3つのKRがあり、そのうち1つが二値(完了/未完了)のマイルストーンで残りが連続指標の場合、二値のKRは部分的な進捗を捉えられないため、低めの重み(例:0.20)が適切です。3KRの目標に対する一般的な出発点は0.40 / 0.40 / 0.20で、その期間にビジネスが最も必要とする成果に基づいて調整してください。

      「順調」と判断するための適切なスコア閾値はどれくらいですか?

      GoogleおよびOKR文献はともに、標準的な目標達成ライン閾値として0.7を参照しています。常に1.0を達成している場合は目標設定が低すぎることを意味するという考え方です。実際には、ほとんどのFP&Aチームはターゲット設定文化の積極性に応じて0.65〜0.75で運用しています。Config(`cfg_ontrack_threshold`)で一度設定し、一貫して適用してください。数値を良く見せるために四半期途中で閾値を変更することは、事後にEBITDA定義を調整するのと同様の行為です。

      数値で測定できない定性的なKRはどう扱えばよいですか?

      1〜5の評価スケールを設定し、数式`=(F2-1)/4`で0〜1に正規化してください。5段階評価で3は0.50、5は1.0となります。四半期ごとに評価が主観的にならないよう、KR_Descriptionセルのコメントに評価基準を記載してください。定性的なKRは目標の合計重みの20〜30%を超えないようにしてください。

      このOKRテンプレートはネストされた目標(OKR内のOKR)に対応できますか?

      はい、Rollupタブに追加レイヤーを加えることで対応できます。「Parent_Objective_ID」列を追加し、KRスコアが目標スコアに集約されるのと同じように、子目標スコアを入力として扱う2段階目のSUMPRODUCTを実行してください。実際には、2レベル(会社→チーム)を超えるネストは、精度のメリットを上回るメンテナンスコストが発生します。ほとんどのチームは、モデルをフラットに保ち、Rollupの担当者スライスを使ってチームレベルのパフォーマンスを確認する方が効果的です。

      四半期途中で新しいKRが追加された際に数式のズレを防ぐにはどうすればよいですか?

      全てのSUMPRODUCTおよびSUMIFS数式でオープンエンドの範囲を使用してください(`$A$2:$A$15`ではなく`$A$2:$A$200`)。これにより、KR_Detailに行を追加しても下流の数式を更新する必要がなくなります。KR_DetailのA〜G列で空白行をブロックするデータバリデーションルールを設定し、不完全な行がRollupの計算にゼロを密かに含めないようにしてください。