Jerome asks, in this blog post Search for multiple text strings in multiple cells in excel :

If the list of strings in column D was to increase to a large number e.g. 15, how would you tell excell to select the range of strings, so that you don't have to select each string "SEARCH(\$D\$3" in the search parameter, as it seems is the case at the moment?

Now I finally have an answer.

Array Formula in G2:

=INDEX(List, SMALL(IF(FREQUENCY(IF(ISERROR(SEARCH(TRANSPOSE(Search_strings), List)), "", ROW(List)-MIN(ROW(List))+1), ROW(List)-MIN(ROW(List))+1)=ROWS(Search_strings), ROW(List), ""), ROW(A1)))

How to create an array formula

1. Select cell F2
2. Type formula in formula bar
3. Press and hold Ctrl + Shift
4. Press Enter
5. Release all keys

Named ranges
List (A2:A12)
Search_strings (D2:D3) Change this range if you want to include more search strings
What is named ranges?

How to implement array formula to your workbook
Change named ranges.

Search and display all cells that contain all search strings.xls
(Excel 97-2003 Workbook *.xls)

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

ROW(reference)
Returns the rownumber of a reference

ISERROR(value)
Checks whether a value is an error and returns TRUE or FALSE

SMALL(array,k)
Returns the k-th smallest row number in this data set.

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)

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

TRANSPOSE(array)
Converts a vertical range to a horizontal range, or vice versa.

FREQUENCY(data_array, bins_array)
Calculates how often values occur within a range of values and then returns a vertical array of numbers having one more element than Bins_array.