Financial functions
AMORLINC
Matches all 127 recorded answers
Recorded: 127 workbook cells. How we measure this · See the Rust code
Local names in 40 languages
| Language | Name in Excel |
|---|---|
| Arabic | AMORLINC |
| Bulgarian | AMORLINC |
| Czech | AMORLINC |
| Danish | AMORLINC |
| German | AMORLINC |
| Greek | AMORLINC |
| English (Australia) | AMORLINC |
| English (United Kingdom) | AMORLINC |
| English (United States) | AMORLINC |
| Spanish | AMORTIZ.LIN |
| Estonian | AMORLINC |
| Finnish | AMORLINC |
| French | AMORLINC |
| Hebrew | AMORLINC |
| Croatian | AMORLINC |
| Hungarian | ÉRTÉKCSÖKK |
| Indonesian | AMORLINC |
| Italian | AMORLINC |
| Japanese | AMORLINC |
| Korean | AMORLINC |
| Lithuanian | AMORLINC |
| Latvian | AMORLINC |
| Norwegian | AMORLINC |
| Dutch | AMORLINC |
| Polish | AMORT.LIN |
| Portuguese (Brazil) | AMORLINC |
| Portuguese (Portugal) | AMORLINC |
| Romanian | AMORLINC |
| Russian | АМОРУВ |
| Slovak | AMORLINC |
| Slovenian | AMORLINC |
| Serbian (Latin) | AMORLINC |
| Swedish | AMORLINC |
| Thai | AMORLINC |
| Turkish | AMORLINC işlevi |
| Ukrainian | AMORLINC |
| Vietnamese | AMORLINC |
| Chinese (Simplified) | AMORLINC |
| Chinese (Hong Kong) | AMORLINC |
| Chinese (Traditional) | AMORLINC |
Names from Microsoft's support site.
What it does
AMORLINC(cost, date_purchased, first_period, salvage, period, rate, [basis])
The schedule is as simple as depreciation gets:
annual charge = cost × rate first charge (period 0) = cost × rate × f, where f = fraction of the first period held every later charge = cost × rate, until the depreciable basis (cost − salvage) runs out final charge = whatever is left of the depreciable basis
f is a day-count fraction from date_purchased to first_period, computed on the chosen
basis. When the asset is bought exactly on first_period the fraction is 1 and the first
period is a full one.
The only genuinely interesting quantity is f, and f is a YEARFRAC
computation under a different name. Everything else is a constant repeated until the money runs
out.
period is 0-based — period 0 is the prorated first period. This is the same convention as
AMORDEGRC and the opposite of DB and DDB,
which count from 1. Mixing the two conventions in one model is the most common way to get a
plausible but wrong depreciation schedule.
Arguments
AMORLINC(cost, date_purchased, first_period, salvage, period, rate, [basis])
| Argument | Meaning | Required? |
|---|---|---|
cost | The cost of the asset. | Required |
date_purchased | The date of purchase. | Required |
first_period | The date of the end of the first period. | Required |
salvage | The salvage value at the end of the asset's life. | Required |
period | The period. 0-based: 0 is the prorated first period. | Required |
rate | The annual rate of depreciation. | Required |
basis | The year basis. | Optional, defaults to 0 |
first_period is the argument readers misread most often. It is not the length of the first
period and it is not the start of anything: it is the date on which the first accounting period
ends. The prorated fraction is measured from date_purchased up to it.
The basis table for this function has four rows, not five. Microsoft's Learn page gives:
basis | Date system |
|---|---|
| 0 or omitted | 360 days (NASD method) |
| 1 | Actual |
| 3 | 365 days in a year |
| 4 | 360 days in a year (European method) |
Date arguments are Excel date serials in numeric slots. Microsoft's page carries the standard
warning that dates should come from DATE or from other formulas rather than being typed as
text; ordinary coercion rules are in
Coercion and lifting.
Try it
Quirks
Result and edge cases
Returns a Number: the charge for the requested period, in the units of cost.
- Period 0 is the prorated one. Period 1 is a full annual charge even when the asset was
bought a week before
first_period. - The schedule terminates on the depreciable basis. Charges continue at
cost × rateuntil the cumulative total reachescost − salvage; the final period takes only the remainder, and every period after that returns 0 rather than an error. salvage=costgives a depreciable basis of zero, so period 0 returns 0.date_purchased=first_periodgives a fraction of exactly 1 — a full first period, with no proration.- Empty, missing and error arguments follow the shared call model; see The value universe.
Errors
Microsoft's Learn page documents no error conditions for this function at all — it carries
the parameter table, the basis table, the proration sentence and the date-system notes, and
stops. Its sibling's page documents a #NUM! band; this one documents nothing. That silence is
itself a finding: there is no published statement of what AMORLINC does with a negative
cost, a salvage above cost, or a basis of 2, even though the basis table's omission of 2
implies the last one.
How to implement
Numerical notes
- The only computed quantity is the first-period fraction. Everything downstream is repeated multiplication and subtraction of a constant, so an implementation's accuracy is entirely the accuracy of its day count.
- Basis 1 ("Actual") is under-specified, as everywhere in this category. The reference engine splits the interval at calendar-year boundaries and divides each piece by that year's own length; other constructions are defensible and give different fractions across a leap day. See YEARFRAC.
- The schedule must be iterated. The last charge depends on the cumulative total, so there
is no closed form for period n; the cost is
O(period), and an error in the first fraction propagates to the termination point of the whole schedule.
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.
AMORLINC · 6 lines · calc-func/src/catalogue/financial.rs on GitHub26 amorlinc_fn "AMORLINC" (6, 7) [V "cost", V "date_purchased", V "first_period", V "salvage", V "period", V "rate", V "basis"] |s, a, sv| {
let purchased = date_1900(s, a, 1, sv)?;
let first = date_1900(s, a, 2, sv)?;
let basis = if given(a, 6) { num(s, a, 6)? } else { 0.0 };
amor_out(s, amor::amorlinc_kernel(num(s, a, 0)?, purchased, first, num(s, a, 3)?, num(s, a, 4)?, num(s, a, 5)?, Some(basis)))
}
normalize_amorlinc_period · 12 lines · calc-func/src/ported/amor_depreciation_family.rs on GitHubfn normalize_amorlinc_period(value: f64) -> Result<i64, AmorDepreciationEvalError> {
if !value.is_finite() || value < 0.0 {
return Err(AmorDepreciationEvalError::Domain(WorksheetErrorCode::Num));
}
if value.abs() <= EPSILON {
Ok(0)
} else if value < 1.0 {
Ok(1)
} else {
Ok(value.floor() as i64)
}
}
amorlinc_kernel · 45 lines · calc-func/src/ported/amor_depreciation_family.rs on GitHubpub fn amorlinc_kernel(
cost: f64,
date_purchased: f64,
first_period: f64,
salvage: f64,
period: f64,
rate: f64,
basis: Option<f64>,
) -> Result<f64, AmorDepreciationEvalError> {
if !cost.is_finite() || !salvage.is_finite() || !rate.is_finite() {
return Err(AmorDepreciationEvalError::Domain(WorksheetErrorCode::Num));
}
if cost <= 0.0 || salvage < 0.0 || salvage > cost || rate <= 0.0 {
return Err(AmorDepreciationEvalError::Domain(WorksheetErrorCode::Num));
}
let purchase = parse_date_serial(date_purchased)?;
let first = parse_date_serial(first_period)?;
let basis = parse_basis(basis.unwrap_or(0.0))?;
let normalized_period = normalize_amorlinc_period(period)?;
let annual_depreciation = cost * rate;
let initial_fraction = first_period_fraction(purchase, first, basis)?;
// Excel multiplies the rate by the fraction first (dc-j9k: cost*(rate*fraction) matches 78 of
// the 80 AMORLINC readings of sheet dcj9k_closed_form, and the other two were the basis-1
// fraction; (cost*rate)*fraction matched 68).
let first_depreciation = cost * (rate * initial_fraction);
let depreciable_basis = cost - salvage;
if normalized_period == 0 {
return Ok(first_depreciation.min(depreciable_basis).max(0.0));
}
let mut remaining = (depreciable_basis - first_depreciation).max(0.0);
for current in 1..=normalized_period {
let depreciation = remaining.min(annual_depreciation).max(0.0);
if current == normalized_period {
return Ok(depreciation);
}
remaining = (remaining - depreciation).max(0.0);
if remaining <= EPSILON {
return Ok(0.0);
}
}
Ok(0.0)
}
Kernels shared with other functions
date_1900catalogue/financialamor_outcatalogue/financialdays_from_civillocalecivil_from_dayslocaleexcel_serial_from_ymdlocaleymd_from_excel_seriallocalemax_excel_serialported/amor_depreciation_familyparse_basisported/amor_depreciation_familyparse_date_serialported/amor_depreciation_familydays_in_yearported/amor_depreciation_familydays_in_monthported/amor_depreciation_familyactual_daysported/amor_depreciation_familydays360_usported/amor_depreciation_familydays360_euported/amor_depreciation_familyactual_actual_positiveported/amor_depreciation_familyfirst_period_fractionported/amor_depreciation_familymap_amor_depreciation_error_to_wsported/amor_depreciation_family
Argument and result plumbing
No implementation has been published with a Handbook test suite for this function.
Version differences
No comparison between specific Excel builds is recorded here yet. This does not establish that all builds behave alike.
Alternatives
Relationships
- AMORDEGRC — the accelerated sibling, with the same seven arguments,
the same proration and the same four-row basis table. Microsoft describes the difference in
one clause:
AMORDEGRCapplies "a depreciation coefficient … depending on the life of the assets". Set that coefficient to 1 and remove the end-of-life 50/100 per cent steps and you have this function. SLN— the plain straight-line function.SLN(cost, salvage, life)is a flat(cost − salvage)/life.AMORLINCdiffers on three axes at once: it chargescost × raterather than(cost − salvage) × rate, it prorates the first period by calendar date, and it truncates the last charge at the depreciable basis instead of dividing it evenly.- DB — the other function in Excel that prorates a partial first year, but by
a
monthcount rather than by a date pair, and on a declining rather than a linear balance. - DDB,
VDB,SYD— the rest of the depreciation category, all 1-based inperiodand none of them date-aware. - YEARFRAC — the standalone day-count engine that computes the same first-period fraction this function needs.
- Confused with:
SLN(above). The two answer the same accounting question and give different numbers, becauseSLNspreadscost − salvagewhileAMORLINCchargesrateoncostand stops when it hitssalvage.
Named variants
No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents