{
  "category": "Information functions",
  "display_name": "ISOMITTED",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.ISOMITTED",
  "implementation_state": {
    "answer_bank": null,
    "detail": "Recorded: 5 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 5 recorded answers",
    "workbook_corpus": {
      "cells": 5,
      "matched": 5
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/offset.rs#L53-L61",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/offset.rs#L286-L294"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/offset.rs#L53-L61",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 5 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.ISOMITTED.json",
  "name": "ISOMITTED",
  "notes": [],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **`LAMBDA`** is the function `ISOMITTED` exists to serve; outside it, the function has no\n  subject.\n- **`ISBLANK`** is the near neighbour and the standard confusion. `ISBLANK` tests `Empty` — a\n  cell with no content. `ISOMITTED` tests `Missing` — a call-site slot with nothing in it. Two\n  kinds, two functions, and the model deliberately refuses to conflate them\n  ([the value universe](../model/01-value-universe.md), \"Missing versus Empty\").\n- **`MAP`, `REDUCE`, `SCAN`, `BYROW`, `BYCOL`, `MAKEARRAY`** share `ISOMITTED`'s implementation\n  module and its callable-helper classification. They consume `LAMBDA` values; `ISOMITTED`\n  inspects a `LAMBDA`'s own binding.\n- **`IF`** is the invariable companion: `IF(ISOMITTED(y), <default>, y)` is the idiom, and it is\n  worth noting that `IF` is a lazy branch selector\n  ([the call pipeline](../model/03-call-pipeline.md)), so the default expression is not evaluated\n  when the parameter was supplied.\n- **`LET`** often appears alongside, to name the defaulted value once:\n  `LET(yy, IF(ISOMITTED(y), 10, y), …)`.\n- **Optional arguments in built-in functions** are the analogue this function brings to\n  user-defined ones: every built-in with an `[optional]` slot performs internally the test that\n  `ISOMITTED` exposes.\n\n\n",
    "how-to-implement": "\n### Notes for implementers\n\n\n1. **`Missing` must survive argument binding.** If a `LAMBDA` invocation normalizes empty slots\n   to `Empty` or to `0` before binding parameters, `ISOMITTED` can never return `TRUE`, and the\n   failure is silent — every call just takes the non-default branch.\n2. **`ISOMITTED` must not have its argument evaluated to a value first.** It needs the binding,\n   not the binding's value. This is a lazier argument treatment than any ordinary function's.\n3. **`Missing` is admitted at exactly one boundary.** It must never be storable in a cell,\n   returnable from a function, or publishable as a result. An engine that lets `Missing` leak is\n   creating a value Excel cannot represent.\n4. **Decide the nesting behaviour deliberately.** Whether a forwarded parameter carries its\n   `Missing` marker into an inner `LAMBDA` determines whether optional parameters compose, and it\n   is not documented either way.\n5. **The battery cannot reach the `TRUE` case.** Mechanical probing with ordinary values only\n   ever exercises `FALSE`. Any test corpus for this function must be constructed by hand, inside\n   `LAMBDA` invocations.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns a `Logical`.\n\n- **`Missing` is not `Empty`.** This is the distinction the whole function rests on. A parameter\n  bound to a reference to a *blank cell* received something — the `Empty` kind — and is not\n  omitted. `ISOMITTED` should be `FALSE` there and `ISBLANK` `TRUE`. The two functions cover the\n  two different nothings, and the model keeps them separate precisely so that they can.\n- **A parameter bound to `0` or `\"\"` is not omitted.** The whole point.\n- **Errors do not propagate.** `ISOMITTED(#N/A)` classifies rather than forwards, in the same way\n  the IS-family predicates do — an error argument was supplied, so the answer is `FALSE`.\n- **Trailing omission versus interior omission.** `(1,)` leaves a slot empty at the end;\n  `(,2)` leaves one at the start. Both are omissions in the formula-text sense. Whether both\n  deliver `Missing` is not established here.\n- **Nested `LAMBDA`s.** A parameter forwarded from one `LAMBDA` to another — does the `Missing`\n  marker survive the hop, so that the inner `ISOMITTED` sees it? Not established here, and this\n  is the question that determines whether optional parameters compose.\n\n\n\n### Errors\n\n\n`ISOMITTED` returns no error of its own for any argument it can be given.\n\nMicrosoft's page documents no error return.\n\n\n",
    "sources": "- Microsoft, \"ISOMITTED function\" —\n  <https://support.microsoft.com/en-us/office/isomitted-function-831d6fbc-0f07-40c4-9c5b-9c73fd1d60c1>.\n  Read for this page: the description, the syntax, the argument description, the worked `LAMBDA`\n  example verbatim, and the stated availability (Excel for Microsoft 365, Excel 2024, and the\n  Mac equivalents).\n- Handbook, [coercion and lifting](../model/02-coercion-and-lifting.md) — omitted optional\n  arguments delivering the `Missing` marker, and `SUM(1,,2)` as the documented example.\n\n\n",
    "version-differences": "No comparison between specific Excel builds is recorded here yet. This does not establish that all builds behave alike.",
    "what-it-does": "\n`ISOMITTED(argument)` returns `TRUE` if the argument slot it was handed was left empty at the\ncall site, and `FALSE` otherwise.\n\nMicrosoft's description: \"Checks whether the value in a LAMBDA is missing and returns TRUE or\nFALSE.\" The argument is \"The value you want to test, such as a LAMBDA parameter.\"\n\nThis is the only worksheet function whose subject is the value kind **`Missing`** — the marker\nthat, in Excel's value universe, exists at exactly one boundary and nowhere else. From\n[the value universe](../model/01-value-universe.md): `Missing` is \"the marker for an argument\nthat was omitted at a call site\"; it is never stored in a cell, never returned by a function,\nnever published by a formula. It is admitted at the call-argument boundary only.\n\n`ISOMITTED` is how that marker becomes visible. Without it, `Missing` is a kind that exists in\nthe engine and can never be observed from the sheet.\n\nThe mechanism `LAMBDA` supplies is the second half of the story. `LAMBDA` lets a user define a\nfunction with parameters; a caller may leave a parameter slot empty (`(1,)`); the empty slot\ndelivers `Missing` to the body; `ISOMITTED` reads it. Microsoft's own example:\n\n```\n=LAMBDA(x,y, IF(ISOMITTED(y),\"Missing second argument\",x+y))(1,)\n```\n\nThat is the whole design pattern — **optional parameters with defaults in user-defined\nfunctions**, which is what `ISOMITTED` exists to make possible. Before it, a `LAMBDA` could not\ndistinguish \"you gave me nothing\" from \"you gave me zero\".\n\n\n### Arguments\n\n\n`argument` — required, exactly one. The published signature is `ISOMITTED(value)`.\n\n- **The intended use is a bare `LAMBDA` parameter name.** `ISOMITTED(y)` inside the body of a\n  `LAMBDA(x,y,…)`.\n- **An expression is not a slot.** `ISOMITTED(y+0)` cannot be `TRUE` — the addition produced a\n  value, and a value is not missing. Wrapping the parameter in anything destroys the thing being\n  tested.\n- **Outside a `LAMBDA` there is nothing to be missing.** `=ISOMITTED(A1)` on a worksheet is\n  asking about a cell reference, which was supplied. The documented subject of this function is a\n  `LAMBDA` parameter; using it anywhere else is not what it is for, and the Handbook has not\n  established what it does there.\n\n\n"
  },
  "signature": {
    "display": "ISOMITTED(argument)",
    "parameters": [
      {
        "description": null,
        "name": "argument",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 1,
        "min": 1
      },
      "category": "Information functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "TRUE when a LAMBDA parameter was left out of the call",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Checks whether the value in a LAMBDA is missing and returns TRUE or FALSE",
        "microsoft_url": "https://support.microsoft.com/en-us/office/isomitted-function-831d6fbc-0f07-40c4-9c5b-9c73fd1d60c1"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "ISOMITTED"
        },
        {
          "locale": "bg-BG",
          "name": "ISOMITTED"
        },
        {
          "locale": "cs-CZ",
          "name": "ISOMITTED"
        },
        {
          "locale": "da-DK",
          "name": "ISOMITTED"
        },
        {
          "locale": "de-DE",
          "name": "ISOMITTED"
        },
        {
          "locale": "el-GR",
          "name": "ISOMITTED"
        },
        {
          "locale": "en-AU",
          "name": "ISOMITTED"
        },
        {
          "locale": "en-GB",
          "name": "ISOMITTED"
        },
        {
          "locale": "en-US",
          "name": "ISOMITTED"
        },
        {
          "locale": "es-ES",
          "name": "ISOMITTED"
        },
        {
          "locale": "et-EE",
          "name": "ISOMITTED"
        },
        {
          "locale": "fi-FI",
          "name": "ISOMITTED"
        },
        {
          "locale": "fr-FR",
          "name": "ISOMITTED*"
        },
        {
          "locale": "he-IL",
          "name": "ISOMITTED"
        },
        {
          "locale": "hr-HR",
          "name": "ISOMITTED"
        },
        {
          "locale": "hu-HU",
          "name": "ISOMITTED"
        },
        {
          "locale": "id-ID",
          "name": "ISOMITTED"
        },
        {
          "locale": "it-IT",
          "name": "ISOMITTED"
        },
        {
          "locale": "ja-JP",
          "name": "ISOMITTED"
        },
        {
          "locale": "ko-KR",
          "name": "ISOMITTED"
        },
        {
          "locale": "lt-LT",
          "name": "ISOMITTED"
        },
        {
          "locale": "lv-LV",
          "name": "ISOMITTED"
        },
        {
          "locale": "nb-NO",
          "name": "ISOMITTED"
        },
        {
          "locale": "nl-NL",
          "name": "ISOMITTED"
        },
        {
          "locale": "pl-PL",
          "name": "ISOMITTED"
        },
        {
          "locale": "pt-BR",
          "name": "ISOMITTED"
        },
        {
          "locale": "pt-PT",
          "name": "ISOMITTED"
        },
        {
          "locale": "ro-RO",
          "name": "ISOMITTED"
        },
        {
          "locale": "ru-RU",
          "name": "ПРОПУЩЕНО"
        },
        {
          "locale": "sk-SK",
          "name": "ISOMITTED"
        },
        {
          "locale": "sl-SI",
          "name": "ISOMITTED"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "ISOMITTED"
        },
        {
          "locale": "sv-SE",
          "name": "ÄRUTELÄMNAT"
        },
        {
          "locale": "th-TH",
          "name": "ISOMITTED"
        },
        {
          "locale": "tr-TR",
          "name": "ATLANMIŞ"
        },
        {
          "locale": "uk-UA",
          "name": "ISOMITTED"
        },
        {
          "locale": "vi-VN",
          "name": "ISOMITTED"
        },
        {
          "locale": "zh-CN",
          "name": "ISOMITTED"
        },
        {
          "locale": "zh-HK",
          "name": "ISOMITTED"
        },
        {
          "locale": "zh-TW",
          "name": "ISOMITTED"
        }
      ],
      "signature": {
        "display": "ISOMITTED(argument)",
        "parameters": [
          {
            "description": null,
            "name": "argument",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "ISOMITTED",
      "version_marker": null,
      "xlcall": null
    },
    "microsoft": "https://support.microsoft.com/en-us/office/isomitted-function-831d6fbc-0f07-40c4-9c5b-9c73fd1d60c1"
  },
  "try_it": {
    "formula": "=ISOMITTED(1)"
  },
  "url": "https://handbook.dnacalc.com/functions/ISOMITTED.html",
  "variants": [],
  "versions": []
}