Excel 16.0 build 20430
Windows, 64-bit, CPU not recorded
1,210 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.
Logical functions
Matches all 1,264 recorded answers
Recorded: 1,210 in the answer bank and 54 workbook cells. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | AND |
| Bulgarian | AND |
| Czech | AND |
| Danish | AND |
| German | UND |
| Greek | AND |
| English (Australia) | AND |
| English (United Kingdom) | AND |
| English (United States) | AND |
| Spanish | Y |
| Estonian | AND |
| Finnish | AND |
| French | ET |
| Hebrew | AND |
| Croatian | AND |
| Hungarian | AND |
| Indonesian | AND |
| Italian | AND |
| Japanese | AND |
| Korean | AND |
| Lithuanian | AND |
| Latvian | AND |
| Norwegian | AND |
| Dutch | AND |
| Polish | AND |
| Portuguese (Brazil) | AND |
| Portuguese (Portugal) | E |
| Romanian | AND |
| Russian | AND |
| Slovak | AND |
| Slovenian | AND |
| Serbian (Latin) | AND |
| Swedish | OCH |
| Thai | AND |
| Turkish | VE |
| Ukrainian | AND |
| Vietnamese | AND |
| Chinese (Simplified) | AND |
| Chinese (Hong Kong) | AND |
| Chinese (Traditional) | AND |
Names from Microsoft's support site.
AND(logical1, [logical2], ...)
AND is not a two-operand boolean connective. It is a variadic reduction over a truth scan,
and that difference is the whole content of the function.
The scan walks the argument list left to right. Each argument is expanded: a direct scalar contributes itself; a reference or array contributes every cell it designates, in row-major order. Each expanded item is then classified into exactly one of three buckets:
| Item | Classification |
|---|---|
Logical | its own truth value |
Number | false if the number is exactly 0, true otherwise |
| Text or empty inside an array or reference argument | skipped — contributes nothing |
Error | the scan stops and that error is the result |
The result is then:
#VALUE! if no item classified at all — every item was skipped.Rule 3 is the clause readers forget. AND over a range holding nothing but text is not vacuously
TRUE; it is an error. Microsoft's documentation states this directly for the range case: when the
specified range contains no logical values, AND returns #VALUE!. In logical terms AND is
therefore not the fold of conjunction over an empty list — it refuses the empty case rather than
returning the identity element.
AND(logical1, [logical2], ...)
The commonly misunderstood position is all of them at once: readers expect AND to coerce
whatever it is handed, and it does not. Numbers and logicals participate; text and blanks reached
through a range do not. See the shared rule in
Coercion and lifting — direct arguments and range-scanned
cells are governed by different policies, and AND is one of the families that exercises the
difference.
Returns a Logical, or an Error.
#VALUE!, per rule 3 above.Option<bool> — true, false,
or skip — is what makes rule 3 expressible. A two-valued model cannot distinguish "no truth
values present" from "all present values were true".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.
AND · 1 lines · calc-func/src/catalogue/logical.rs on GitHublogicals(AND, "AND", 255, and)
and · 9 lines · calc-func/src/catalogue/logical.rs on GitHub/// AND: TRUE when every logical read is TRUE, FALSE when one is FALSE.
fn and(
arguments: &[CalcValue],
services: &mut EvalServices<'_>,
) -> Result<CalcValue, FunctionFault> {
decide(AND, arguments, services, |tally| {
tally.trues == tally.logicals
})
}
reader catalogue/aggregateread_reference catalogue/aggregatelogicals catalogue/logicaldecide catalogue/logicaltally catalogue/logicaldirect catalogue/logicalheld catalogue/logicalnot_callable catalogue/logicaloperand coercespelled_logical 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,210 |
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,210 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.
OR is the dual: same scan, same skip rules, same empty-scan #VALUE!, returning TRUE on the
first truthy item instead of FALSE on the first falsy one.XOR uses the same scan and returns the parity of the truthy items rather than their
conjunction, which makes it a genuinely different reduction and not "OR without the ties".NOT is the unary complement, and is not a reducer: it takes exactly one argument.IF is where AND results usually land. IF(AND(a,b), x, y) is the idiom; note that AND
evaluates every argument, so it does not give you short-circuit evaluation of side effects — it
gives you a short-circuited scan over already-evaluated values.AND with the * idiom ((a>1)*(b>2)), which multiplies coerced logicals and
therefore has completely different empty/text behaviour and returns a number.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents