|You could use a UDF that accepts the list, the word you want and word you don't want as arguments.|
Using your example from before:
Put your list in A1:B9
Put Blue in C1
Put Water in D1
=GoodBad($B$1:$B$9, C1, D1)
That should return 2.
You could put green and water in C2, D2 and drag it down.
=GoodBad($B$1:$B$9, C1, $D$1) and put green in C2, leaving water in D1 to be common to both searches.
Keep in mind that I'm just suggesting things for the example data you provided. Other layouts or other searches may require something very different.
Function GoodBad(myWords, goodWord, badWord As Range)
Dim myCount, cell
For Each cell In myWords
If UCase(cell) Like UCase("*" & goodWord & "*") And _
Not UCase(cell.Offset(0, -1)) Like UCase("*" & badWord & "*") Then
myCount = myCount + 1
GoodBad = myCount