1) The SUBSTITUTE function is case-sensitive. The typical approach to accommodating that is to UPPERCASE or LOWERCASE everything.
2) From a matching perspective, "IMPACT*" would match text beginning with IMPACT. Using "IMPACT*D" would match text beginning with "IMPACT" and ending with "D"...including "IMPACT WAS PROFOUND". You might find it easier to list each item.
Do you need to know the count of occurrences of search terms found in text sample? Or do you only need to count each search term once even if it occurs multiple times in the text?
Also....this is from my formula stash (it might be helpful)
This formula returs TRUE if cell A1 equals any list items
B1: =OR(A1={"apple","banana","cherry"})
This formula returns the count of list items that are contained in A1
B1: =SUMPRODUCT(COUNTIF(A1,"*"&{"apple","banana","cherry"}&"*"))
B1: =SUMPRODUCT(COUNTIF(A1,"*"&rngList&"*"))
This function checks if A1 begins with, or ends with, a list item
B1: =SUMPRODUCT(COUNTIF(A1,{"*",""}&{"apple","banana","cherry"}&{"","*"}))
B1: =SUMPRODUCT(COUNTIF(A1,{"*",""}&rngList&{"","*"}))
Other alternatives:
This case-insensitive formula checks if the text contains BOTH "quick" and "fox"
B1: =SUMPRODUCT(COUNTIF(A1,"*"&{"quick","fox"}&"*"))=2