VBA: Find Text in a String (instr)

August 14th, 2004 | Categories: VBA | Tags: , , ,

You can use the instr function in VBA to test if a string contains certain text. The result is the number of times the specified text appears in the string.

The following code snippet tests the string “Look in this string” for the word “Look”. The result is 1 since the word appears once.

Public Sub FindSomeText()

MsgBox InStr("Look in this string", "Look")

End Sub

Sidenote: This test is case senstive. To skip the case sensitive check, enclose the look-in string and test string in Ucase(). Example

This returns 0 becuase the case is wrong for the word “look”

MsgBox InStr("Look in this string", "look")

However the following returns 1 becuase it turns both strings to all caps before evaluating:

MsgBox InStr(UCase("Look in this string"), UCase("look"))

A quick use of the instr in an if…then statement
Public Sub FindSomeText()

If InStr("Look in this string", "look") = 0 Then
MsgBox "woops, no match"
Else
MsgBox "at least one match"
End If

End Sub
  1. anonymous
    January 10th, 2006 at 13:26
    Reply | Quote | #1

    InStr() allows for a fourth [optional] argument. to our advantage setting this argument to vbTextCompare makes the string search case-insensitive

    ie,
    MsgBox InStr(UCase(“Look in this string”), UCase(“look”))
    should return the same as
    MsgBox InStr(“Look in this string”, “look”, vbTextCompare)

  2. eminent_eddie
    July 31st, 2008 at 08:42
    Reply | Quote | #2

    Instr() returns the position of the first occurrence of one string within another. Not the amount of times the string is found.

    cheers.
    ed

  3. David
    July 1st, 2009 at 15:31
    Reply | Quote | #3

    How come two corrections to the example were noted (years old) and no change was made to the page? In one case, the description of the function in question was plain wrong (# of time found vs. position within string), and within the other, it noted that the extended example wasn’t needed since the function already did the desired test if you simply used an optional parameter. Is no one actually reading the reader responses?

  4. Eric
    July 15th, 2009 at 19:51
    Reply | Quote | #4

    Instr() will return an int of the position of the result and will return 0 when it does not exist, e.g.
    MsgBox Inst(“abc”,”a”) ‘returns 1
    MsgBox Inst(“abc”,”x”) ‘returns 0

    Therefore the if statement is still valid.