Available in:All versions (Works in Excel 2007, every later version, Microsoft 365 and Excel for the web)Examples need Excel 2021 or laterCategory:Information

ISNUMBER

ISGETAL in Dutch Excel

Answers TRUE when a value is a real number and FALSE for text, errors, logical values and empty cells.

Difficulty rating 2 of 5. It takes one argument, but you need to know what Excel counts as a number (text that looks like a number does not, a date does) and how it pairs with SEARCH.

Last updated: 13 October 2026

See the worked examples

Sheet excerpt: D2 holds the formula
RowABCD
1Asset no.DescriptionAcquisition valueNumber?
2VA-011Delivery van28450FALSEFALSE=ISNUMBER(C2)=ISNUMBER(C2)
3VA-012Welding machine39803980
4VA-013Scaffolding set1260012600
5VA-014Cable tracer1875
6VA-015Workshop shelving64206420
Formula cell (D2)InputNote: C2 and C5 hold text made of digits (left-aligned, with a green triangle); C3, C4 and C6 hold real numbers. =SUM(C2:C6) returns 23000.

Result: FALSE

=ISNUMBER(C2)
=ISNUMBER(C2)

What ISNUMBER does and when to use it

What it does: it checks whether a cell holds a real number and returns TRUE or FALSE, for example to spot amounts in an import that arrived as text.

When to use it: to find numbers stored as text, which SUM skips silently, and to turn SEARCH into a yes-or-no test: ISNUMBER(SEARCH("word", A2)). To count numbers, COUNT is shorter.

How Excel evaluates it

Excel evaluates the argument first. If it is a cell, Excel takes the stored value; if it is a formula, Excel calculates it and uses the result. It then checks the type. A number gives TRUE. Text, a logical value, an empty cell and an error value give FALSE.

ISNUMBER itself never returns an error: where most functions pass an error on, ISNUMBER takes it as input and returns FALSE. This is why ISNUMBER(SEARCH(...)) works, as SEARCH returns #VALUE! when it finds nothing. ISNUMBER does not depend on the regional setting.

Watch out: SEARCH returns an error instead of 0 when nothing is found, and that error passes straight through a comparison such as SEARCH(...) > 0.

Mental model

ISNUMBER is a label check on a box, not a look inside: a box marked text stays text, even if the digits inside would make a fine number.

Terms used on this page: error value, argument, cell

ISNUMBER(value)
ISNUMBER(value)
Arguments
ArgumentTypeMeaning
valueRequiredThe value or cell to test.

Return value:TRUE or FALSE, depending on whether the value is a number

Formulas use commas (,) between arguments, as in English Excel. Formulas use semicolons (;) between arguments, as in Dutch Excel. Formulas use commas (,) between arguments, as in English Excel; Dutch Excel uses semicolons (;).

Worked examples

Beginner

Check which fixed-asset values are real numbers

Veldhuis Installatie BV hands you its fixed-asset register (vaste activa) as an export. Before you recompute the depreciation you want to know which acquisition values are real numbers, because a value stored as text drops out of every total without any warning. You test the first row and copy the formula down.

Sheet excerpt: D2 holds the formula
RowABCDE
1Asset no.DescriptionAcquisition valueNumber?
2VA-011Delivery van28450FALSEFALSE=ISNUMBER(C2)=ISNUMBER(C2)
3VA-012Welding machine39803980
4VA-013Scaffolding set1260012600
5VA-014Cable tracer1875
6VA-015Workshop shelving64206420
7
Formula cell (D2)InputNote: C2 and C5 hold text made of digits (left-aligned, with a green triangle); C3, C4 and C6 hold real numbers. =SUM(C2:C6) returns 23000.

Formula in D2

=ISNUMBER(C2)
=ISNUMBER(C2)

Result: FALSE

Step by step
  1. Excel looks at C2 and finds 28450. The cell holds the characters 2, 8, 4, 5 and 0 as text: it is left-aligned and has a green triangle.
  2. ISNUMBER tests the type of the value, not how it looks. Text is not a number, however many digits it contains.
  3. D2 shows FALSE.
  4. Copy D2 down to D6:

    • C3 holds the number 3980, so D3 is TRUE
    • D4 (12600) is TRUE
    • C5 holds the text 1875, so D5 is FALSE
    • D6 (6420) is TRUE
  5. Compare the totals. =SUM(C2:C6) adds only the real numbers: 3980 + 12600 + 6420 = 23000. The register actually holds 28450 + 3980 + 12600 + 1875 + 6420 = 53325, so 30325 sits in the two cells that show FALSE, and SUM gives no error about it.
  6. Retype C2 as a number and D2 turns TRUE: the formula reads the cell as it is now, not as it was.

Watch out: A real date is a number, so ISNUMBER returns TRUE for it. The function cannot tell an amount from a date or a time; check the column header and the number format as well.

More on this example: why it works, 1 more pitfall, 2 variations

Why it works

Every Excel value has a type: number, text, logical value or error. ISNUMBER answers one question about that type, so a FALSE next to a value that looks numeric is a finding about the data, not about the formula.

SUM and most other totals skip text in a range, which is why the type check has to happen before you trust a total.

More to watch out for

  • An empty cell also returns FALSE. If the register has blank rows, a FALSE does not always mean text.

Variations

=NOT(ISNUMBER(C2))
=NOT(ISNUMBER(C2))

Reverses the answer so that TRUE marks the problem rows (D2 and D5), handy when you filter on the flag.

=ISTEXT(C2)
=ISTEXT(C2)

Asks the opposite question and returns FALSE for blanks, so use it when empty cells must not be flagged.

Intermediate

Flag reversal postings by a keyword in the description

You are reviewing a month of journal lines from Veldhuis Installatie BV and want every line whose description mentions a reversal.

The keyword sits in F1 so you can swap it for another word later. Capitalization differs between lines, and one line has a word that looks like the keyword but is not.

Sheet excerpt: D2 holds the formula
RowABCDEFG
1Entry no.DescriptionAmountReversal?Keywordreversal
225-0701REVERSAL booking 25-0688-€420.00€ -420,00TRUETRUE=ISNUMBER(SEARCH($F$1, B2))=ISNUMBER(SEARCH($F$1; B2))
325-0702Purchase copper piping€840.00€ 840,00
425-0703Reversal of invoice 25-1204-€1,250.00€ -1.250,00
525-0704Reversing warranty accrual-€310.00€ -310,00
625-0705Travel costs fitter€95.00€ 95,00
725-0706VAT correction, reversal last month-€64.00€ -64,00
8
Formula cell (D2)Input

Formula in D2

=ISNUMBER(SEARCH($F$1, B2))
=ISNUMBER(SEARCH($F$1; B2))

Result: TRUE

Step by step
  1. Excel reads the keyword from F1: reversal. The dollar signs keep that reference fixed when you copy the formula down.
  2. SEARCH looks for reversal in B2, REVERSAL booking 25-0688. It ignores capitalization, so it finds the word at position 1 and returns the number 1.
  3. ISNUMBER receives 1, which is a number, and returns TRUE. D2 shows TRUE.
  4. Copy D2 down. In B3 (Purchase copper piping) SEARCH finds nothing and returns #VALUE!. ISNUMBER takes that error as its input and answers FALSE instead of passing the error on. D3 is FALSE.
  5. The other rows:

    • D4 gives TRUE (position 1)
    • D5 gives FALSE: Reversing warranty accrual contains reversi but not reversal, the seventh letter differs
    • D6 gives FALSE
    • D7 gives TRUE, with the keyword at position 17
  6. Three lines are flagged, the entries 25-0701, 25-0703 and 25-0706, together -420 + -1250 + -64 = -1734. Type another word in F1 and all six answers recalculate.

Watch out: If F1 is empty, SEARCH returns 1 for every line (an empty text is found at the start of any text) and every row turns TRUE. Guard with a check on F1 when the keyword comes from a cell that someone may clear.

More on this example: why it works, 2 more pitfalls, 2 variations

Why it works

SEARCH answers where a word is, and answers with an error when it is not there. ISNUMBER turns both outcomes into TRUE or FALSE: a position is a number, an error is not.

The pair is a yes-or-no test for whether text contains a word, which is what a comparison like SEARCH(...) > 0 cannot do, because the error would pass straight through that comparison.

More to watch out for

  • SEARCH reads ? and * in the keyword as wildcards. A keyword such as 25-06* matches every description that contains 25-06 followed by anything, for example the reference in the first line. Put ~ in front to search for the character itself.
  • A part of a longer word matches too: reversal would also match reversals. Review the flagged lines before you count them.

Variations

=IF(ISNUMBER(SEARCH($F$1, B2)), "Review", "")
=IF(ISNUMBER(SEARCH($F$1; B2)); "Review"; "")

Shows a word in the flagged rows and leaves the others empty, which reads better in a printed schedule than a column of TRUE and FALSE.

=ISNUMBER(FIND($F$1, B2))
=ISNUMBER(FIND($F$1; B2))

FIND is case-sensitive and has no wildcards, so REVERSAL booking would not match here. Choose it when the capitalization carries meaning.

Advanced

Total the postings that mention cash or coins

In the bank and cash journal of Veldhuis Installatie BV you want the total amount of lines whose description points to cash handling.

Two keywords count, in F1 and F2, and a line may contain either one or both. You need one cell with the total to compare with the cash account.

Sheet excerpt: F4 holds the formula
RowABCDEFG
1Entry no.DescriptionAmountKeyword 1cash
225-0801Cash withdrawal for small purchases€450.00€ 450,00Keyword 2coin
325-0802Payroll payment week 11€3,200.00€ 3.200,00
425-0803Parking paid in coins€38.50€ 38,50Total€ 1,823.50€1.823,50=SUMPRODUCT(((ISNUMBER(SEARCH($F$1, B2:B8)) + ISNUMBER(SEARCH($F$2, B2:B8))) > 0) * C2:C8)=SUMPRODUCT(((ISNUMBER(SEARCH($F$1; B2:B8)) + ISNUMBER(SEARCH($F$2; B2:B8))) > 0) * C2:C8)
525-0804Cash and coin deposit to bank€1,120.00€ 1.120,00
625-0805Insurance transfer€640.00€ 640,00
725-0806Coin refund received€215.00€ 215,00
825-0807Card payment fuel€87.25€ 87,25
9
Formula cell (F4)Input

Formula in F4

=SUMPRODUCT(((ISNUMBER(SEARCH($F$1, B2:B8)) + ISNUMBER(SEARCH($F$2, B2:B8))) > 0) * C2:C8)
=SUMPRODUCT(((ISNUMBER(SEARCH($F$1; B2:B8)) + ISNUMBER(SEARCH($F$2; B2:B8))) > 0) * C2:C8)

Result: € 1,823.50€1.823,50

Step by step
  1. Excel evaluates the inner functions first. SEARCH($F$1, B2:B8) looks for cash in all seven descriptions at once and returns seven results: a position for B2 (1) and B5 (1), and #VALUE! for the other five.
  2. ISNUMBER turns those seven results into {TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; FALSE}. The errors become FALSE, so nothing blocks the calculation.
  3. The same steps with $F$2 (coin) give {FALSE; FALSE; TRUE; TRUE; FALSE; TRUE; FALSE}: B4, B5 and B7 contain the keyword. B5 is the line that contains both words.
  4. Adding the two arrays turns TRUE into 1 and FALSE into 0: {1; 0; 1; 2; 0; 1; 0}. B5 gives 2 because it matched both keywords, so > 0 reduces every sum to TRUE or FALSE: {TRUE; FALSE; TRUE; TRUE; FALSE; TRUE; FALSE}.
  5. Multiplying by C2:C8 makes the TRUE rows keep their amount and the FALSE rows 0: {450; 0; 38.5; 1120; 0; 215; 0}.
  6. SUMPRODUCT adds the seven values: 450 + 38.5 + 1120 + 215 = 1823.5. F4 shows € 1,823.501.823,50.
  7. Now see what the guard does. Without > 0 the 2 for B5 would multiply its amount: 450 + 38.5 + 2 * 1120 + 215 = 2943.5, which is 1120 too much. With > 0 each line counts once, and the four lines add up to 1823.5.

Watch out: Leave out the > 0 and a line that contains both words counts twice: here B5 would add its 1,1201.120 two times and the total would read 2,943.502.943,50 instead of 1,823.501.823,50. No error tells you.

More on this example: why it works, 2 more pitfalls, 2 variations

Why it works

SUMPRODUCT evaluates its argument as an array, so SEARCH and ISNUMBER run once per row without array entry. The addition behaves as OR and the comparison with 0 keeps a line that matches both words from counting twice. The multiplication with the amounts is a filter: TRUE keeps the amount, FALSE removes it.

More to watch out for

  • A keyword also matches inside longer words, such as Cashflow for cash (in Dutch, Stellingkasten for kas). None of the seven lines here is such a case, but read the flagged lines before you use the total: it is a list of candidates for review, not a conclusion about cash.
  • If the ranges differ in size, for example B2:B8 against C2:C9, the * pairs the arrays position by position and the unmatched element becomes #N/A, so SUMPRODUCT returns #N/A.

Variations

=SUMIFS(C2:C8, B2:B8, "*"&$F$1&"*") + SUMIFS(C2:C8, B2:B8, "*"&$F$2&"*")
=SUMIFS(C2:C8; B2:B8; "*"&$F$1&"*") + SUMIFS(C2:C8; B2:B8; "*"&$F$2&"*")

Reads more clearly and is fast on long lists. It counts a line twice when it contains both words: here B5 is added twice and the result is 2,943.502.943,50, not 1,823.501.823,50. Use it only when no line can match both.

=SUMPRODUCT(ISNUMBER(SEARCH($F$1, B2:B8)) * C2:C8)
=SUMPRODUCT(ISNUMBER(SEARCH($F$1; B2:B8)) * C2:C8)

The version for one keyword: the same idea without the OR step.

MasterExcel 2021 or later (This example needs Excel 2021 or later)

Classify budget amounts as number, text number, empty or not a number

Veldhuis Installatie BV sends the 2026 budget per cost center as a spreadsheet that people have filled in by hand. Before you total it you want a label per row:

  • a real number
  • text that Excel can convert
  • a value that is not a number at all
  • an empty cell

One formula, copied down, gives all four labels.

Sheet excerpt: C2 holds the formula
RowABCD
1Cost centerBudget 2026 as receivedCheck
2Workshop184500Text, convertible=LET( raw, B2, trimmed, TRIM(raw), IF(ISNUMBER(raw), "Number", IF(trimmed = "", "Empty", IF(ISNUMBER(VALUE(trimmed)), "Text, convertible", "Not a number"))))=LET( raw; B2; trimmed; TRIM(raw); IF(ISNUMBER(raw); "Number"; IF(trimmed = ""; "Empty"; IF(ISNUMBER(VALUE(trimmed)); "Text, convertible"; "Not a number"))))
3Vehicles9620096200
4OfficeTBD
5Insurance41800
6Training2250022500
7Marketing
8
Formula cell (C2)InputMarks: extra spaceNote: B2 is text with two spaces in front of the digits, B5 is the text 41800, B4 is the text TBD, B3 and B6 are real numbers and B7 is an empty cell.

Formula in C2

=LET(
  raw, B2,
  trimmed, TRIM(raw),
  IF(ISNUMBER(raw), "Number",
    IF(trimmed = "", "Empty",
      IF(ISNUMBER(VALUE(trimmed)), "Text, convertible", "Not a number"))))
=LET(
  raw; B2;
  trimmed; TRIM(raw);
  IF(ISNUMBER(raw); "Number";
    IF(trimmed = ""; "Empty";
      IF(ISNUMBER(VALUE(trimmed)); "Text, convertible"; "Not a number"))))

Result: Text, convertible

Step by step
  1. LET stores B2 as raw. B2 holds the text 184500 with two spaces in front of it.
  2. LET stores TRIM(raw) as trimmed. TRIM removes the leading spaces, so trimmed is the text 184500.
  3. The first IF asks ISNUMBER(raw). The type of B2 is text, so the answer is FALSE and Excel moves to the inner IF.
  4. The second IF compares trimmed with an empty text. 184500 is not empty, so this is FALSE too.
  5. The third IF evaluates VALUE(trimmed) first. VALUE reads the text 184500 as the number 184500. ISNUMBER receives a number and returns TRUE, so C2 shows Text, convertible.
  6. Copy C2 down:

    • C3 (96200) is Number at the first test
    • C4 (the text TBD): VALUE gives #VALUE!, ISNUMBER takes the error as input and returns FALSE, so the label is Not a number and no error shows
    • C5 (41800 as text) is Text, convertible
    • C6 (22500) is Number
    • C7 is empty: raw is not a number, trimmed is empty, so the label is Empty
  7. Here is what the labels are worth. SUM over B2:B7 gives only 96200 + 22500 = 118700. The two text numbers hold another 184500 + 41800 = 226300, so the budget is 345000 once they are converted.

Watch out: The label Not a number depends on the regional setting. Under a Dutch setting a text such as 2315.50 typically fails in VALUE (the period is not the decimal separator there), under an English setting it is read as 2315.5. The same file can be classified differently on two computers.

More on this example: why it works, 3 more pitfalls, 1 variation

Why it works

The order of the tests carries the logic. ISNUMBER on the original comes first because a real number needs no repair, the empty test comes before VALUE because VALUE of an empty text is an error, and the VALUE test comes last. ISNUMBER accepts an error as its input without passing it on and answers FALSE, so VALUE needs no IFERROR around it.

The LET names make the three tests readable, and TRIM is evaluated once. The formula needs LET, which exists in Excel 2021 and Microsoft 365; older versions do not have LET at all, so repeat TRIM(B2) in the nested IF there.

Do not use it when cells may hold an error value such as #N/A: TRIM passes the error on and the formula returns it instead of a label, so wrap raw in IFERROR first. Nor is it needed when you only want to know how many cells are not real numbers; COUNTA - COUNT does that in one cell.

Watch out for

  • The label Not a number depends on the regional setting. Under a Dutch setting a text such as 2315.50 typically fails in VALUE (the period is not the decimal separator there), under an English setting it is read as 2315.5. The same file can be classified differently on two computers.

    If the source uses a fixed decimal separator, convert with NUMBERVALUE instead of VALUE.

  • Another quiet mistake: a text that looks like a number can still be read as something else. VALUE turns 12-5 into a date, so ISNUMBER says TRUE and the label is Text, convertible although the value is a cost code. Check the converted value against a sensible range when the column should hold amounts only.
  • A non-breaking space (CHAR(160)) from a web export is not removed by TRIM, so VALUE fails and the label says Not a number for a value that looks fine.

Variations

=COUNTA(B2:B7) - COUNT(B2:B7)
=COUNTA(B2:B7) - COUNT(B2:B7)

Counts the non-empty cells that are not real numbers in one cell: 3 here (B2, B4, B5). Use it when you need the count and not the label per row.

Common mistakes

Common mistakes
SymptomCauseFix
FALSE for digits that look like numbersYou expect TRUE for digits that are left-aligned, with a green triangle, and ISNUMBER says FALSE.The answer is correct: the cell holds text. Convert it with VALUE or a double minus, or fix the import. Check with ISNUMBER again afterwards.
#VALUE! on rows without the wordIF(SEARCH("x", A2) > 0, ...) shows #VALUE! on every row that does not contain x.Test with ISNUMBER(SEARCH("x", A2)).
Empty rows counted as problemsNOT(ISNUMBER(A2:A100)) counts empty rows as problems.An empty cell is not a number, so ISNUMBER returns FALSE for it. Add a second condition such as A2:A100 <> "", or use COUNTA minus COUNT.
A date column passes the number checkYou use ISNUMBER to check that a column holds amounts, and a date column passes.A real date is a serial number, so ISNUMBER gives TRUE. Add a range test on the value or check the number format.

Used in combinations