ISNUMBER
ISGETAL in Dutch Excel
Answers TRUE when a value is a real number and FALSE for text, errors, logical values and empty cells.
Last updated: 13 October 2026
| Row | A | B | C | D |
|---|---|---|---|---|
| 1 | Asset no. | Description | Acquisition value | Number? |
| 2 | VA-011 | Delivery van | 28450 | FALSEFALSE=ISNUMBER(C2)=ISNUMBER(C2) |
| 3 | VA-012 | Welding machine | 39803980 | |
| 4 | VA-013 | Scaffolding set | 1260012600 | |
| 5 | VA-014 | Cable tracer | 1875 | |
| 6 | VA-015 | Workshop shelving | 64206420 |
Swipe sideways to see all columns
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)
| Argument | Type | Meaning |
|---|---|---|
value | Required | The 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.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Asset no. | Description | Acquisition value | Number? | |
| 2 | VA-011 | Delivery van | 28450 | FALSEFALSE=ISNUMBER(C2)=ISNUMBER(C2) | |
| 3 | VA-012 | Welding machine | 39803980 | ||
| 4 | VA-013 | Scaffolding set | 1260012600 | ||
| 5 | VA-014 | Cable tracer | 1875 | ||
| 6 | VA-015 | Workshop shelving | 64206420 | ||
| 7 |
Swipe sideways to see all columns
Formula in D2
=ISNUMBER(C2)
=ISNUMBER(C2)
Result: FALSE
Step by step
- Excel looks at
C2and finds28450. The cell holds the characters 2, 8, 4, 5 and 0 as text: it is left-aligned and has a green triangle. - ISNUMBER tests the type of the value, not how it looks. Text is not a number, however many digits it contains.
D2shows FALSE.Copy
D2down toD6:C3holds the number 3980, soD3is TRUED4(12600) is TRUEC5holds the text 1875, soD5is FALSED6(6420) is TRUE
- 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.
- Retype
C2as a number andD2turns 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.
| Row | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| 1 | Entry no. | Description | Amount | Reversal? | Keyword | reversal | |
| 2 | 25-0701 | REVERSAL booking 25-0688 | -€420.00€ -420,00 | TRUETRUE=ISNUMBER(SEARCH($F$1, B2))=ISNUMBER(SEARCH($F$1; B2)) | |||
| 3 | 25-0702 | Purchase copper piping | €840.00€ 840,00 | ||||
| 4 | 25-0703 | Reversal of invoice 25-1204 | -€1,250.00€ -1.250,00 | ||||
| 5 | 25-0704 | Reversing warranty accrual | -€310.00€ -310,00 | ||||
| 6 | 25-0705 | Travel costs fitter | €95.00€ 95,00 | ||||
| 7 | 25-0706 | VAT correction, reversal last month | -€64.00€ -64,00 | ||||
| 8 |
Swipe sideways to see all columns
Formula in D2
=ISNUMBER(SEARCH($F$1,B2))
=ISNUMBER(SEARCH($F$1;B2))
Result: TRUE
Step by step
- Excel reads the keyword from
F1:reversal. The dollar signs keep that reference fixed when you copy the formula down. - SEARCH looks for
reversalinB2, REVERSAL booking 25-0688. It ignores capitalization, so it finds the word at position 1 and returns the number 1. - ISNUMBER receives 1, which is a number, and returns TRUE.
D2shows TRUE. - Copy
D2down. InB3(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.D3is FALSE. The other rows:
D4gives TRUE (position 1)D5gives FALSE: Reversing warranty accrual containsreversibut notreversal, the seventh letter differsD6gives FALSED7gives TRUE, with the keyword at position 17
- Three lines are flagged, the entries
25-0701,25-0703and25-0706, together -420 + -1250 + -64 = -1734. Type another word inF1and 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 as25-06*matches every description that contains25-06followed 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:
reversalwould also matchreversals. 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.
| Row | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| 1 | Entry no. | Description | Amount | Keyword 1 | cash | ||
| 2 | 25-0801 | Cash withdrawal for small purchases | €450.00€ 450,00 | Keyword 2 | coin | ||
| 3 | 25-0802 | Payroll payment week 11 | €3,200.00€ 3.200,00 | ||||
| 4 | 25-0803 | Parking paid in coins | €38.50€ 38,50 | Total | € 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) | ||
| 5 | 25-0804 | Cash and coin deposit to bank | €1,120.00€ 1.120,00 | ||||
| 6 | 25-0805 | Insurance transfer | €640.00€ 640,00 | ||||
| 7 | 25-0806 | Coin refund received | €215.00€ 215,00 | ||||
| 8 | 25-0807 | Card payment fuel | €87.25€ 87,25 | ||||
| 9 |
Swipe sideways to see all columns
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
- Excel evaluates the inner functions first. SEARCH($F$1, B2:B8) looks for
cashin all seven descriptions at once and returns seven results: a position forB2(1) andB5(1), and #VALUE! for the other five. - ISNUMBER turns those seven results into {TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; FALSE}. The errors become FALSE, so nothing blocks the calculation.
- The same steps with
$F$2(coin) give {FALSE; FALSE; TRUE; TRUE; FALSE; TRUE; FALSE}:B4,B5andB7contain the keyword.B5is the line that contains both words. - Adding the two arrays turns TRUE into 1 and FALSE into 0: {1; 0; 1; 2; 0; 1; 0}.
B5gives 2 because it matched both keywords, so > 0 reduces every sum to TRUE or FALSE: {TRUE; FALSE; TRUE; TRUE; FALSE; TRUE; FALSE}. - Multiplying by
C2:C8makes the TRUE rows keep their amount and the FALSE rows 0: {450; 0; 38.5; 1120; 0; 215; 0}. - SUMPRODUCT adds the seven values: 450 + 38.5 + 1120 + 215 = 1823.5.
F4shows € 1,823.501.823,50. - Now see what the guard does. Without > 0 the 2 for
B5would 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
Cashflowforcash(in Dutch,Stellingkastenforkas). 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:B8againstC2: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.
| Row | A | B | C | D |
|---|---|---|---|---|
| 1 | Cost center | Budget 2026 as received | Check | |
| 2 | Workshop | 184500 | Text, 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")))) | |
| 3 | Vehicles | 9620096200 | ||
| 4 | Office | TBD | ||
| 5 | Insurance | 41800 | ||
| 6 | Training | 2250022500 | ||
| 7 | Marketing | |||
| 8 |
Swipe sideways to see all columns
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
- LET stores
B2as raw.B2holds the text184500with two spaces in front of it. - LET stores TRIM(raw) as trimmed. TRIM removes the leading spaces, so trimmed is the text 184500.
- The first IF asks ISNUMBER(raw). The type of
B2is text, so the answer is FALSE and Excel moves to the inner IF. - The second IF compares trimmed with an empty text. 184500 is not empty, so this is FALSE too.
- The third IF evaluates VALUE(trimmed) first. VALUE reads the text 184500 as the number 184500. ISNUMBER receives a number and returns TRUE, so
C2shows Text, convertible. Copy
C2down:C3(96200) is Number at the first testC4(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 showsC5(41800 as text) is Text, convertibleC6(22500) is NumberC7is empty: raw is not a number, trimmed is empty, so the label is Empty
- Here is what the labels are worth. SUM over
B2:B7gives 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.50typically 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-5into 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
| Symptom | Cause | Fix |
|---|---|---|
| FALSE for digits that look like numbers | You 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 word | IF(SEARCH("x", A2) > 0, ...) shows #VALUE! on every row that does not contain x. | Test with ISNUMBER(SEARCH("x", A2)). |
| Empty rows counted as problems | NOT(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 check | You 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
- Find the customer from a bank descriptionCut the invoice number out of a bank statement description with TEXTAFTER and TEXTBEFORE, then look up the customer in the receivables list with XLOOKUP.Excel 2024 or later (This combination needs Excel 2024 or later)
- Entries posted on weekends and public holidays with FILTER, WEEKDAY and COUNTIFList the journal entries dated on a Saturday, a Sunday or a Dutch public holiday: WEEKDAY flags the weekends, COUNTIF checks the date against a holiday list, and FILTER keeps the flagged rows.Excel 2021 or later (This combination needs Excel 2021 or later)