NPV Function Trap: Why the NPV function in Excel is logically “wrong” (Period 0 vs Period 1).

The =NPV() function in Excel is one of the most frequently misused formulas in corporate finance. Analysts routinely feed their upfront capital outlay into the first argument of the formula, expecting Excel to calculate standard Net Present Value. When they do, the formula returns a number that does not match economic reality. Excel’s =NPV() is misnamed: it does not calculate Net Present Value. It calculates the present value of an ordinary annuity starting at the end of Period 1.

Quick Answer

Excel’s =NPV(rate, value1, value2, ...) automatically discounts value1 by one full period. It assumes value1 occurs at the end of Year 1, not today (Year 0). To fix this, exclude the upfront investment from the formula: =Initial_Outlay + NPV(rate, CashFlow_Year1:CashFlow_YearN), where the initial outlay is entered as a negative number.


The Theoretical Definition vs. Excel’s Implementation

In financial theory, Net Present Value is defined as the present value of all future cash inflows minus the initial investment made today (t=0t = 0):

NPV=−C0+∑t=1nCt(1+r)t\text{NPV} = -C_0 + \sum_{t=1}^{n} \frac{C_t}{(1 + r)^t}

Where:

  • C0C_0 is the upfront capital expenditure at Time 0 (today). Because it occurs today, it is not discounted.
  • C1,C2,…,CnC_1, C_2, \dots, C_n are cash flows occurring at the end of subsequent periods (t=1,2,…,nt = 1, 2, \dots, n).
  • r is the discount rate (cost of capital).
Timeline of Cash Flows:
Period:          0 (Today)         1 (End Yr 1)      2 (End Yr 2)      3 (End Yr 3)
Cash Flow:      -$1,000,000          $400,000          $500,000          $600,000
                 │                 │                 │                 │
Discounting:     Not Discounted    1 Period          2 Periods         3 Periods
                 (1 + r)^0 = 1     (1 + r)^1         (1 + r)^2         (1 + r)^3

What Excel Actually Does

Excel’s =NPV() function does not know about Period 0. It treats the very first number passed into its values argument as occurring at the end of Period 1.

If you write:

=NPV(10%, -1000000, 400000, 500000, 600000)   <-- INCORRECT

Excel calculates:

Output=−1,000,000(1+0.10)1+400,000(1+0.10)2+500,000(1+0.10)3+600,000(1+0.10)4\text{Output} = \frac{-1,000,000}{(1 + 0.10)^1} + \frac{400,000}{(1 + 0.10)^2} + \frac{500,000}{(1 + 0.10)^3} + \frac{600,000}{(1 + 0.10)^4}

By discounting the upfront cost by one full year, Excel reduces the effective burden of the initial investment from -$1,000,000 to -$909,091. This artificially inflates the project’s net value by nearly $91,000, leading investment committees to approve unprofitable capital projects based on bad math.


The Two Correct Ways to Calculate NPV in Excel

To get the true Net Present Value, use one of two established modeling approaches:

Choosing the Right Method:
   ├── Cash flows occur on uniform annual cycles? ──> Method 1: Outlay Outside the Function
   └── Cash flows occur on specific calendar dates? ─> Method 2: Use =XNPV()

Method 1: Keep the Initial Investment Outside the Function

The standard corporate finance convention is to leave the Period 0 cash flow out of the =NPV() formula entirely:

=C4 + NPV(Discount_Rate, C5:C8)

Where:

  • Cell C4 contains the upfront investment entered as a negative number ($1,000,000).
  • Cells C5:C8 contain the subsequent cash flows from Year 1 through Year 4.

Because C4 sits outside the function, Excel adds it at full face value without applying a discount factor.

Method 2: Use =XNPV() for Calendar-Based Accuracy

If your cash flows occur on irregular calendar dates, or if you want to avoid confusion entirely, use =XNPV().

Unlike =NPV(), =XNPV() requires a paired array of dates. It explicitly evaluates the first date in the series as Time 0 and does not discount it:

=XNPV(Discount_Rate, Cash_Flow_Range, Date_Range)
Example Setup:
Row 4:  -$1,000,000   |   2026-03-31  (Time 0: Discounted at 0 days)
Row 5:     $400,000   |   2027-03-31  (Time 1: Discounted at 365 days)
Row 6:     $500,000   |   2028-03-31  (Time 2: Discounted at 731 days)

Formula:
=XNPV(0.10, B4:B6, C4:C6)

=XNPV() discounts each cash flow using the exact day count: di−d0365\frac{d_i – d_0}{365}. This eliminates both the Period 0 discounting error and day-count distortions.


Auditing Models for the NPV Error

To confirm whether an existing financial model suffers from this trap:

  1. Inspect Formula References: Click on the cell containing the =NPV() formula. Trace its precedent cells. If the range includes the initial investment cell, the model contains an error.
  2. Reconcile Against IRR: Calculate the Internal Rate of Return using =IRR(C4:C8). If you set the discount rate in your =NPV() formula equal to the resulting IRR, the true NPV must equal exactly $0.00. If your =NPV() formula returns a positive number at the IRR rate, the initial outlay is being improperly discounted.

For troubleshooting instances where IRR formulas fail to resolve alongside your valuation models, review #NUM! in IRR: Handling multiple internal rates of return in non-conventional cash flows..