FIND vs SEARCH in Excel
By ExcelReady TeamUpdated 8 min read
The short answer
FIND and SEARCH both return the position of some text inside a cell. FIND is case-sensitive and treats * and ? as normal characters. SEARCH ignores capitals and supports the wildcards * and ?. Use SEARCH for most "does this cell contain a word" checks, and FIND when capital letters matter.
Key takeaways
- Both return a position number, such as 5 for the 5th character, or #VALUE! when the text isn't found.
- FIND is case-sensitive: "refund" doesn't match "Refund". SEARCH ignores case.
- SEARCH supports the wildcards * and ?. FIND treats them as normal characters.
- Wrap either one in ISNUMBER to get TRUE or FALSE for "does this cell contain...".
On this page+
The short answer to the FIND vs SEARCH Excel question: both return the position of some text inside a cell, but FIND is case-sensitive and has no wildcards, while SEARCH ignores capitals and supports * and ?. For most "does this cell contain..." checks, SEARCH is the safer choice. This guide is for anyone splitting names, tagging support tickets or cleaning text for a report or an Excel test.
FIND vs SEARCH Excel differences at a glance#
The two functions take the same arguments and return the same kind of result. They differ in only two ways: capitals and wildcards.
| Feature | FIND | SEARCH |
|---|---|---|
| Syntax | =FIND(find_text, within_text, [start_num]) | =SEARCH(find_text, within_text, [start_num]) |
| Returns | Position of the first match | Position of the first match |
| Case-sensitive | Yes: "R" and "r" are different | No: "R" and "r" match |
Wildcards * and ? | No: treated as normal characters | Yes |
| Text not found | #VALUE! | #VALUE! |
| Excel versions | All versions | All versions |
How FIND and SEARCH work#
Both functions count characters from the left and tell you where the text starts. The position is the character number: in "Dana Whitfield", the space is character 5.
=FIND(find_text, within_text, [start_num])
=SEARCH(find_text, within_text, [start_num])- find_text is what you look for, in double quotes, such as
" "for a space or"refund". - within_text is the cell to look in.
- start_num is optional: the character to start from. It defaults to 1, the first character.
Both return only the first match after start_num. Spaces and punctuation count as characters.
The same text searched both ways#
Here are four support tickets. The word "refund" appears with different capitals, and one ticket doesn't mention it at all.
| A | |
|---|---|
| 1 | Ticket |
| 2 | Refund for order #48213 |
| 3 | REFUND request #50077 |
| 4 | Where is my order #49120 |
| 5 | Late delivery, please refund #51544 |
Task 1: where does "refund" start?#
=FIND("refund",A2)
=SEARCH("refund",A2)Filled down to row 5, they give these results:
| Ticket | FIND | SEARCH |
|---|---|---|
| Refund for order #48213 | #VALUE! | 1 |
| REFUND request #50077 | #VALUE! | 1 |
| Where is my order #49120 | #VALUE! | #VALUE! |
| Late delivery, please refund #51544 | 23 | 23 |
FIND only matches the exact lowercase "refund", so it finds just one ticket. SEARCH ignores case and finds three. Both return #VALUE! for row 4, where the word isn't there at all.
Task 2: does the ticket mention a refund?#
A position isn't always what you want. To get TRUE or FALSE, wrap the search in ISNUMBER:
=ISNUMBER(SEARCH("refund",A2))This returns TRUE for rows 2, 3 and 5 and FALSE for row 4. Put it inside IF to make a label:
=IF(ISNUMBER(SEARCH("refund",A2)),"Refund","Other")With FIND in place of SEARCH, rows 2 and 3 would wrongly say Other.
Task 3: a pattern with a wildcard#
In SEARCH, ? means any one character and * means any number of characters. This finds "order", "ordor" or "ord3r":
=SEARCH("ord?r",A4)
=FIND("ord?r",A4)SEARCH returns 13, where "order" starts. FIND looks for a real question mark and returns #VALUE!. To search for a real * or ? with SEARCH, put a tilde (~) before it, like "~?".
Task 4: pull out the order number#
Both functions are most useful inside other text functions. Each order number is the five digits after the #:
=MID(A2,SEARCH("#",A2)+1,5)SEARCH finds the # at position 18, so MID starts one character later and takes five characters: 48213. FIND works just as well here, because # has no capital letter and isn't a wildcard.
When to use SEARCH#
Use SEARCH when capitals shouldn't matter, which is most of the time. It is the better choice when:
- You check whether a cell contains a word, like "refund", "urgent" or "cancel", typed by different people.
- The data has mixed capitals, such as product names or free-text comments.
- You need a pattern, such as
"ord?r"or"INV-*-2026". - You want every matching row. In Excel 2021, Excel 2024 or Microsoft 365,
=FILTER(A2:A5,ISNUMBER(SEARCH("refund",A2:A5)))lists the three refund tickets in one formula. Our guide to the FILTER function explains how it works.
If you only need a count, you may not need SEARCH at all: =COUNTIF(A2:A5,"*refund*") returns 3, because COUNTIF also ignores case and accepts wildcards.
When to use FIND#
Use FIND when capitals carry meaning or when your text includes * or ?. It is the better choice when:
- Case matters, such as codes where "AB-1" and "ab-1" are different items, or finding only the all-caps "REFUND" flag:
=ISNUMBER(FIND("REFUND",A3))is TRUE, but the same test on A2 is FALSE. - You search for a real
*or?and don't want to add tildes. - You split text at a fixed character, such as a space, a comma or a dash. Both work, and FIND is the common choice.
The classic example is a first name. On a customer list with "Dana Whitfield" in C2:
=LEFT(C2,FIND(" ",C2)-1)FIND returns 5, the space. LEFT takes 5 minus 1 = 4 characters: Dana.
For a name with three parts, such as "Ana Maria Lopez", use start_num to find the second space. Start looking one character after the first space:
=FIND(" ",C3,FIND(" ",C3)+1)The inner FIND returns 4, so the outer FIND starts at character 5 and returns 10, the second space. Add 1 to that inside MID and you have the start of the last name.
In Microsoft 365, TEXTBEFORE and TEXTAFTER can split text without counting positions: =TEXTBEFORE(C2," ") also returns Dana. They are easier to read, but FIND and SEARCH work in every version, so they are still the safer choice for shared files and tests. See TEXTBEFORE and TEXTAFTER for more. The LEFT function guide shows the RIGHT and MID versions too, and our article on how to find text in a cell covers more patterns.
Common mistakes with FIND and SEARCH#
These slips cause most #VALUE! errors and wrong positions:
- Using FIND when capitals vary. "Refund" and "REFUND" are missed. Use SEARCH.
- Forgetting that "not found" is an error. Both return #VALUE!, not 0. Use ISNUMBER for a TRUE or FALSE test, or IFERROR to show a fallback. IFNA won't catch it; see IFERROR vs IFNA.
- Swapping the arguments. What you look for comes first, the cell comes second.
=SEARCH(A2,"refund")looks for the whole ticket inside the word. - Forgetting the quotes.
=SEARCH(refund,A2)returns #NAME?. Text in a formula needs double quotes. - Searching for a short word that sits inside longer ones.
"art"is found in "start" and "party". Add spaces, like" art ", or check the results. - Off-by-one errors with LEFT and MID. The position points at the character, so subtract 1 to stop before it and add 1 to start after it.
If you copy a formula like =SEARCH($B$1,A2) down a list, the dollar signs keep the search word fixed while A2 moves; see relative vs absolute references. Once you have pieces of text, our comparison of CONCATENATE vs CONCAT vs TEXTJOIN shows how to join them back together.
Our recommendation#
Use SEARCH by default. Most real text, such as names, comments and ticket subjects, is typed with inconsistent capitals, and SEARCH handles that without extra work. Switch to FIND when capitals carry meaning, or when your text contains * or ? that you want to match literally. Whichever you use, remember that "not found" is #VALUE!, and wrap the search in ISNUMBER or IFERROR before using it in a report.
In short: SEARCH for everyday "contains" checks, FIND when case matters.
Practise it#
Try the exercise on this page: the ticket says REFUND in capitals, so only SEARCH finds it. Then practise FIND and SEARCH in a live spreadsheet, where you split full names and pull order numbers out of support tickets.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
In B3, label the ticket in A3 as "Refund" if it contains the word refund in any capitals, or "Other" if not. Use IF, ISNUMBER and SEARCH.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Type | |||
| 2 | Refund for order #48213 | |||
| 3 | REFUND request #50077 | |||
| 4 | Where is my order #49120 | |||
| 5 | Late delivery, please refund #51544 | |||
| 6 | ||||
| 7 | ||||
| 8 |
Tip: SEARCH("refund",A3) returns a number if the word is there. ISNUMBER turns that into TRUE or FALSE, which IF can use.
Practise this in a lesson
Frequently asked questions
What is the difference between FIND and SEARCH in Excel?
FIND is case-sensitive and doesn't support wildcards. SEARCH ignores upper and lower case and supports the wildcards * and ?. Otherwise they work the same way and return the same position.
Why does FIND return #VALUE!?
FIND returns #VALUE! when it can't find the text, often because the capitals don't match. Check the case, or use SEARCH if case doesn't matter.
How do I check if a cell contains a word?
Use =ISNUMBER(SEARCH("word",A2)). SEARCH returns a number when the word is found and #VALUE! when it isn't, and ISNUMBER turns that into TRUE or FALSE.
Can I search for a real asterisk or question mark with SEARCH?
Yes. Put a tilde before it, like "*" or "?". Or use FIND, which treats * and ? as normal characters.
Do FIND and SEARCH work in all versions of Excel?
Yes. Both work in every version of Excel, including Microsoft 365, Excel for the web and Excel on a Mac.