ACCRINTM returns the accrued interest on a security that pays all its interest at
maturity. There are no coupons in between, so there is no schedule to reconstruct: the whole
computation is one interval measured once.
Microsoft's Learn reference states the shape of the equation directly — "A = Number of accrued
days counted according to a monthly basis", "D = Annual Year Basis", and "For interest at
maturity items, the number of days from the issue date to the maturity date is used". Writing
that out:
ACCRINTM = par × rate × (A / D)
So the mathematics is a single product of three numbers, and all of the difficulty is in the
year fraction. The basis argument is not a detail on this page; it is the page.
basis
Convention
Numerator A
Denominator D
0 or omitted
US (NASD) 30/360
30/360-adjusted day count
360
1
Actual/actual
actual calendar days
actual — depends on the years spanned
2
Actual/360
actual calendar days
360
3
Actual/365
actual calendar days
365
4
European 30/360
30/360-adjusted day count
360
That table is Microsoft's, verbatim from the Learn page. The basis-1 construction — what
"actual year" means when the interval spans a year boundary or a leap day — is not specified
there, and is the same unsettled question described at length on YEARFRAC.
For an at-maturity instrument this matters more than usual, because the interval is typically
long: a bill with a two-year term crosses at least one year boundary by construction.
One naming trap
The second argument is called settlement on the worksheet, and Microsoft's own Learn page
describes it as "the security's maturity date". For an at-maturity security these are the
same date in normal use — the interest stops accruing when the paper matures — but the argument
name and the argument description do not agree, and code written against the name alone will
pass the wrong date on any early-settlement scenario. The Handbook records the naming
discrepancy; it does not resolve which reading Excel implements.
Arguments
ACCRINTM(issue, settlement, rate, [par], [basis])
rate is annual. Unlike ACCRINT there is no frequency to divide it by,
so an annual rate goes in unmodified and the year fraction does all the scaling.
par scales the answer linearly, which is why a wrong par produces a plausible-looking
wrong number rather than an obviously broken one.
Microsoft documents that "Issue, maturity, and basis are truncated to integers", and carries
the standard warning that dates should come from DATE or from other formulas rather than being
typed as text. Numeric slots otherwise follow the shared model in
Coercion and lifting.
Try it
Quirks
Result and edge cases
Returns a Number: an amount of currency in the units of par.
Long intervals under basis 1 are where the unspecified actual/actual construction becomes
visible; two defensible constructions differ by a fraction of a day per year spanned.
Fractional date serials contribute no fractional days, per the documented truncation rule.
Empty, missing and error arguments follow the shared call model; see
The value universe.
Errors
Microsoft's Learn page documents four conditions, in these words (it says "will generate an
error" without naming a worksheet error value):
Condition (documented)
Documented outcome
issue or maturity is not a valid date
error
rate = 0, or par = 0
error
basis < 0 or basis > 4
error
issue = maturity
error
On basis 1 the fictitious 1900-02-29 is not a leap day, and YEARFRAC takes serial 0 as a date
Excel's calendar holds a 29 February 1900, serial 60, that never existed. On basis 1 (actual/actual) it does not make 1900 a leap year: YEARFRAC(59,60,1) is 1/365, where the real 1904-02-29 gives YEARFRAC(1520,1521,1) = 1/366. Serial 0 is accepted as a date: YEARFRAC(0,5,0) is 5/360 and YEARFRAC(0,60,1) is 60/365. Reversed dates give the same answer as in order. ACCRINTM, DISC, INTRATE, PRICEDISC and RECEIVED take the same 365 and 366 on those dates: DISC(59,60,99,100,1) is about 3.65 and DISC(1520,1521,99,100,1) about 3.66.
Formula
Excel
Mathematical value
YEARFRAC(59, 60, 1) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
Number supplied through a cell.
start_date: 59 0x404d800000000000
end_date: 60 0x404e000000000000
basis: 1 0x3ff0000000000000
0.0027397260273972603 0x3f66719f3601671a
—
YEARFRAC(1520, 1521, 1) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
Number supplied through a cell.
start_date: 1520 0x4097c00000000000
end_date: 1521 0x4097c40000000000
basis: 1 0x3ff0000000000000
0.00273224043715847 0x3f6661ec6a5122f9
—
YEARFRAC(0, 5, 0) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
Number supplied through a cell.
start_date: 0 0x0000000000000000
end_date: 5 0x4014000000000000
basis: 0 0x0000000000000000
0.013888888888888888 0x3f8c71c71c71c71c
—
YEARFRAC(0, 60, 1) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
Number supplied through a cell.
start_date: 0 0x0000000000000000
end_date: 60 0x404e000000000000
basis: 1 0x3ff0000000000000
0.1643835616438356 0x3fc50a8542a150a8
—
DISC(59, 60, 99, 100, 1) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
Number supplied through a cell.
settlement: 59 0x404d800000000000
maturity: 60 0x404e000000000000
pr: 99 0x4058c00000000000
redemption: 100 0x4059000000000000
basis: 1 0x3ff0000000000000
3.650000000000003 0x400d33333333333a
—
DISC(1520, 1521, 99, 100, 1) Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading fileInputs and reference value
There is nothing to lose precision in. Three finite numbers are multiplied; the only
rounding is in A/D and in the two products. The interesting engineering question is not
accuracy but op order: par × rate × (A/D) and par × (rate × A) / D differ in the last
bit, and an implementation targeting Excel compatibility must pin which one it forms.
D is a small integer in three of five cases, so A/D is a quotient of small integers
by 360 or 365 — inexact in binary, and therefore genuinely last-bit-sensitive.
Basis 1 needs a written specification before it needs code. Which years contribute,
how leap days are counted, and what happens across multi-year intervals are all choices, and
the documentation makes none of them.
Truncate all three integer-valued arguments first, per the documented rule, before any
arithmetic — including basis.
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.
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 build
Platform and CPU
Captured inputs
20430
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
2,406
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.
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
2,406 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
ACCRINT — the periodic-coupon counterpart. It needs frequency and
calc_method because it must reconstruct a coupon schedule; this function needs neither. The
two agree only in the degenerate case where the whole interval is one coupon period.
YEARFRAC — the day-count engine. ACCRINTM(i, s, r, p, b) should be
p × r × YEARFRAC(i, s, b), and testing that identity is the cheapest way to localize a
disagreement to one of the two functions.
INTRATE, RECEIVED, DISC — the discount-instrument family, which measures time the
same way but quotes the result as a rate rather than an amount.
Confused with: ACCRINT (above), and with ISPMT-style simple-interest arithmetic, which
uses a period count rather than a day-count basis.