extract unqiue distinct values containing specific text

Array formula in B12:

=INDEX(tbl, MIN((IF((COUNTIF($B$11:B11, tbl)=0)*(ISNUMBER(SEARCH($D$9, tbl))), ROW(tbl)-MIN(ROW(tbl))+1))), MATCH(0, COUNTIF($B$11:B11, INDEX(tbl, MIN(IF((COUNTIF($B$11:B11, tbl)=0)*(ISNUMBER(SEARCH($D$9, tbl))), ROW(tbl)-MIN(ROW(tbl))+1)), , 1))+(SEARCH($D$9, INDEX(tbl, MIN(IF((COUNTIF($B$11:B11, tbl)=0)*(ISNUMBER(SEARCH($D$9, tbl))), ROW(tbl)-MIN(ROW(tbl))+1)), , 1))=0), 0), 1) + CTRL + SHIFT + ENTER

copied down as far as needed.

Named ranges

tbl (B3:D5)
What is named ranges?

How to implement array formula to your workbook

Change the named range and "contain" cell reference ($D$9). If your list starts at, for example, F3. Change $B$11:B11 in the above formulas to F2:$F$2.

Download excel sample file for this article.

Extract-unique-distinct-values-contains-in-a-range.xls
(Excel 97-2003 Workbook *.xls)

Functions in this article

ROW(reference) Returns the rownumber of a reference

COUNTIF(range,criteria)
Counts the number of cells within a range that meet the given condition

IF(logical_test;[value_if:true];[value_if_false])
Checks whether a condition is met, and returns one value if TRUE, and another value if FALSE

MATCH(lookup_value;lookup_array; [match_type] Returns the relative position of an item in an array that matches a specified value

INDEX(array,row_num,[column_num])
Returns a value or reference of the cell at the intersection of a particular row and column, in a given range

MIN(number1,[number2])
Returns the smallest number in a set of values. Ignores logical values and text

ISNUMBER(value)
Checks whether a value is a number and returns TRUE or FALSE

SEARCH() Returns the number of the character at which a specific character or text string is first found, reading left to right (not case sensitive)