Why does your NPV return $187,500 when your CFO’s model says $164,100? Why does changing the first cash flow from cell B2 to B3 flip the result by 12%? Why does =NPV(0.08,B2:B10) ignore the fact that Year 0 happens now, not at the end of Year 1?
The answer lives in Excel’s quiet, unspoken assumption: NPV() treats the first value as occurring at the end of Period 1. Not today. Not at time zero. That single assumption breaks most real-world capital budgeting models — unless you know how to work around it.
The Setup
Lets say you’re evaluating a solar installation project for GreenHaven Logistics. You’ve got an upfront cost, then five years of net savings (after maintenance and incentives), and a salvage value at the end. All dates are precise: the investment happens on 2024-01-01, and each cash flow lands on December 31 of its respective year.
| Year | Date | Cash Flow | Description |
|---|---|---|---|
| 0 | 2024-01-01 | -$325,000 | Upfront hardware & install |
| 1 | 2024-12-31 | $92,400 | Net energy savings (Y1) |
| 2 | 2025-12-31 | $89,100 | Net savings (Y2, after inflation) |
| 3 | 2026-12-31 | $85,300 | Savings (Y3) |
| 4 | 2027-12-31 | $78,600 | Savings (Y4) |
| 5 | 2028-12-31 | $112,900 | Savings + $25k salvage value |
| — | — | $133,300 | Sum of all cash flows |
Data sits in A1:D8. Discount rate is 8.2% — entered in cell F1.
The Challenge
You want the true Net Present Value: the sum of today’s values of all future cash flows, including the initial outlay at time zero.
The trap? =NPV(F1,B2:B7) — if you try that with the numbers above — assumes B2 ($92,400) arrives one period after today. But in reality, B2 is Year 1 — which does land one period later. So far, so good. The problem is that your Year 0 outflow ($325,000) is sitting in B1 — and NPV() ignores it completely.
Worse: if someone pastes =NPV(F1,B1:B7), Excel treats B1 as the first period’s inflow — meaning it discounts the $325,000 as if it were received at the end of Year 1. That’s finance heresy. Your model now implies you get paid $325k up front, then pay it back later. The beauty of this approach is how cleanly it exposes timing logic — once you see it, you can’t unsee it.
Walking Through It
Step 1: Put discount rate in F1 → 0.082. List cash flows in column B, starting with Year 0 in B1.
Step 2: Don’t use =NPV(F1,B1:B7). Instead, isolate Year 0 and feed only Years 1–5 into NPV(). Type in C1:=NPV(F1,B2:B7)+B1
This tells Excel: “Discount B2 through B7 (Years 1–5) back to today, then add B1 — which is already at present value.”
Before (wrong):=NPV(F1,B1:B7) → returns $129,487
After (correct):=NPV(F1,B2:B7)+B1 → returns -$41,719
| Formula | Result | Why It’s Wrong/Right |
|---|---|---|
=NPV(F1,B1:B7) |
$129,487 | Treats B1 (-$325k) as Year 1 inflow — discounts it unnecessarily |
=NPV(F1,B2:B7) |
$283,787 | Only discounts Years 1–5. Ignores Year 0 entirely. |
=NPV(F1,B2:B7)+B1 |
-$41,719 | Correct: adds undiscounted Year 0 to discounted future flows |
Pro tip: Press Alt + M + V to open the Formula Auditing toolbar — then click “Evaluate Formula” (F9 inside the dialog) to step through each cash flow’s discount factor. Watch how Excel applies (1+0.082)-1, (1+0.082)-2, etc. — and notice it never touches B1.
The Result
Here’s the clean, auditable output — calculated in column C next to each cash flow, using explicit discount factors. This is what your finance team should see in their model review.
| Year | Cash Flow | Discount Factor | Present Value |
|---|---|---|---|
| 0 | -$325,000 | 1.0000 | -$325,000 |
| 1 | $92,400 | 0.9242 | $85,396 |
| 2 | $89,100 | 0.8542 | $76,109 |
| 3 | $85,300 | 0.7894 | $67,335 |
| 4 | $78,600 | 0.7296 | $57,346 |
| 5 | $112,900 | 0.6743 | $76,128 |
| Total | -$41,719 |
This matches =NPV(F1,B2:B7)+B1 exactly — and gives you full visibility into each component.
What Could Go Wrong
| Symptom | Cause | Fix |
|---|---|---|
| NPV returns positive when ROI analysis says reject | Used =NPV(rate, entire range) including Year 0 | Separate Year 0: =NPV(rate, B2:Bn) + B1 |
| Results change when you insert a blank row above data | Relative references like B2:B7 shift — but NPV expects fixed periods | Use named ranges (e.g., ‘FutureCF’) or absolute refs like $B$2:$B$7 |
| #VALUE! error with date-based cash flows | Mixed dates and numbers in same column — Excel coerces text to 0 | Keep dates in column A, cash flows in column B — no merged cells, no headers in data rows |
One counterintuitive tip: if your cash flows don’t land on perfect annual intervals (e.g., 18 months, 27 months), skip NPV() entirely. Use XNPV() instead — it takes date arguments. Formula: =XNPV(F1,B1:B7,A1:A7), where A1:A7 holds actual dates. That’s the only way to handle uneven periods — and it auto-handles Year 0 correctly if A1 contains today’s date.
Next step: Open your last capital request model. Find the NPV formula. If it includes Year 0 in the NPV() range — rewrite it using =NPV(rate, future_range) + year_zero_cell. Then press F9 to recalculate — and compare before/after in cell G1.