Explanation
Working from the inside out, this part of the formula searches each cell in B4:B11 for all values in the named range “things”:
--ISNUMBER(SEARCH(things,B4)
The SEARCH function returns the position of the value if found, and the #VALUE error if not found. For B4, the results come back in an array like this:
{8;#VALUE!;#VALUE!}
The ISNUMBER function changes all results to TRUE or FALSE:
{TRUE;FALSE;FALSE}
The double negative in front of ISNUMBER forces TRUE/FALSE to 1/0:
{1;0;0}
The SUMPRODUCT function then adds up the results, which is then tested against zero:
=SUMPRODUCT({1;0;0})>0
Any non-zero result means at least one value was found, so the formula returns TRUE, triggering the rule.
Ignore empty things
To ignore empty cells in the named range “things”, you can try a modified formula like this:
=SUMPRODUCT(--ISNUMBER(SEARCH(IF(things<>"",things),B4)))>0
This works as long as the text values you are testing don’t contain the string “FALSE”. If they do, you can extend the IF function to include a value if false known not to occur in the text (i.e. “zzzz”, “####”, etc.)
Case-sensitive option
SEARCH is not case-sensitive. To check case as well, replace SEARCH with FIND like so:
=SUMPRODUCT(--ISNUMBER(FIND(things,A1)))>0
Preventing false matches
One problem with this approach is you may see false matches caused by substrings that appear inside longer words. For example, if you try to match “dr” you may also find “Andrea”, “drink”, “dry”, etc. since “dr” appears inside these words. This happens because SEARCH automatically performs a “contains” match.
For a partial fix, you can add space around the search words (i.e. " dr “, or “dr “) to avoid catching “dr” in another word. But this will fail if “dr” appears first or last in a cell, or appears next to punctuation. This can be partially addressed by adding space also around the original text. To add space to the start and end of both at the same time, you can try a formula like this:
=SUMPRODUCT(--ISNUMBER(FIND(" "&things&" "," "&B4&" ")))>0
However, this won’t fix problems caused by punctuation.
If you need a more complete solution, one option is to normalize the text first in a helper column , taking care to also add a leading and trailing space. Then you can search for whole words surrounded by spaces.
Explanation
When you use a formula to apply conditional formatting, the formula is evaluated relative to the active cell in the selection at the time the rule is created. In this case, the rule is evaluated for each cell in B4:G12, and the reference to B4 will change to the address of each cell being evaluated, since it is a relative address.
The formula itself uses the COUNTIF function to “count” cells that end with “ota” using the pattern “ota” which uses a wildcard () to match any sequence of characters followed by “ota”. From a practical standpoint, we are only counting 1 cell each time, which means we are either going to get back a 1 or a zero, which works perfectly for conditional formatting.
A simpler, more flexible rule using named ranges
By naming an input cell as a named range and referring to that name in the formula, you can make the formula more powerful and flexible. For example, if you name G2 “input”, you can rewrite the formula like so:
=COUNTIF(B4,"*"&input)
This formula simply adds “*” to the beginning of whatever you put in the input cell. As a result, the conditional formatting rule will respond instantly whenever that value is changed.
Case sensitive option
COUNTIF is not case-sensitive, so if you need to check case as well, you can use a more complicated formula that relies on the RIGHT function together with EXACT:
=EXACT(RIGHT(A1,LEN(substring)),substring)
In this case, RIGHT extracts text from the right of each cell, and only the number of characters in the substring you are looking for, which is supplied by LEN. Finally EXACT compares the extracted text to the text you are looking for (the substring). EXACT is case-sensitive, so only will return TRUE when all characters match exactly.