Financial functions

COUPNCD

Matches all 5,591 recorded answers

Recorded: 5,584 in the answer bank and 7 workbook cells. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicCOUPNCD
BulgarianCOUPNCD
CzechCOUPNCD
DanishKUPONDAG.NÆSTE
GermanCOUPNCD
GreekCOUPNCD
English (Australia)COUPNCD
English (United Kingdom)COUPNCD
English (United States)COUPNCD
SpanishCUPON.FECHA.L2
EstonianCOUPNCD
FinnishKORKOPÄIVÄ.SEURAAVA
FrenchDATE.COUPON.SUIV
HebrewCOUPNCD
CroatianCOUPNCD
HungarianELSŐ.SZELVÉNYDÁTUM
IndonesianCOUPNCD
ItalianCOUPNCD
JapaneseCOUPNCD
KoreanCOUPNCD
LithuanianCOUPNCD
LatvianCOUPNCD
NorwegianCOUPNCD
DutchCOUP.DATUM.NB
PolishWYPŁ.DATA.NAST
Portuguese (Brazil)COUPNCD
Portuguese (Portugal)CUPDATAPRÓX
RomanianCOUPNCD
RussianДАТАКУПОНПОСЛЕ
SlovakCOUPNCD
SlovenianCOUPNCD
Serbian (Latin)COUPNCD
SwedishKUPNKD
ThaiCOUPNCD
TurkishKUPONGÜNSKT işlevi
UkrainianCOUPNCD
VietnameseCOUPNCD
Chinese (Simplified)COUPNCD
Chinese (Hong Kong)COUPNCD
Chinese (Traditional)COUPNCD

Names from Microsoft's support site.

What it does

COUPNCD(settlement, maturity, frequency, [basis])

COUPNCD(settlement, maturity, frequency, [basis]) returns the next coupon date strictly after the settlement date — as a date serial, which Excel's date formatting renders as a date.

Microsoft's Learn page describes it as returning "a number that represents the next coupon date after the settlement date", and declares the return type as Double. It is a date-valued function returning a plain number.

The whole content of the function is the schedule it derives, so this page hosts the description that the other five coupon functions refer to.

Arguments

COUPNCD(settlement, maturity, frequency, [basis]) — the same four arguments as every other member of the family.

ArgumentMeaningRequired?
settlementThe security's settlement date — "the date after the issue date when the security is traded to the buyer".Required
maturityThe security's maturity date — "the date when the security expires".Required
frequencyCoupon payments per year. Microsoft: "For annual payments, frequency = 1; for semiannual, frequency = 2; for quarterly, frequency = 4."Required
basisThe day-count basis, 0–4.Optional, defaults to 0

The argument descriptions are quoted from Microsoft's Learn page.

basis is documented on this page with the standard five-row table:

basisDay count basis
0 or omittedUS (NASD) 30/360
1Actual/actual
2Actual/360
3Actual/365
4European 30/360

basis cannot change this function's answer. A coupon date is a calendar date; no day-count convention moves it. COUPNCD nevertheless accepts basis and validates it, so an out-of-range basis turns a perfectly well-defined date into an error. That is a real, observable dependency on an argument that does not participate in the computation — worth knowing when a COUPNCD formula starts erroring after someone edits a shared basis cell.

Microsoft documents that "All arguments are truncated to integers." Dates should be produced by DATE or by other formulas rather than typed as text; ordinary coercion rules are in Coercion and lifting.

Try it

Input cells (optional)

Example: {"B2": 3, "B3": 4}. A1 holds the formula. Other cells need values before a formula can read them.

Enter a formula, then calculate.

Runs locally in your browser with OneCalc. Its answer may differ from Excel. Use English function names and commas between arguments.

Quirks

The coupon schedule

None of the six coupon functions is given a coupon schedule. They are given a maturity date and a frequency, and they reconstruct the schedule from those two facts:

the coupon dates are  maturity,  maturity − p,  maturity − 2p,  maturity − 3p, …
where p = 12 / frequency  months

Coupon dates are therefore anchored at maturity, counted backwards, and there is no issue date to stop the schedule; FN-COUPNUM-001 records what Excel does when it runs back past the start of 1900. settlement selects a period from that ladder: the one whose start is at or before settlement and whose end is after it.

Three consequences do most of the work on all six pages:

  1. The day of the month comes from maturity, not from settlement. A bond maturing on the 15th has coupons on the 15th. Everything else about the trade is irrelevant to the schedule.

The schedule is quasi-periodic, not periodic: because the month-end rule clamps, stepping back n periods is not always the same as stepping back one period n times from an intermediate date. Implementations that step iteratively and implementations that compute the offset in one jump can disagree.

Result and edge cases

  • settlement on a coupon date returns the following coupon date under the reference engine, not settlement itself. See the schedule section above; this is undocumented.
  • settlement one day before maturity returns maturity, which is always a coupon date by construction.
  • settlement ≥ maturity is a documented error.
  • Month-end maturities propagate month-end coupon dates: a 31 August maturity at frequency 2 gives a 28 or 29 February coupon, not a 28th-of-the-month coupon.
  • Empty, missing and error arguments follow the shared call model.

Errors

Documented on Microsoft's Learn page for this function, in these words (it says "generates an error" without naming a worksheet error value):

Condition (documented)Documented outcome
settlement or maturity is not a valid dateerror
frequency is any number other than 1, 2 or 4error
basis < 0 or basis > 4error
settlement ≥ maturityerror

On basis 1 COUPDAYS walks back from maturity by its own rule, not COUPPCD to COUPNCD

On basis 1 (actual/actual) COUPDAYS does not always equal COUPNCD minus COUPPCD. Its rule: start at maturity and step back by 12/frequency months. Each step keeps the day of the month and clamps it to the length of the target month, and the clamped date is the start of the next step, so passing through February lowers the day for every earlier date. Stop at the last date still after settlement, call it next. The answer is the number of actual days from one period before next up to next, and this last step keeps month ends: if next is the last day of its month, the start is the last day of its month. On the other bases the answer is 360/frequency (bases 0, 2, 4) or 365/frequency (basis 3). With this rule, all 5,584 recorded rows match (4,072 distinct inputs): 5,568 numbers and 16 #NUM!, from Excel builds 20131 and 20430. Of the 967 basis 1 rows, 81 (49 distinct inputs) differ from the day count between the dates of a schedule anchored on maturity with month ends kept. For maturity 1998-06-30 with semi-annual coupons, COUPDAYS(35748,35976,2,1) is 183, from 1997-06-30 to 1997-12-30; the anchored schedule gives 184. In one recorded case all three functions were read on the same inputs: COUPNCD(44043,2958465,2,1) less COUPPCD is 44196 - 44012 = 184, and COUPDAYS is 183.

Explanation (inferred): The rule reproduces every recorded row; that Excel's code works this way is inferred. For basis 1 no settlement or maturity before serial 61, where Excel's calendar differs from the Gregorian one, is in the recorded rows.

FormulaExcelMathematical value
COUPDAYS(35748, 35976, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 35748
0x40e1748000000000

maturity: 35976
0x40e1910000000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

183
0x4066e00000000000
—
COUPDAYS(36452, 36891, 4, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 36452
0x40e1cc8000000000

maturity: 36891
0x40e2036000000000

frequency: 4
0x4010000000000000

basis: 1
0x3ff0000000000000

91
0x4056c00000000000
—
COUPDAYS(36812, 47907, 4, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 36812
0x40e1f98000000000

maturity: 47907
0x40e7646000000000

frequency: 4
0x4010000000000000

basis: 1
0x3ff0000000000000

92
0x4057000000000000
—
COUPDAYS(37015, 38137, 4, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 37015
0x40e212e000000000

maturity: 38137
0x40e29f2000000000

frequency: 4
0x4010000000000000

basis: 1
0x3ff0000000000000

89
0x4056400000000000
—
COUPDAYS(38044, 38411, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 38044
0x40e2938000000000

maturity: 38411
0x40e2c16000000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

184
0x4067000000000000
—
COUPDAYS(34911, 35216, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 34911
0x40e10be000000000

maturity: 35216
0x40e1320000000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

183
0x4066e00000000000
—
COUPPCD(44043, 2958465, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 44043
0x40e5816000000000

maturity: 2958465
0x4146924080000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

44012
0x40e57d8000000000
—
COUPNCD(44043, 2958465, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 44043
0x40e5816000000000

maturity: 2958465
0x4146924080000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

44196
0x40e5948000000000
—
COUPDAYS(44043, 2958465, 2, 1)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 44043
0x40e5816000000000

maturity: 2958465
0x4146924080000000

frequency: 2
0x4000000000000000

basis: 1
0x3ff0000000000000

183
0x4066e00000000000
—

Inputs, build details and evidence

COUPNUM is #NUM! when the coupon before settlement falls before 1900

If the coupon date before settlement, counted back from maturity, falls before 1 January 1900, COUPNUM gives #NUM!. The other coupon functions still answer for the same inputs: COUPPCD returns 0, COUPNCD the next coupon, and COUPDAYS, COUPDAYBS and COUPDAYSNC a day count. With maturity serial 400 (1901-02-03) and semi-annual coupons, the coupon dates are serials 34 and 216: settlement 33 gives #NUM!, settlement 34 gives 2. With maturity 367, settlement 0 gives #NUM! and settlement 1 gives 2. This covers settlement 0 too: COUPNUM(0,m,2,0) was #NUM! for every maturity read.

FormulaExcelMathematical value
COUPNUM(33, 400, 2, 0)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

settlement: 33
0x4040800000000000

maturity: 400
0x4079000000000000

frequency: 2
0x4000000000000000

basis: 0
0x0000000000000000

#NUM!—
COUPNUM(34, 400, 2, 0)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

settlement: 34
0x4041000000000000

maturity: 400
0x4079000000000000

frequency: 2
0x4000000000000000

basis: 0
0x0000000000000000

2
0x4000000000000000
—
COUPNUM(0, 367, 2, 0)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

settlement: 0
0x0000000000000000

maturity: 367
0x4076f00000000000

frequency: 2
0x4000000000000000

basis: 0
0x0000000000000000

#NUM!—
=COUPNUM(0,182,2,0)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#NUM!—
=COUPNUM(A1,400,2,0)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Number supplied through a cell.

A1: 0
0x0000000000000000

#NUM!—
=COUPPCD(A1,400,2,0)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Number supplied through a cell.

A1: 0
0x0000000000000000

0
0x0000000000000000
—
=COUPNCD(A1,400,2,0)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Number supplied through a cell.

A1: 0
0x0000000000000000

34
0x4041000000000000
—

Inputs, build details and evidence

How to implement

Numerical notes

There is no floating-point content here worth the name: the answer is an integer-valued date serial. The engineering content is all in the schedule.

  1. Iterate or jump, but be consistent. Stepping back one period at a time and computing the period index directly give different answers under a clamping month rule. The reference engine iterates.
  2. The month-end predicate is a decision, not a fact. "Is this date the last day of its month?" is cheap; deciding that the answer should propagate to every generated date is a modelling choice with no documentary support.
  3. Cost is linear in the settlement-to-maturity gap under an iterating implementation. A 30-year quarterly bond settled at issue costs 120 iterations, which is fine; a synthetic test with a maturity centuries out is not.
  4. Do not route this through a day-count routine. basis must be validated and then ignored. An implementation that computes the answer via a year fraction will introduce basis-dependence into a function that has none.

Rust code

Show the CalcFunc source of this function

Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.

COUPNCD · 4 lines · calc-func/src/catalogue/bonds.rs on GitHub
13 coupncd_fn "COUPNCD" (3, 4) [V "settlement", V "maturity", V "frequency", V "basis"] |s, a, sv| {
    let (settlement, maturity, frequency, b) = coupon_args(s, a, sv)?;
    date_out(s, sv, coupon::coupncd_kernel(settlement, maturity, frequency, b))
}
coupncd_kernel · 10 lines · calc-func/src/ported/coupon_family.rs on GitHub
pub fn coupncd_kernel(
    settlement: f64,
    maturity: f64,
    frequency: f64,
    basis: Option<f64>,
) -> Result<f64, WorksheetErrorCode> {
    let ctx = parse_coupon_context(settlement, maturity, frequency, basis)?;
    let period = locate_coupon_period(ctx)?;
    Ok(period.next as f64)
}

Kernels shared with other functions

Argument and result plumbing

  • fail catalogue/kit
  • num catalogue/kit

No implementation has been published with a Handbook test suite for this function.

Version differences

The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.

Excel 16.0 buildPlatform and CPUCaptured inputs
20131Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics1,060
20430Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics3,012

The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.

Recorded environments and comparison details.

Excel 16.0 build 20430

Windows 64-bit, AMD Ryzen 7 4800H

COUPNCD(44043, 2958465, 2, 1) returned 44196 (0x40e5948000000000). Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • COUPNCD(44043, 2958465, 2, 1) → 44196
    0x40e5948000000000 (cell-value2)

Excel 16.0.20527.20088

Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA

=COUPNCD(A1,400,2,0) returned 34 (0x4041000000000000). Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • =COUPNCD(A1,400,2,0) → 34
    0x4041000000000000 (cell-value2)

Excel 16.0 build 20131

Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics

1,060 captured inputs are indexed for this environment. Capture dates: 2026-07-19 to 2026-07-19. This is a reading count, not a comparison with another build.

Excel 16.0 build 20430

Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics

3,012 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.

Alternatives

Relationships

  • COUPPCD — the backward end of the same period. COUPPCD and COUPNCD bracket settlement, and together they define the current coupon period.
  • COUPDAYBS, COUPDAYSNC, COUPDAYS — the three day counts taken against those two dates, though on basis 1 COUPDAYS can use another interval (FN-COUPDAYS-001). Note that the three do not always add up; see the additivity discussion on COUPDAYS.
  • COUPNUM — how many coupon dates remain from settlement to maturity on the same ladder.
  • PRICE, YIELD, DURATION, MDURATION — the consumers. They rebuild this same schedule internally rather than calling these functions, which is why a schedule disagreement between Excel's COUPNCD and Excel's PRICE is possible in principle and has been observed for the day counts in this family; see COUPDAYS.
  • EDATE and EOMONTH — the general-purpose month-stepping functions. EDATE clamps the day of month; it does not implement "month-end sticks to month-end". Rebuilding a coupon schedule with EDATE therefore reproduces COUPNCD for ordinary maturities and diverges for month-end ones.
  • Confused with: EDATE(maturity, ±n × 12/frequency), for exactly that reason.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents