Text functions

VALUE

Matches all 59 recorded answers

Recorded: 59 workbook cells. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicVALUE
BulgarianVALUE
CzechVALUE
DanishVALUE
GermanVALUE
GreekVALUE
English (Australia)VALUE
English (United Kingdom)VALUE
English (United States)VALUE
SpanishVALUE
EstonianVALUE
FinnishARVO
FrenchVALUE
HebrewVALUE
CroatianVALUE
HungarianVALUE
IndonesianVALUE
ItalianVALORE
JapaneseVALUE
KoreanVALUE
LithuanianVALUE
LatvianVALUE
NorwegianVALUE
DutchVALUE
PolishVALUE
Portuguese (Brazil)VALUE
Portuguese (Portugal)VALUE
RomanianVALUE
RussianVALUE
SlovakVALUE
SlovenianVALUE
Serbian (Latin)VALUE
SwedishVALUE
ThaiVALUE
TurkishSAYIYAÇEVİR
UkrainianVALUE
VietnameseVALUE
Chinese (Simplified)VALUE
Chinese (Hong Kong)VALUE
Chinese (Traditional)VALUE

Names from Microsoft's support site.

What it does

VALUE(text)

VALUE parses text into a number.

It is tempting to describe this as "the inverse of TEXT", and that is the right intuition, but the honest description is narrower and stranger: VALUE accepts the text forms that Excel itself would recognise as a number if you typed them into a cell, under the current locale, and returns the number they denote. That is not a fixed grammar. It is a grammar parameterised by the machine's regional settings.

The forms in play include, at minimum: plain decimals, scientific notation, digit-group separators, a currency symbol, a percent sign, and date and time text. Each of those brings a locale dependency:

  • the decimal separator is . in some locales and , in others, which means "1,5" is one and a half in one place and fifteen — or a rejection — in another;
  • the group separator is the mirror image of that problem, and a space in several locales;
  • the currency symbol is per-locale, and VALUE accepting "$1.00" says nothing about whether it accepts "€1,00"; in the recorded en-ZA settings "€1" is read and "$1" is not (FN-VALUE-003);
  • date text is the worst case, because "1/2/2024" denotes two different days in two locales and returns a serial number, not the digits you can see.

The Handbook's shared coercion chapter already draws this boundary: it pins the plain-number core and states that the locale-dependent surface — separators, currency, percent, date and time text — is an open area. See coercion and lifting. VALUE is the function where that open area is the entire subject matter.

Two structural facts finish the definition. A number arriving as the argument passes through unchanged. And a successful date-text parse returns the date's serial number — a plain Number, formatting-free — which is why VALUE("2024-01-02") shows as a large integer unless the cell is formatted as a date.

Arguments

VALUE(text)

ArgumentRequiredMeaning
textyesThe text to convert to a number.

One argument. The subtleties are all about what may occupy it:

  • Already-numeric input passes through. VALUE(5) is 5.
  • Logicals are the surprising rejection: upstream's contract records logical, blank, missing, and unsupported aggregate or reference payloads as #VALUE! in its admitted slice — so VALUE is stricter than the general to-number coercion, which maps TRUE to 1. That is a real difference between VALUE(TRUE) and SUM(TRUE), and it is upstream's recorded behaviour rather than a Handbook finding.
  • Leading and trailing whitespace is ignored by the general to-number rule; whether VALUE matches that exactly, and whether a whitespace-only string is rejected as upstream records, is worth confirming rather than assuming.
  • An empty referenced cell delivers Empty, which is a distinct outcome from an omitted argument; see the value universe.

Try it

Input cells (optional)

Example: {"B2": 3, "B3": 4}. A1 holds the formula. Other cells need values before a formula can read them.

Enter a formula, then calculate.

Runs locally in your browser with OneCalc. Its answer may differ from Excel. Use English function names and commas between arguments.

Quirks

Result and edge cases

The return kind is Number.

Edges that matter in practice:

  • Percent text divides. If "50%" is accepted, the result is 0.5, not 50. A pipeline that parses percentages with VALUE and then divides by 100 is wrong by a factor of 100 exactly when the parse succeeds.
  • Date and time text returns serials. Time text returns a fraction of a day. VALUE("12:00") is 0.5 if accepted.
  • Overflow is not infinity. The shared coercion rule states that text parsing must produce a finite number; text denoting an overflow is treated as non-numeric rather than as infinity.
  • Precision is the parser's, not the text's. VALUE of a 30-digit numeral returns the nearest double, silently. Round-tripping through TEXT and back is lossy in both directions and the losses do not cancel.
  • Arrays. Whether VALUE lifts over an array argument is not something this page asserts; the general rules are in coercion and lifting, and the specific answer for VALUE is listed as an open probe below.
  • Errors propagate.

Errors

Microsoft's page is the authority on the documented error conditions and is linked below; it was not retrievable while this entry was written, so this section states expectations rather than quoting it.

ErrorStatus
#VALUE! when the text is not in a recognised numeric or date/time formatexpected; this is the function's characteristic failure
#VALUE! for logical, blank, and unsupported argument kindsrecorded upstream for its admitted slice; not a Handbook claim, and notably stricter than general to-number coercion
any error value, propagated from the argumentfollows from the universal error-propagation rule

Note what is not here: there is no error for precision loss, and none for a value that parses but means something other than what the author intended. VALUE fails loudly or succeeds silently.

Text to number checks the exponent range even when the mantissa is zero

Converting text to a number, measured through ABS and VALUE, rejects a zero mantissa with an out-of-range exponent: ABS("0e-309") is #VALUE! though the text denotes 0, and ABS("0e-308") is 0. The exponent counts as written, less the fraction digits, less 2 for a percent sign, so ABS("0.0e309") is 0, ABS("0e309") is #VALUE!, and ABS("0e-307%") is #VALUE!.

Explanation (inferred): The exponent formula is inferred, though it fits every reading; that functions other than ABS and VALUE share this conversion is inferred.

FormulaExcelMathematical value
=ABS("0e-309")
Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2
Inputs and reference value

Typed formula.

The text denotes zero: a zero mantissa is 0 at any exponent.

#VALUE!0
0x0000000000000000
=ABS("0e-308")
Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2
Inputs and reference value

Typed formula.

0
0x0000000000000000
—
=ABS("0e-307%")
Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2
Inputs and reference value

Typed formula.

#VALUE!—
=ABS("0e309")
Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2
Inputs and reference value

Typed formula.

The text denotes zero: a zero mantissa is 0 at any exponent.

#VALUE!0
0x0000000000000000
=ABS("0.0e309")
Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2
Inputs and reference value

Typed formula.

0
0x0000000000000000
—
=VALUE("0e-307")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

0
0x0000000000000000
—
=VALUE("0e-307%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("0e309")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("0.0e309")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

0
0x0000000000000000
—
=VALUE("0e309%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

0
0x0000000000000000
—
=VALUE("0e311%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—

Inputs, build details and evidence

Text to number reads Arabic, Persian, Devanagari and Thai digits, but not fullwidth digits

In the recorded en-ZA settings, converting text to a number accepts Arabic-Indic (U+0660 to U+0669), extended Arabic-Indic (U+06F0 to U+06F9), Devanagari (U+0966 to U+096F) and Thai (U+0E50 to U+0E59) digits. They work alone, in runs, with a decimal point, in the exponent, with a sign or percent, and mixed with ASCII digits or with each other: VALUE("1٢3") is 123, and SQRT of a four-digit string using four scripts is the root of 1234. Fullwidth digits (U+FF10 to U+FF19) give #VALUE! alone or mixed. DATEVALUE reads the four accepted scripts in a date written year-month-day.

Explanation (inferred): That other text-to-number routes, such as arithmetic operators, treat digits the same way is inferred from VALUE and SQRT agreeing.

FormulaExcelMathematical value
=VALUE("١")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

1
0x3ff0000000000000
—
=VALUE("١٢٣")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

123
0x405ec00000000000
—
=VALUE("1٢3")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

123
0x405ec00000000000
—
=VALUE("١e2")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

100
0x4059000000000000
—
=VALUE("१")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

1
0x3ff0000000000000
—
=VALUE("๑")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

1
0x3ff0000000000000
—
=VALUE("1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("123")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=SQRT("۱٢३๔")
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Typed formula.

35.12833614050059
0x4041906d51932c26
—
=DATEVALUE("٢٠٢٤-٠١-٠٢")
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Typed formula.

45293
0x40e61da000000000
—

Inputs, build details and evidence

A date as text takes at most two digits for month and day

In a three-part numeric date, leading zeros are not free. VALUE("2024/02/01") is 45323, but VALUE("2024/02/001") and VALUE("2024/002/01") are #VALUE!, and so is any month or day of three or more digits in the 45 forms read. A year of one, two or four digits is read: "1/2/1" and "1/02/01" are 2001-02-01, "24/2/1" is 2024-02-01, while "0001/2/1" is #VALUE!. Month 0 and day 0 give #VALUE!. The same limit holds with hyphens: "2024-02-001" through VALUE, and "2024-002-01" and "2024-02-001" through DATEVALUE, are #VALUE!. The settings of this run are en-ZA: decimal point, space as thousands separator, year-month-day date order.

FormulaExcelMathematical value
=VALUE("2024/02/01")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

45323
0x40e6216000000000
—
=VALUE("2024/02/001")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("2024/002/01")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("1/2/1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

36923
0x40e2076000000000
—
=VALUE("24/2/1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

45323
0x40e6216000000000
—
=VALUE("0001/2/1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("2024/02/0")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("2024-02-001")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=DATEVALUE("2024-002-01")
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Typed formula.

#VALUE!—

Inputs, build details and evidence

VALUE takes one percent sign anywhere around parentheses, and a euro sign but not a dollar

VALUE reads parentheses as a negative sign and one percent sign in any of these places: "(1)%", "(1) %", "(1%)", "(%1)" and "%(1)" are all -0.01. A second percent sign, as in "(1%)%", "%(1)%" and "(1)%%", gives #VALUE!, as does trailing text. The euro sign is read as a currency sign in the recorded en-ZA settings: "€1", "1€", "€ 1", "€-1", "-€1", "(€1)" and "€(1)" are 1 or -1. "$1" and "£1" are #VALUE! there. Currency and percent do not combine: "€1%", "(€1)%" and "(R1)%" are #VALUE!.

FormulaExcelMathematical value
=VALUE("(1)%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

-0.01
0xbf847ae147ae147b
—
=VALUE("(%1)")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

-0.01
0xbf847ae147ae147b
—
=VALUE("%(1)")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

-0.01
0xbf847ae147ae147b
—
=VALUE("(1%)%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("€1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

1
0x3ff0000000000000
—
=VALUE("1€")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

1
0x3ff0000000000000
—
=VALUE("€(1)")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

-1
0xbff0000000000000
—
=VALUE("€1%")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("$1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—
=VALUE("£1")
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

#VALUE!—

Inputs, build details and evidence

How to implement

Notes for implementers

  • Make the locale an explicit input, not ambient state. Upstream's design — a locale-profile seam queried from the host, with the parser written against the profile — is the right shape. A parser that reads the process locale at call time is untestable and irreproducible.
  • Do not use the host language's number parser. strtod, double.Parse, and f64::from_str each accept things Excel does not (hex floats, inf, nan, underscores in some languages) and reject things Excel does (currency symbols, percent, grouped digits). Every one of those mismatches is a silent divergence.
  • Reject non-finite parses. The shared rule is explicit: text that parses to an overflow is non-numeric, not infinite.
  • Keep the date lane separate from the number lane, and be prepared for the two to disagree about the same string — "1.5" as a number and as a date are both plausible readings, and the precedence between them is a real decision that must be recorded.
  • Percent must compose with grouping rather than being a separate grammar, but it does not combine with currency: "€1%" is #VALUE! in the recorded en-ZA settings (FN-VALUE-003). It also counts toward the exponent range check: "0e-307" is 0 but "0e-307%" is #VALUE! (FN-ABS-001).
  • Round once. Parse to the exact decimal value and round to the nearest double a single time; parsing digit-by-digit with accumulating multiplication introduces error that no test of small numerals will catch. Excel also checks the exponent range when the mantissa is zero, so "0e309" is #VALUE! (FN-ABS-001).

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.

VALUE · 1 lines · calc-func/src/catalogue/text_format.rs on GitHub
1 value_fn "VALUE" (1, 1) [V "text"] |s, a, sv| { value(s, a) }

Kernels shared with other functions

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.

Excel 16.0.20527.20088

Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA

=VALUE("0e-307") returned 0 (0x0000000000000000). =VALUE("0e-307%") returned #VALUE!. 30 further recorded controls are attached. Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • =VALUE("0e-307") → 0
    0x0000000000000000 (formula-literal)
  • =VALUE("0e-307%") → #VALUE! (formula-literal)
  • =VALUE("0e309") → #VALUE! (formula-literal)
  • =VALUE("0.0e309") → 0
    0x0000000000000000 (formula-literal)
  • =VALUE("0e309%") → 0
    0x0000000000000000 (formula-literal)
  • =VALUE("0e311%") → #VALUE! (formula-literal)
  • =VALUE("١") → 1
    0x3ff0000000000000 (formula-literal)
  • =VALUE("١٢٣") → 123
    0x405ec00000000000 (formula-literal)
  • =VALUE("1٢3") → 123
    0x405ec00000000000 (formula-literal)
  • =VALUE("١e2") → 100
    0x4059000000000000 (formula-literal)
  • =VALUE("१") → 1
    0x3ff0000000000000 (formula-literal)
  • =VALUE("๑") → 1
    0x3ff0000000000000 (formula-literal)
  • =VALUE("1") → #VALUE! (formula-literal)
  • =VALUE("123") → #VALUE! (formula-literal)
  • =VALUE("2024/02/01") → 45323
    0x40e6216000000000 (formula-literal)
  • =VALUE("2024/02/001") → #VALUE! (formula-literal)
  • =VALUE("2024/002/01") → #VALUE! (formula-literal)
  • =VALUE("1/2/1") → 36923
    0x40e2076000000000 (formula-literal)
  • =VALUE("24/2/1") → 45323
    0x40e6216000000000 (formula-literal)
  • =VALUE("0001/2/1") → #VALUE! (formula-literal)
  • =VALUE("2024/02/0") → #VALUE! (formula-literal)
  • =VALUE("2024-02-001") → #VALUE! (formula-literal)
  • =VALUE("(1)%") → -0.01
    0xbf847ae147ae147b (formula-literal)
  • =VALUE("(%1)") → -0.01
    0xbf847ae147ae147b (formula-literal)
  • =VALUE("%(1)") → -0.01
    0xbf847ae147ae147b (formula-literal)
  • =VALUE("(1%)%") → #VALUE! (formula-literal)
  • =VALUE("€1") → 1
    0x3ff0000000000000 (formula-literal)
  • =VALUE("1€") → 1
    0x3ff0000000000000 (formula-literal)
  • =VALUE("€(1)") → -1
    0xbff0000000000000 (formula-literal)
  • =VALUE("€1%") → #VALUE! (formula-literal)
  • =VALUE("$1") → #VALUE! (formula-literal)
  • =VALUE("£1") → #VALUE! (formula-literal)

Alternatives

Relationships

  • TEXT — the opposite direction, and the function VALUE is usually paired with. TEXT is equally locale-dependent, in the format-string argument as well as the output, which means a VALUE(TEXT(x, fmt)) round trip is doubly exposed to locale.
  • NUMBERVALUE — the function you probably want. It takes explicit decimal and group separator arguments, which removes the ambient-locale dependency that makes VALUE non-portable. NUMBERVALUE does not supersede VALUE in Microsoft's catalogue and both remain current, but for any workbook that travels between machines, NUMBERVALUE is the safer instrument. Upstream notes that NUMBERVALUE's own locale-default lanes are separately blocked and unresolved, so it is not a free lunch either.
  • -- (double unary minus) and +0 are the idiomatic shorthands for text-to-number coercion. They go through the general to-number rule described in coercion and lifting, not through VALUE's parser, so they are not interchangeable with VALUE — most visibly for logicals.
  • DATEVALUE and TIMEVALUE — the specialised parsers for the date and time lanes that VALUE also happens to cover. When you know you have a date, they say so in the formula and are easier to reason about.
  • VALUETOTEXT is not the inverse of VALUE despite the name symmetry; see VALUETOTEXT, which renders any value as text for display or for formula-bar round-tripping.
  • ISNUMBER(VALUE(x)) is the common "does this parse" test, and it inherits every locale question on this page.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents