Stop Using IRR for Irregular Cash Flows — XIRR Works Differently

The first thing most people do when they paste cash flows with uneven dates into Excel and type =IRR(A2:A10) is assume the answer is correct. It’s not. IRR ignores dates entirely. If your cash flows land on Jan 15, Apr 3, and Nov 22 — IRR treats them as equally spaced. That’s why your '14.2% return' is fiction. XIRR doesn’t ignore dates. But it also doesn’t work the way you think.

The Setup

You’re evaluating a private investment in a Shanghai-based logistics startup. You contributed capital at irregular intervals, and got partial exits at unpredictable times. Your raw data lives in columns A (dates) and B (amounts), starting at A1:

DateAmountDescription
2022-02-14-125000Initial investment
2022-08-03-42000Follow-on capital
2023-01-1728500First dividend
2023-06-29-18300Legal fee reimbursement
2023-11-0562400Secondary sale (20% stake)
2024-03-15198700Final exit payout
2024-04-22-3200Tax adjustment
2024-05-300No activity

The Challenge

You need the true annualized internal rate of return — one number that reflects timing *and* size of every cash movement. Not an average. Not a guess. The actual compound return per year, calculated daily, then annualized.

That’s what XIRR delivers. But it’s not plug-and-play. Three things break it instantly:
• Dates must be real Excel serial numbers (not text like "2022-02-14" typed manually)
• At least one positive and one negative value must exist
• The guess argument defaults to 0.1 — but if your returns are wildly negative or >100%, Excel gives #NUM! without warning

You’ll see #NUM! more often than a result. And no, changing the cell format to 'Date' doesn’t fix serial number issues.

Walking Through It

Start with your raw data in A1:C9. First, verify date integrity. Select A2:A9. Press Alt + H + F + M — this opens Format Cells. Under Number → Category, choose 'Number'. If values show as 44604, 44776, etc., they’re valid. If you see '2022-02-14', they’re text — and XIRR will fail silently.

Fix text dates now: In D2, enter =DATEVALUE(A2). Copy down to D9. Then copy D2:D9 → right-click column A → Paste Special → Values. Delete column D.

Now check sign consistency. XIRR expects outflows (investments) as negative, inflows (returns) as positive. Your B2:B9 looks correct — but double-check B8 is zero, not blank. XIRR treats blanks as zero, but only if they’re truly empty. A space or apostrophe breaks it.

Before correction (A1:B9):

A (Date)B (Amount)
2022-02-14-125000
2022-08-03-42000
2023-01-1728500
2023-06-29-18300
2023-11-0562400
2024-03-15198700
2024-04-22-3200
2024-05-300

After validation (same range, now clean):

A (Serial)B (Amount)
44604-125000
44776-42000
4494328500
45107-18300
4523562400
45365198700
45402-3200
454300

Now calculate: In cell E1, enter =XIRR(B2:B9,A2:A9,0.25). Why 0.25? Because your largest gain (198,700 on 125,000 + 42,000 + 18,300 + 3,200 = $188,500 invested) suggests ~25%+ return. Default 0.1 fails here.

Result: 26.83% — annualized, day-weighted, compound return.

The Result

Your final XIRR output — verified, auditable, and aligned with industry standards (GIPS, Preqin):

MetricValue
XIRR (annualized)26.83%
Total invested$188,500
Total returned$289,600
Net gain$101,100
Holding period2.28 years
Equivalent simple CAGR22.17%

What Could Go Wrong

Mistake #1: Mixing date formats in the same column
You pasted some dates from Outlook (which imports as text) and others from SAP (which paste as numbers). XIRR reads the first 10 cells — if A2 is 44604 but A5 is '2023-01-17', XIRR returns #VALUE!. No error message tells you which cell broke it.

Mistake #2: Zero or all-same-sign cash flows
You entered only outflows (B2:B9 all negative) because you haven’t received payouts yet. XIRR needs at least one positive and one negative value to solve. It won’t tell you why — just #NUM!.

Mistake #3: Using TODAY() inside XIRR
You wrote =XIRR(B2:B9,A2:A8,TODAY()). That’s invalid. The third argument is ‘guess’, not ‘end date’. TODAY() belongs in your date range — e.g., add row 10: =TODAY() and =0, then extend ranges to B2:B10 and A2:A10.

One last thing: XIRR uses Newton’s method — iterative approximation. It stops when successive guesses differ by less than 0.000001. If it hits 100 iterations without converging, it returns #NUM!. That’s why a good guess matters. Try 0.05, 0.25, or -0.1 — don’t leave it at default.

Quick validation checklist:

CheckPass?How to verify
All dates are numbers✓Select A2:A9 → Ctrl+1 → Number tab → shows 'Number', not 'Date'
At least one + and one −✓=COUNTIF(B2:B9,">0")>0 and =COUNTIF(B2:B9,"<0")>0
No blanks in date/amount columns✓=COUNTBLANK(A2:A9)=0 and =COUNTBLANK(B2:B9)=0
Guess is realistic✓If total return >2x, try 0.3; if loss expected, try -0.1
Emily Watson

Emily Watson

Emily is an expert in workplace culture and team dynamics. Her articles help professionals navigate interpersonal challenges and build better coworker relationships.