{
  "category": "Text functions",
  "display_name": "LOWER",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.LOWER",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20527"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 6,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 6,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 6 in the answer bank and 5 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 11 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/text_functions.rs#L281-L281"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/text_functions::cased",
        "ported/text_kernels::text",
        "ported/text_kernels::text_from_str",
        "ported/text_kernels::push_singleton_or_original",
        "ported/text_kernels::push_lower",
        "ported/text_kernels::is_well_formed",
        "ported/text_kernels::lower"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/text_functions.rs#L281-L281",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 11 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.LOWER.json",
  "name": "LOWER",
  "notes": [
    {
      "basis": "6 recorded LOWER and 4 recorded PROPER readings, in a workbook at compatibility version 2.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ae13ca181bc1d5e3c9e266f26a856ba634707d8e",
          "locator": null,
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "6 recorded readings",
          "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "4 recorded readings",
          "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.LOWER",
        "FUNC.PROPER"
      ],
      "inferred": "The readings cover one Deseret letter and two combining marks. That every letter above U+FFFF and every mark behave the same is inferred.",
      "kind": "quirk",
      "note_id": "FN-LOWER-001",
      "open": [
        "Behaviour at compatibility version 1 has not been read for these inputs."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "𐐀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "𐐀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-001",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "a𐐀ς",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "A𐐀Σ",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-003",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ασ̀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ̀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-004",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ας.",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ.",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-005",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "PROPER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "A𐐀B",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "a𐐀b",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-proper-002",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "PROPER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "Aσ́",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "aΣ́",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-proper-004",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "LOWER did not change the Deseret capital U+10400, a cased letter above U+FFFF, either alone or inside other text: LOWER(\"A𐐀Σ\") is \"a𐐀ς\", where the Greek capital sigma at the end becomes the final form. Greek sigma depends on what follows: followed by a full stop it takes the final form ς, and followed by a combining mark, U+0300 or U+0301, it takes the medial form σ. PROPER treats a character above U+FFFF as a word boundary, so PROPER(\"a𐐀b\") is \"A𐐀B\", with the B capitalised and the Deseret letter unchanged.",
      "status": "measured",
      "title": "LOWER leaves letters above U+FFFF alone, and a combining mark stops the final sigma"
    }
  ],
  "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- **`UPPER`** is the other direction, and is *not* its inverse: `LOWER(UPPER(x))` is not always\n  `x`, and neither is `UPPER(LOWER(x))`, because case mapping loses information (`ß` and `SS`)\n  and gains context (final sigma).\n- **`PROPER`** capitalises the first letter of each word and lowercases the rest, and therefore\n  contains a copy of both mappings.\n- **`EXACT`** is the function to reach for when the question is whether two strings differ\n  *only* by case: `EXACT(a,b)` is case-sensitive, `a=b` is not. Writing `LOWER(a)=LOWER(b)` as\n  a case-insensitive comparison is a common idiom and a subtly different predicate, because it\n  also folds any character pair that shares a lowercase form.\n\n\n",
    "how-to-implement": "\n### Notes for implementers\n\n1. **Choose and record a case-mapping table version.** Unicode's case mappings change between\n   versions. An implementation that delegates to a platform's `to_lowercase` inherits whichever\n   version that platform shipped, which is not a stable target.\n2. **Decide the expansion policy explicitly.** If a mapping produces more than one character,\n   does the function emit the expansion or leave the character unchanged? The two policies are\n   visibly different on `İ` and on `ẞ`.\n3. **Final sigma needs a neighbour test.** Any implementation that maps character-by-character\n   without lookahead will get Greek text wrong at word ends.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nThe return kind is `Text`. Empty text returns empty text.\n\nArrays, empty cells and omitted arguments follow the shared call model\n([chapter 03](../model/03-call-pipeline.md)).\n\n\n\n### Errors\n\n\nThe article lists no error conditions, and the function has no domain to violate. The reachable\nerrors are the shared ones: an error value arriving as the argument propagates, and a value\nkind with no text conversion surfaces `#VALUE!` under the shared coercion rules\n([chapter 02](../model/02-coercion-and-lifting.md)).\n\n\n",
    "sources": "- Microsoft, \"LOWER function\" —\n  <https://support.microsoft.com/en-us/office/lower-function-3f21df02-a80c-44b2-afaf-81358f9fdeb4>\n  (the conversion statement; \"LOWER does not change characters in text that are not letters\";\n  the syntax and argument name). Retrieved for this page.\n- Handbook `content/model/02-coercion-and-lifting.md` (to-text conversion, error propagation).\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`LOWER` returns its argument with every uppercase letter replaced by its lowercase form.\nMicrosoft's article states both halves of that: it converts all uppercase letters in a text\nstring to lowercase, and it \"does not change characters in text that are not letters\" — digits,\nspaces and punctuation pass through untouched.\n\nThe interesting part of the definition is what \"its lowercase form\" means once the text leaves\nASCII. Case mapping in Unicode is not a per-character permutation:\n\n- Some characters lowercase to a *different number* of characters than they started with. `İ`\n  (U+0130, Latin capital I with dot above) has a canonical lowercasing of two code points, `i`\n  followed by a combining dot above.\n- Some lowercasings are **context-dependent**. Greek capital sigma `Σ` lowercases to final\n  sigma `ς` at the end of a word and to medial sigma `σ` elsewhere — the same input character,\n  two answers, chosen by what is next to it.\n- Some characters have no agreed lowercase at all, or acquired one late: capital sharp s `ẞ`\n  (U+1E9E) is the standard example.\n\nA worksheet function that must return one text value per input has to take a position on all\nthree. Microsoft's article takes none of them explicitly, so the exact mapping Excel applies is\ndocumented only by example, and the examples are ASCII.\n\n\n\n### Arguments\n\n\n`text` — required, described in the article as the text you want to convert to lowercase. It is\na text argument, so numbers and logicals convert to text first; `LOWER(TRUE)` is the\nlowercasing of the string `TRUE`, not a logical.\n\nThere is no locale argument. That absence is load-bearing: the Turkish dotted/dotless-i pair is\nthe canonical case in which correct lowercasing depends on the language of the text, and\n`LOWER` gives a formula no way to say which language it is in.\n\n\n"
  },
  "signature": {
    "display": "LOWER(text)",
    "parameters": [
      {
        "description": null,
        "name": "text",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 1,
        "min": 1
      },
      "category": "Text functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "None",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "TextToText",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Text in lower case",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Converts text to lowercase",
        "microsoft_url": "https://support.microsoft.com/en-us/office/lower-function-3f21df02-a80c-44b2-afaf-81358f9fdeb4"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "LOWER"
        },
        {
          "locale": "bg-BG",
          "name": "LOWER"
        },
        {
          "locale": "cs-CZ",
          "name": "LOWER"
        },
        {
          "locale": "da-DK",
          "name": "LOWER"
        },
        {
          "locale": "de-DE",
          "name": "LOWER"
        },
        {
          "locale": "el-GR",
          "name": "LOWER"
        },
        {
          "locale": "en-AU",
          "name": "LOWER"
        },
        {
          "locale": "en-GB",
          "name": "LOWER"
        },
        {
          "locale": "en-US",
          "name": "LOWER"
        },
        {
          "locale": "es-ES",
          "name": "LOWER"
        },
        {
          "locale": "et-EE",
          "name": "LOWER"
        },
        {
          "locale": "fi-FI",
          "name": "PIENET"
        },
        {
          "locale": "fr-FR",
          "name": "LOWER"
        },
        {
          "locale": "he-IL",
          "name": "LOWER"
        },
        {
          "locale": "hr-HR",
          "name": "LOWER"
        },
        {
          "locale": "hu-HU",
          "name": "LOWER"
        },
        {
          "locale": "id-ID",
          "name": "LOWER"
        },
        {
          "locale": "it-IT",
          "name": "LOWER"
        },
        {
          "locale": "ja-JP",
          "name": "LOWER"
        },
        {
          "locale": "ko-KR",
          "name": "LOWER"
        },
        {
          "locale": "lt-LT",
          "name": "LOWER"
        },
        {
          "locale": "lv-LV",
          "name": "LOWER"
        },
        {
          "locale": "nb-NO",
          "name": "LOWER"
        },
        {
          "locale": "nl-NL",
          "name": "LOWER"
        },
        {
          "locale": "pl-PL",
          "name": "LOWER"
        },
        {
          "locale": "pt-BR",
          "name": "LOWER"
        },
        {
          "locale": "pt-PT",
          "name": "LOWER"
        },
        {
          "locale": "ro-RO",
          "name": "LOWER"
        },
        {
          "locale": "ru-RU",
          "name": "LOWER"
        },
        {
          "locale": "sk-SK",
          "name": "LOWER"
        },
        {
          "locale": "sl-SI",
          "name": "LOWER"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "LOWER"
        },
        {
          "locale": "sv-SE",
          "name": "LOWER"
        },
        {
          "locale": "th-TH",
          "name": "LOWER"
        },
        {
          "locale": "tr-TR",
          "name": "KÜÇÜKHARF"
        },
        {
          "locale": "uk-UA",
          "name": "LOWER"
        },
        {
          "locale": "vi-VN",
          "name": "LOWER"
        },
        {
          "locale": "zh-CN",
          "name": "LOWER"
        },
        {
          "locale": "zh-HK",
          "name": "LOWER"
        },
        {
          "locale": "zh-TW",
          "name": "LOWER"
        }
      ],
      "signature": {
        "display": "LOWER(text)",
        "parameters": [
          {
            "description": null,
            "name": "text",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "LOWER",
      "version_marker": null,
      "xlcall": {
        "code": "112",
        "symbol": "xlfLower"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/lower-function-3f21df02-a80c-44b2-afaf-81358f9fdeb4"
  },
  "try_it": {
    "formula": "=LOWER(\"İ\")"
  },
  "url": "https://handbook.dnacalc.com/functions/LOWER.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "LOWER(A1) returned 𐐀. LOWER(A1) returned a𐐀ς. 2 further recorded controls are attached. Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0.20527.20088",
      "observations": [
        {
          "call": "LOWER(A1)",
          "excel": {
            "bits": null,
            "display": "𐐀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "𐐀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2"
        },
        {
          "call": "LOWER(A1)",
          "excel": {
            "bits": null,
            "display": "a𐐀ς",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "A𐐀Σ",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2"
        },
        {
          "call": "LOWER(A1)",
          "excel": {
            "bits": null,
            "display": "ασ̀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ̀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2"
        },
        {
          "call": "LOWER(A1)",
          "excel": {
            "bits": null,
            "display": "ας.",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ.",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2"
        }
      ],
      "platform": "Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-LOWER-001.json"
      ]
    }
  ]
}