Skip to main content

FIND

Finds the starting position of one text string within another text string (case-sensitive).

Quick Example​

=FIND("World", "Hello World")

Returns 7 (position where "World" starts).

Syntax​

=FIND(find_text, within_text, [start_num])

Arguments​

  • find_text (required): The text you want to find
  • within_text (required): The text in which you want to search
  • start_num (optional): The character position to start searching from (1-based). Defaults to 1.

Examples​

Basic Find​

=FIND("World", "Hello World")

Returns 7

Find from Specific Position​

=FIND("a", "banana", 3)

Returns 4 (finds first "a" starting from position 3)

Find Space​

=FIND(" ", "Hello World")

Returns 6 (position of first space)

=FIND("world", "Hello World")

Returns #VALUE! (lowercase "world" not found)

Find Character​

=FIND("@", Email)

Returns position of @ symbol in email address

Find Not Present​

=FIND("xyz", "Hello World")

Returns #VALUE! (text not found)

How It Works​

Case-Sensitive Matching​

FIND is case-sensitive:

=FIND("ABC", "abcdef")  // Returns #VALUE! (not found)
=FIND("abc", "abcdef") // Returns 1 (found)

1-Based Position​

Position counting starts at 1:

"Hello"
12345

First character is position 1

UTF-8 Character Counting​

FIND counts characters, not bytes:

  • Each character counts as 1, regardless of byte length
  • Multi-byte UTF-8 characters are counted correctly

Empty find_text​

If find_text is empty, returns start_num position:

=FIND("", "Hello", 3)  // Returns 3

Common Use Cases​

Extract Username from Email​

=LEFT(Email, FIND("@", Email) - 1)

Get everything before @

Extract Domain from Email​

=MID(Email, FIND("@", Email) + 1, LEN(Email))

Get everything after @

Find File Extension​

=FIND(".", Filename)

Find position of period in filename

Parse Delimited Data​

=LEFT(Data, FIND(",", Data) - 1)

Extract first field from CSV

Validate Format​

=IF(ISERROR(FIND("@", Email)), "Invalid", "Valid")

Check if email contains @

Extract Area Code​

=MID(Phone, FIND("(", Phone) + 1, 3)

Extract characters between parentheses

Error Handling​

Text Not Found​

If find_text is not found, FIND returns #VALUE!:

=FIND("xyz", "Hello World")

Returns #VALUE!

Error Propagation​

If any argument contains an error, FIND returns that error:

=FIND("x", #DIV/0!)

Returns #DIV/0!

Common Errors​

ErrorCauseSolution
#VALUE!find_text not foundCheck that text exists in within_text
#VALUE!start_num < 1Use position ≥ 1
#VALUE!start_num > text length + 1Use valid starting position

Invalid start_num​

=FIND("a", "banana", 0)

Returns #VALUE! (start_num must be ≥ 1)

start_num Beyond Text​

=FIND("a", "banana", 100)

Returns #VALUE! (start_num exceeds text length + 1)

Technical Details​

Implementation Notes​

  • Requires 2 or 3 arguments
  • Case-sensitive search
  • Uses UTF-8 character counting
  • Returns 1-based position
  • Empty find_text returns start_num

UTF-8 Aware​

FIND correctly handles multi-byte characters:

=FIND("世", "Hello世界")  // Returns 6 (character position, not byte position)

Search Algorithm​

  • Linear search from start_num
  • Returns position of first match
  • Case-sensitive comparison
  • Stops at first match found

Sum Buddy provides FIND. Some spreadsheets also have SEARCH:

FIND - Case-Sensitive​

=FIND("World", "Hello World")  // Returns 7
=FIND("world", "Hello World") // Returns #VALUE!

SEARCH - Case-Insensitive (if available)​

=SEARCH("World", "Hello World")  // Returns 7
=SEARCH("world", "Hello World") // Returns 7

Advanced Examples​

Find Second Occurrence​

=FIND(" ", "First Second Third", FIND(" ", "First Second Third") + 1)

Find second space

Find Nth Occurrence​

=FIND("~", SUBSTITUTE(Text, " ", "~", N))

Replace Nth occurrence of delimiter, then find it

Extract Between Delimiters​

=MID(A1, FIND("[", A1) + 1, FIND("]", A1) - FIND("[", A1) - 1)

Extract text between square brackets

Find Last Occurrence (Complex)​

// Requires SUBSTITUTE trick or reverse search
=FIND("@", SUBSTITUTE(A1, "@", "@", LEN(A1)-LEN(SUBSTITUTE(A1,"@",""))))

Conditional Extraction​

=IF(ISERROR(FIND(":", A1)), A1, LEFT(A1, FIND(":", A1) - 1))

Extract text before colon if colon exists

Validate Phone Format​

=IF(AND(FIND("-", Phone, 3)=4, FIND("-", Phone, 5)=8), "Valid", "Invalid")

Check for dashes at positions 4 and 8

Using with IFERROR​

Avoid #VALUE! Errors​

=IFERROR(FIND("@", Email), 0)

Returns 0 instead of error if @ not found

Conditional Logic​

=IF(ISERROR(FIND(".", Filename)), "No extension", RIGHT(Filename, LEN(Filename) - FIND(".", Filename)))

Handle cases where delimiter might not exist

Working with Multiple Searches​

Find First of Multiple Characters​

=MIN(FIND(".", A1), FIND(",", A1), FIND(";", A1))

Find whichever delimiter comes first (with error handling needed)

Check for Any Match​

=OR(NOT(ISERROR(FIND("cat", A1))), NOT(ISERROR(FIND("dog", A1))))

Check if either "cat" or "dog" is present

  • LEFT - Extract leftmost characters
  • RIGHT - Extract rightmost characters
  • MID - Extract middle characters
  • LEN - Get text length
  • SUBSTITUTE - Replace text