Excel 16.0 build 20430
Windows, 64-bit, CPU not recorded
1,212 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.
Statistical functions
Matches all 1,230 recorded answers
Recorded: 1,212 in the answer bank and 18 workbook cells. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | MIN |
| Bulgarian | MIN |
| Czech | MIN |
| Danish | MIN |
| German | MIN |
| Greek | MIN |
| English (Australia) | MIN |
| English (United Kingdom) | MIN |
| English (United States) | MIN |
| Spanish | MIN |
| Estonian | MIN |
| Finnish | MIN |
| French | MIN |
| Hebrew | MIN |
| Croatian | MIN |
| Hungarian | MIN |
| Indonesian | MIN |
| Italian | MIN |
| Japanese | MIN |
| Korean | MIN |
| Lithuanian | MIN |
| Latvian | MIN |
| Norwegian | MIN |
| Dutch | MIN |
| Polish | MIN |
| Portuguese (Brazil) | MÍN |
| Portuguese (Portugal) | MIN |
| Romanian | MIN |
| Russian | МИН |
| Slovak | MIN |
| Slovenian | MIN |
| Serbian (Latin) | MIN |
| Swedish | MIN |
| Thai | MIN |
| Turkish | MİN |
| Ukrainian | MIN |
| Vietnamese | MIN |
| Chinese (Simplified) | MIN |
| Chinese (Hong Kong) | MIN |
| Chinese (Traditional) | MIN |
Names from Microsoft's support site.
MIN(number1, [number2], ...)
MIN(number1, [number2], …) returns the smallest of the numeric values it admits.
Mathematically this is the bottom order statistic x₍₁₎ = min{x₁ … xₙ} — the infimum of a
finite set, attained, and therefore one of the inputs. MIN is a selector: it performs no
arithmetic, introduces no rounding error, and returns bits it was given.
min is associative, commutative and idempotent with identity +∞, so it is a monoid fold —
and, as with MAX, the identity is the one thing Excel cannot represent, so the
specification substitutes a value. Microsoft's choice is 0, and on MIN that choice is more
consequential than on MAX; see below.
| Argument | Meaning | Notes |
|---|---|---|
number1 | The first value | See the note below |
number2, … | Further values | Optional |
Microsoft's page states: "Number1 is optional, subsequent numbers are optional. 1 to 255 numbers for which you want to find the minimum value."
Argument boundaries carry no meaning: MIN(A1:A10), MIN(A1:A5, A6:A10) and
MIN(A1, …, A10) all reduce over one pooled set.
Quoted from Microsoft's MIN page, which states the split in consecutive sentences:
As a table:
| Value | Typed directly into the argument list | Reached inside an array or reference |
|---|---|---|
| Number | counted | counted |
TRUE / FALSE | counted (as 1 / 0) | ignored |
| Text that reads as a number | counted | ignored |
| Text that does not read as a number | error | ignored |
| Empty cell | — | ignored |
| Error value | error | error |
This is word-for-word the MAX table with the comparator reversed, which is how it should be: the two functions are documented to differ in nothing but direction. Microsoft's page names the same remedy for wanting more values counted: "If you want to include logical values and text representations of numbers in a reference as part of the calculation, use the MINA function." See MINA, and read its rules before switching.
Returns Number.
No numbers among the arguments. Microsoft documents: "If the arguments contain no
numbers, MIN returns 0." So MIN over a wholly blank range is documented to be 0.
Why it matters more on MIN than on MAX. The documented 0 is not below the data; it
is inside the plausible range. On all-positive data — prices, distances, durations,
counts, every quantity a spreadsheet is usually full of — an empty range makes MIN return
0, which is smaller than every real value and therefore wins every subsequent comparison.
A minimum-of-minimums over several columns reports 0 the moment one column is empty. The
symmetric failure for MAX needs all-negative data, which is rarer. MIN(MIN(A), MIN(B)) ≠ MIN(A ∪ B) whenever one side is empty and the other is entirely positive, and that is the
common case rather than the exotic one.
A single value. MIN(x) is x, for the largest finite double and the smallest subnormal
alike.
+0 and −0 compare equal under IEEE, so which representation is returned is
unspecified and observable through 1/MIN(...). Unverified.
Arrays are consumed by scanning, not lifted elementwise.
Dates and times are numbers wearing formats, so MIN over a date column is the earliest
date.
There is no documented #NUM! or #N/A condition, and no documented empty-input error — the
documented empty-input answer is 0.
MIN has no arithmetic and therefore no rounding error. Three questions remain, and all three
are about definition.
1. The comparison predicate. A minimum needs a total order. IEEE-754 < is one on the
doubles Excel can hold, except that +0 and −0 compare equal; Excel has no NaN in its
published value universe, so the NaN-poisoning problem does not arise at this level. Whether
Excel's MIN uses raw < or the tolerant truncation-style 15-significant-digit comparison it
applies in some other families is open. The consequence is limited to which of two equal-
comparing representations is returned, but it is observable.
3. The empty-set identity. Mathematically min ∅ = +∞, which Excel cannot represent, so
the specification substitutes 0. As argued above, the substitution is directional in its
harm: 0 is a lower bound for most real spreadsheet data, so an empty MIN does not merely
give a wrong answer, it gives an answer that dominates every correct one downstream.
For an implementer, the rule follows directly: initialise with a found flag plus a
sentinel, never with 0 and never with f64::INFINITY alone. 0 is wrong for all-positive
data; +∞ produces a value outside Excel's value universe. Track "have I seen a number"
separately from "what is the best so far", and apply the documented zero only at the end. The
same advice appears on MAX and is worth repeating because the two functions are
usually implemented by the same person on the same afternoon and the mirror case is easy to
get subtly different.
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.
MIN · 1 lines · calc-func/src/catalogue/aggregate.rs on GitHubaggregate(MIN, "MIN", NUMBERS, min)
aggregate catalogue/aggregatemin catalogue/aggregateextreme catalogue/aggregateholds_held_arrays catalogue/aggregateread_held_references catalogue/aggregatenumber_of catalogue/aggregateeach_value catalogue/aggregateread_values catalogue/aggregatereader catalogue/aggregateread_reference catalogue/aggregateoverflow_numbers catalogue/comparisonnumbers catalogue/comparisonin_band catalogue/comparisonRounded::up catalogue/comparisonRoundings::of catalogue/comparisonRoundings::disjoint catalogue/comparisonlow32 decimalNatural::from_u64 decimalNatural::pow10 decimalNatural::normalize decimalNatural::is_zero decimalNatural::mul_add_small decimalNatural::times_pow10 decimalNatural::times_pow5 decimalNatural::times_pow2 decimalExactDecimal::binary decimaloperand coerceNo implementation has been published with a Handbook test suite for this function.
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, CPU not recorded | 1,212 |
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.
Windows, 64-bit, CPU not recorded
1,212 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.
0. Any behavioural difference beyond the comparator is a defect in
one of them, which makes cross-testing the pair unusually productive.MIN's own documentation. On MINA the zero-conversion trap is at its worst: any text in an
all-positive column pulls the minimum to 0.0 when nothing matches —
the same convention, with the same all-positive-data hazard.SMALL(array, 1) is the
minimum over the same admitted set, but SMALL errors on an empty array instead of returning
zero. The MIN/SMALL pair is the cleanest illustration of two functions computing the same
thing with different empty-set conventions, and SMALL is the safer of the two when "no
data" must not be confused with "zero".AGGREGATE is the only route to a minimum that ignores error values.MIN and SMALL on ranges containing text (same scan policy, so they
should agree); and with the belief that an empty MIN is an error, which the documentation
contradicts.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents