補修シナリオをLCCで比較する方法|Excel・VBAで3案を計算

建設実務

これまでの記事では、橋梁の劣化予測からLCCへつなげるために、

  • 劣化曲線から将来のランクを計算する
  • 劣化係数を設定する
  • 管理水準への到達年を逆算する
  • 将来費用を現在価値へ換算する
  • 点検・補修・更新費を現在価値で合計する

という流れを整理してきました。

最後に必要になるのが、

「複数の維持管理シナリオを比較する」

という段階です。

例えば、

  • 早い段階で小規模な補修を行う案
  • 劣化が進んでから大規模補修を行う案
  • 一定期間使用した後に更新する案

では、費用額だけでなく、費用が発生する時期も異なります。

単純な合計額だけを見るのではなく、同じ評価期間、同じ割引率、同じ価格条件で現在価値へ換算して比較することで、費用面の違いを整理できます。

この記事では、国土交通省の費用便益分析マニュアルで示されている現在価値化の考え方をもとに、

  • シナリオ比較でそろえる条件
  • 3つの仮想シナリオ
  • 各シナリオのLCC計算
  • Excelで比較表を作る方法
  • SUMIF関数によるシナリオ別集計
  • VBAでシナリオ別LCCを計算する方法
  • LCCが最小でも自動的に最適案とはならない理由

を整理します。

重要:利用上の注意

本記事で使用する補修費、更新費、発生年、シナリオは、LCC比較の計算方法を説明するための仮定値です。

国土交通省が示した標準的な橋梁補修費や標準補修時期ではありません。

また、この記事の計算結果は各シナリオの技術的妥当性、安全性、耐久性を評価するものではありません。

実際の維持管理計画やLCC業務へ使用する場合は、対象施設の点検結果、補修工法、劣化予測、費用算定条件、発注者条件、評価期間等を確認し、利用者自身の責任で妥当性を検証してください。

シナリオ比較の参考となる国土交通省資料

今回も、次の国土交通省資料を参考にします。

国土交通省 道路局・都市局
『費用便益分析マニュアル』令和7年8月

国土交通省公式PDF:

https://www.mlit.go.jp/road/ir/ir-hyouka/ben-eki_2.pdf

同マニュアルでは、

  • 事業費
  • 維持管理費
  • 道路構造物の更新費

などについて各年次の費用を設定し、基準年次の現在価値へ換算して総費用を算定します。

維持管理費には、橋梁・トンネル等の点検・補修費が含まれます。

この記事では、この、

各年次へ費用を配置する
→ 現在価値へ換算する
→ 合計する

という考え方を、複数の橋梁維持管理シナリオの比較へ展開します。

LCCでシナリオを比較する基本式

各シナリオについて、現在価値ベースのLCCを、

LCC<em>s=\sum</em>{t=0}^{T}\frac{C_{s,t}}{(1+i)^t}

と整理します。

ここで、

  • LCC_s:シナリオsの現在価値ベースLCC
  • C_{s,t}:シナリオsのt年目に発生する費用
  • i:割引率
  • t:費用発生年
  • T:評価期間
  • s:比較するシナリオ

です。

この式の位置付け

LCC<em>s=\sum</em>{t=0}^{T}\frac{C_{s,t}}{(1+i)^t}

という記号付きのLCC比較式が、そのまま国交省マニュアルに掲載されているわけではありません。

国交省マニュアルで示されている、

各年次の費用を現在価値化して合計する

という考え方を、シナリオsごとのLCC比較として一般化したものです。

比較する前に条件をそろえる

LCC比較で非常に重要なのは、計算式よりも比較条件をそろえることです。

例えば、

  • A案は40年間
  • B案は30年間

という状態では、単純にLCCを比較できません。

同様に、

  • A案だけ2026年価格
  • B案は2018年価格

では、費用条件がそろっていません。

少なくとも、

  • 評価期間
  • 割引率
  • 費用の価格基準年
  • 費用に含める項目
  • 評価の基準年

は、同じ考え方で整理する必要があります。

今回の説明例では、

評価期間:40年

割引率:4%

として3つのシナリオを比較します。

注意

4%は国土交通省の費用便益分析マニュアルで現在価値算出に用いられている社会的割引率です。

個別のLCC業務で必ず4%を使用するという意味ではありません。

実務では対象業務の基準・要領・発注者条件を確認してください。

今回比較する3つの仮想シナリオ

計算方法を理解するため、次の3案を仮定します。

シナリオA:早期・複数回補修

  • 10年後:400万円
  • 25年後:500万円
  • 40年後:800万円

シナリオB:補修を遅らせて大規模化

  • 20年後:1,200万円
  • 35年後:1,000万円

シナリオC:途中で更新

  • 20年後:3,000万円で更新

ここでは計算を単純化するため、全シナリオに共通して同額発生する点検費等は省略しています。

仮定条件について

このA・B・C案は、数式とExcel操作を説明するために作成した仮想例です。

「早期補修をすれば必ずこの費用になる」「20年後に更新するのが現実的」といった技術的意味はありません。

また、各シナリオ終了時の構造物の状態や残存価値が完全に同一であることも仮定していません。

実際のLCC比較では、各案が技術的に比較可能な条件になっているかを別途確認する必要があります。

シナリオAの現在価値を計算する

まず、10年後の400万円です。

PV_{A1}=\frac{4,000,000}{1.04^{10}}

計算すると、

PV_{A1}\approx2,702,257

約270万円です。

次に、25年後の500万円です。

PV_{A2}=\frac{5,000,000}{1.04^{25}}

より、

PV_{A2}\approx1,875,584

約188万円です。

40年後の800万円は、

PV_{A3}=\frac{8,000,000}{1.04^{40}}

となり、

PV_{A3}\approx1,666,312

約167万円です。

したがって、

LCC(A)=PV(A1)+PV(A2)+PV(A3)

より、

LCC(A)\approx6244153

となります。

約624万円です。

シナリオBの現在価値を計算する

シナリオBでは、20年後に1,200万円の費用が発生します。

PV(B1)=\frac{12000000}{1.04^{20}}

より、

PV(B1)\approx5476643

約548万円です。

さらに35年後に1,000万円とすると、

PV(B2)=\frac{10000000}{1.04^{35}}

より、

PV(B2)\approx2534155

です。

したがって、

LCC(B)=PV(B1)+PV(B2)

となり、

LCC(B)\approx8010798

約801万円です。

シナリオCの現在価値を計算する

シナリオCでは、20年後に3,000万円で更新すると仮定します。

LCC_C=\frac{30,000,000}{1.04^{20}}

計算すると、

LCC_C\approx13,691,608

です。

約1,369万円になります。

3つのシナリオを比較する

今回の仮定条件では、

シナリオ 名目費用合計 現在価値LCC
A 1,700万円 約624万円
B 2,200万円 約801万円
C 3,000万円 約1,369万円

となります。

費用面だけを比較すれば、

A < B < C

です。

つまり、この仮定例ではシナリオAが最も小さいLCCとなります。

しかし、ここで、

「したがってA案が最適」

と結論付けてはいけません。

この計算で比較したのは、あくまで設定した費用系列の現在価値です。

LCC最小案をそのまま採用してはいけない理由

例えばシナリオAが最も安くても、

  • 小規模補修で本当に必要な性能を維持できるか
  • 25年後まで補修効果が継続するか
  • 安全性に問題がないか
  • 損傷が想定以上に進行しないか
  • 交通規制回数が増えないか
  • 他部材との同時施工が合理的ではないか

といった技術的問題があります。

逆に更新案Cは費用が高くても、

  • 将来の維持管理リスクが小さくなる
  • 耐震性能等が向上する
  • 他の劣化要因も同時に解消できる
  • 長期的な供用確実性が高まる

場合があります。

したがってLCCは、

費用面を比較するための重要な指標

ではありますが、

維持管理方針を自動決定する判定式

ではありません。

残存価値を無視すると比較結果が変わることがある

今回の仮定例には、あえて単純化している部分があります。

特にシナリオCでは20年後に構造物を更新しています。

評価期間が40年であれば、評価終了時点では更新後20年しか経過していません。

一方、A・B案では更新を行っていません。

そのため、評価期間終了時の構造物の状態や残存する価値が異なる可能性があります。

今回の例では、計算方法を単純に示すため残存価値を考慮していません。

しかし実際のLCC比較では、

  • 評価期間終了時の残存価値
  • 更新後の残存耐用年数
  • 評価期間を超えて得られる効果

などをどう扱うかが結果へ影響する場合があります。

国土交通省の費用便益分析マニュアルでも、検討期間後の残存価値を現在価値化し、費用から控除する考え方が示されています。

重要

今回のA・B・C比較は、計算方法を説明するための簡易例です。

この結果を、「早期補修の方が更新より必ず有利」という根拠として使用しないでください。

共通費用を省略してよい場合と、省略してはいけない場合

今回の例では、すべてのシナリオで同額発生すると仮定した点検費等を省略しています。

例えば、A・B・Cのすべてで、

5年ごとに50万円の定期点検

がまったく同じ条件で発生するなら、その費用はどのシナリオへ加えても同額です。

シナリオ間の差額を見るだけなら、省略しても順位は変わりません。

しかし実際には、

  • 更新後は点検費が変わる
  • 補修後に追加点検が必要になる
  • シナリオによって交通規制費が異なる

など、共通とは言えない場合があります。

その場合は省略できません。

本当に各案で同じ費用なのか

を確認してから扱う必要があります。

Excelでシナリオ比較表を作る

Excelでは、1行に1つの費用発生イベントを配置すると扱いやすくなります。

例えば次のようにします。

A列 B列 C列 D列 E列
シナリオ 費用種別 発生年 費用 現在価値
A 補修1 10 4000000 計算
A 補修2 25 5000000 計算
A 補修3 40 8000000 計算
B 大規模補修 20 12000000 計算
B 再補修 35 10000000 計算
C 更新 20 30000000 計算

H1へ割引率として、

4%

を入力します。

E2には、

=D2/(1+$H$1)^C2

と入力します。

この式を下方向へコピーすれば、すべての費用について現在価値を計算できます。

SUMIF関数でシナリオ別LCCを集計する

例えばH4:H6へ、

A
B
C

と入力します。

I4には、

=SUMIF($A$2:$A$7,H4,$E$2:$E$7)

と入力します。

下方向へコピーすれば、

  • A案の現在価値合計
  • B案の現在価値合計
  • C案の現在価値合計

を求められます。

同じ方法で名目費用合計も確認できます。

J4へ、

=SUMIF($A$2:$A$7,H4,$D$2:$D$7)

とすれば、シナリオごとの単純な費用総額です。

つまり比較表として、

シナリオ 名目費用 現在価値LCC
A 17,000,000 6,244,153
B 22,000,000 8,010,798
C 30,000,000 13,691,608

のように整理できます。

Excelでは明細と集計を分けた方がよい

LCC比較表を作るとき、

シナリオAのLCC

だけを1セルの長い数式で作ることもできます。

しかし実務では、

  • 何年に
  • 何の費用が
  • いくら発生し
  • 現在価値はいくらか

を確認できる方が重要です。

そのため、

明細表

と、

シナリオ別集計表

を分ける方法が扱いやすいです。

計算結果がおかしい場合にも、どの費用行が原因か確認できます。

Excel利用上の注意

ExcelでA案が最小値として表示されたことは、A案の技術的妥当性を意味しません。

Excelが担当しているのは、設定された費用と年次を数式に従って計算することだけです。

シナリオそのものの妥当性は別途確認してください。

VBAでシナリオ別LCCを計算する

同じ計算をVBAのユーザー定義関数にすることもできます。

以下の例では、

  • シナリオ名の範囲
  • 発生年の範囲
  • 費用の範囲
  • 集計対象シナリオ
  • 割引率

を指定し、対象シナリオだけの現在価値を合計します。

コード利用上の注意

以下のVBAコードは、シナリオ別LCC計算の仕組みを確認するためのサンプルです。

実行前に必ずExcelファイルのバックアップを作成してください。

業務で使用中のファイルへ、いきなり貼り付けて使用しないでください。

また、このコードは補修案の技術的成立性や採用すべきシナリオを判定するものではありません。

コードの利用および実務への適用は自己責任で行い、必ずテストデータで計算結果を検証してください。

標準モジュールへ次のコードを記述します。

Option Explicit

Public Function CalcScenarioLCC( _
    ByVal scenarioRange As Range, _
    ByVal yearRange As Range, _
    ByVal costRange As Range, _
    ByVal targetScenario As String, _
    ByVal discountRate As Double) As Variant

    Dim i As Long
    Dim totalPV As Double
    Dim yearValue As Double
    Dim costValue As Double

    If scenarioRange.Cells.Count <> yearRange.Cells.Count _
        Or scenarioRange.Cells.Count <> costRange.Cells.Count Then

        CalcScenarioLCC = CVErr(xlErrRef)
        Exit Function

    End If

    If discountRate <= -1 Then
        CalcScenarioLCC = CVErr(xlErrNum)
        Exit Function
    End If

    totalPV = 0

    For i = 1 To scenarioRange.Cells.Count

        If CStr(scenarioRange.Cells(i).Value) = targetScenario Then

            If Not IsNumeric(yearRange.Cells(i).Value) _
                Or Not IsNumeric(costRange.Cells(i).Value) Then

                CalcScenarioLCC = CVErr(xlErrValue)
                Exit Function

            End If

            yearValue = CDbl(yearRange.Cells(i).Value)
            costValue = CDbl(costRange.Cells(i).Value)

            If yearValue < 0 Or costValue < 0 Then
                CalcScenarioLCC = CVErr(xlErrNum)
                Exit Function
            End If

            totalPV = totalPV + _
                costValue / ((1 + discountRate) ^ yearValue)

        End If

    Next i

    CalcScenarioLCC = totalPV

End Function

例えば、

  • A2:A7:シナリオ名
  • C2:C7:発生年
  • D2:D7:費用
  • H1:割引率

なら、

=CalcScenarioLCC(A2:A7,C2:C7,D2:D7,"A",H1)

でA案のLCCを計算できます。

B案なら、

=CalcScenarioLCC(A2:A7,C2:C7,D2:D7,"B",H1)

C案なら、

=CalcScenarioLCC(A2:A7,C2:C7,D2:D7,"C",H1)

です。

VBAで最小LCC案を自動採用させない

VBAを使えば、

  • A案
  • B案
  • C案

のLCCを比較し、最小値を自動的に表示することもできます。

しかし、今回のサンプルではあえて、

「最小値の案を推奨する」

処理を入れていません。

理由は、LCC最小案と維持管理上の最適案は同じとは限らないからです。

例えばVBAが、

A案が最安です

と表示すると、計算上の費用比較結果と、技術的な推奨判断が混同されやすくなります。

そのためコードには、

シナリオごとの現在価値を計算する機能だけ

を持たせています。

どの案を採用するかは、

  • 技術的成立性
  • 安全性
  • 劣化状況
  • 管理水準
  • 予算
  • 施工条件

などを踏まえて別途判断する方が適切です。

劣化予測モデルと組み合わせるとシナリオの発生年を作れる

これまで扱ってきた劣化予測モデル、

y=-ax^2+b

から、

x=\sqrt{\frac{b-y}{a}}

によって管理水準への到達年を求められます。

例えば、

  • ランク3へ到達したら予防的補修
  • ランク2へ到達したら大規模補修

という仮の管理条件を設定すれば、各補修時期を劣化曲線から計算できます。

そこへ補修費を設定し、

PV=\frac{C_t}{(1+i)^t}

で現在価値化します。

つまり、

劣化曲線
→ 管理水準
→ 措置時期
→ 費用発生年
→ 現在価値
→ シナリオ別LCC

という一連の計算が可能になります。

ただし、

どのランクでどの補修を行うか

という管理条件そのものは、二次関数から自動的に決まるものではありません。

感度分析も重要になる

LCCの計算結果は、前提条件によって変化します。

例えば、

  • 割引率を変える
  • 補修費を変える
  • 補修時期を変える
  • 更新時期を変える

だけでも順位が変わる可能性があります。

今回の例でも、将来に大きな費用が発生するシナリオほど、割引率の影響を強く受けます。

そのため実務では、一つの条件だけで結論を出すのではなく、

主要な前提条件を変えたときに結果がどう変わるか

を確認することも有効です。

例えば、

  • 割引率1%
  • 割引率2%
  • 割引率4%

で同じシナリオを再計算すれば、割引率による順位・差額への影響を確認できます。

ただし感度分析についても、どの条件を振るべきかは業務目的に応じて設定する必要があります。

LCC比較で確認しておきたい項目

実際に比較表を作る場合は、少なくとも次の項目を確認しておくと整理しやすくなります。

  • 評価期間は各案で同じか
  • 割引率は同じか
  • 価格の基準年は同じか
  • 共通費用の扱いは同じか
  • 費用項目に抜けや二重計上がないか
  • 補修・更新時期の根拠があるか
  • 残存価値の扱いをそろえているか
  • 各シナリオが技術的に成立しているか

計算式が正しくても、ここが揃っていなければ比較結果の意味が変わります。

LCCのこれまでの計算の流れ

ここまでの記事をつなぐと、LCC計算の流れは次のようになります。

まず、国総研資料で扱われる二次関数型の劣化曲線、

y=-ax^2+b

を使って将来状態を計算します。

次に、劣化係数aを設定し、

x=\sqrt{\frac{b-y}{a}}

によって所定ランクへの到達時期を求めます。

その時点で発生する補修・更新費を設定し、

PV=\frac{C_t}{(1+i)^t}

で現在価値へ換算します。

各費用を合計して、

LCC<em>s=\sum</em>{t=0}^{T}\frac{C_{s,t}}{(1+i)^t}

とすれば、シナリオ別LCCを比較できます。

つまり、

劣化予測
→ 管理水準
→ 補修・更新時期
→ 費用
→ 現在価値
→ LCC
→ シナリオ比較

という流れです。

まとめ

LCCで複数の維持管理シナリオを比較する場合は、

LCC<em>s=\sum</em>{t=0}^{T}\frac{C_{s,t}}{(1+i)^t}

という考え方で、各案の年次別費用を現在価値化して合計できます。

Excelでは各費用について、

=D2/(1+$H$1)^C2

と計算し、シナリオ別集計には、

=SUMIF($A$2:$A$7,H4,$E$2:$E$7)

を使えます。

VBAでも、シナリオ名、発生年、費用を読み取り、指定したシナリオの現在価値を合計できます。

ただし、LCC比較で最も重要なのは、

最小値を出すことではなく、同じ条件で比較可能なシナリオを設定すること

です。

  • 評価期間
  • 割引率
  • 費用項目
  • 価格条件
  • 残存価値
  • 補修時期
  • 技術的成立性

などが揃っていなければ、数字だけを比較しても意味がありません。

本記事の数式・Excel式・VBAコードの利用について

本記事は、複数の維持管理シナリオをLCCで比較する方法を理解するための参考情報です。

記事中の費用額、発生年、補修・更新シナリオはすべて説明用の仮定値です。

実際の維持管理計画、LCC算定、補修・更新判断、業務成果への使用については、発注者仕様、最新の基準・要領、対象施設の点検結果、補修計画、費用算定条件等を確認してください。

実務への適用は利用者自身の責任で行い、シナリオの技術的成立性と計算結果の妥当性を必ず検証してください。