Find Text With INDEX and MATCH

Find Text With INDEX and MATCH

Is there a harder working team in Excel, than the reliable duo of INDEX and MATCH? These functions work beautifully together, with MATCH identifying the location of an item, and INDEX pulling the results out from the murky depths of data. See how to find text with INDEX and MATCH.

Find Text in a String

Last week, Jodie asked if I could help with a problem, and INDEX and MATCH came to the rescue again.

Jodie sent me a picture of her worksheet, with text strings in column A and codes in column D. Each text string contained one of the codes, and Jodie wanted that code to appear in column B.

Would you use INDEX and MATCH to find the code, or another method? Keep reading to see my solution, and please share your ideas, if you have other ways to solve this.

indexmatchtextstring01

Count the Occurrences With COUNTIF

When you want to find text that’s buried somewhere in a string, the * wildcard character is useful. We can use the wildcard with COUNTIF, to see if the string is found somewhere in the text.

I entered this test formula in cell B1. This formula needs to be array-entered, so press Ctrl + Shift + Enter.

=COUNTIF(A1,”*” & $D$1:$D$3 & “*”)

indexmatchtextstring02
There are wildcard characters before and after the cell references to D1:D3, so the text will be found anywhere within the text string.

To see the results of the array formula, click in the formula bar, and press the F9 key. The array shows 0;1;0 so it found a match for CAT, which is in the second cell in the range, $D$1:$D$3.

  • Important: After you check the results, press the Esc key, to exit the formula without saving the calculated results.

indexmatchtextstring03

Get the Position With MATCH

Next, you can add the MATCH function, wrapped around the COUNTIF formula, to get the position of the “1” in the results.

Make the following change to the formula in cell B1, and remember to press Ctrl + Shift + Enter.

=MATCH(1,COUNTIF(A1,”*”&$D$1:$D$3&”*”),0)

indexmatchtextstring04

The result is 2, so the code “CAT”, the 2nd item in range D1:D3, was found in cell A1.

Get the Code With INDEX

Next, the INDEX function can return the code from the range $D$1:$D$3, that is at the position that the MATCH function identified.

Make the following change to the formula in cell B1, and remember to press Ctrl + Shift + Enter.

=INDEX($D$1:$D$3,MATCH(1,COUNTIF(A1,”*”&$D$1:$D$3&”*”),0))

indexmatchtextstring05

The result is CAT, so the formula is working correctly.

Prevent Error Results With IFERROR

There should be one valid code in each text string, but sometimes the data doesn’t cooperate. Just in case there are text strings without a code, or more than one instance of the code, you can use IFERROR to show an empty string, instead of an error. (Excel 2007 and later versions)

=IFERROR(INDEX($D$1:$D$3,MATCH(1,COUNTIF(A1,”*”&$D$1:$D$3&”*”),0)),””)

Enter with Ctrl + Shift + Enter, and then copy the formula down to row 10.

indexmatchtextstring06

In cell B6, the formula returns an empty string, and the cell looks blank, because none of the valid codes are in the text that’s in cell A6.

Use a Named Range

Instead of referring to range $D$1:$D$3, you could name that range, and use the name in the INDEX/MATCH formula. That would make it easier to maintain, if the size of the codes list will change.

indexmatchtextstring07

Download Find Text With INDEX and MATCH Sample File

To get the sample file, and see how the formula works, go to the INDEX and MATCH page on my Contextures site.

In the Download section on that page, look for sample file 4 – Find Text From Code List. The zipped file is in xlsx format, and does not contain macros.

More INDEX and MATCH Examples

There are more examples of using INDEX and MATCH on my Contextures site.

For example, this video shows how to use INDEX and MATCH to find the best price.

____________________________

Find Text With INDEX and MATCH

58 thoughts on “Find Text With INDEX and MATCH”

  1. hi please help me
    just want to get a text from a sentence
    a1:ITM Reference: SI#0372 DR#0472 Assignment: 0001000031
    a2:SI#
    a3:=IFERROR(INDEX($C$8:$C$11,MATCH(1,COUNTIF(B8,”*”&$C$8:$C$11&”*”),0)),””)
    result is SI#
    However, i’d like to get the 0372 hence result should be SI#0372
    Hoping to find solution from you po. Many Thanks

  2. Hi Debra,
    Your solution almost gets the result I need. I’m hoping you could help find the general solution as I suspect others will find it very useful.
    I have two named-ranges to make it easier; Net_List is the first column of Net_Rank and consists of a list of Networks e.g. Wifi, Eth, BT, LoRaWAN etc. Adjacent to this list of Networks is their ranking number e.g. 4, 1, 2, 1 etc. These ranks are changed by the user to suite business priorities.
    The source data is a single cell C14 with the string “Eth | Wifi | GSM | LoRaWAN”. The goal is to find all matching Networks in the string and add up their ranks. So in this case, the manually calculated result is 1+4+2+1=8. The array-formula I have only finds the first match being “Wifi” and indexes the first rank value being “4”:
    {=INDEX(Net_Rank,MATCH(1,COUNTIF(C14,”*”&Net_List&”*”),0),2)}
    The array produced by the COUNTIF is {1,1,0,1,1,0,0,0,0}, so this is finding all Networks with their position in Net_List. MATCH only finds the first match to “1” in the array that corresponds to “Wifi”, hence its rank in the complete formula. I know of using SMALL to get first, second, third etc. instances but this only works line by line. Is there a possible solution where the matching ranking values can be added in one array formula?
    Many Thanks,
    Michael.

  3. Hello I was hoping you might be able to assist me. I am using this formula however my reference has blank cells. I am noticing that this formula will not search past the blank cells. How can I fix this?
    Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.