Как именно ты это делаешь? Вы активируете ячейки, затем читаете данные в цикле? Вы пробовали эти советы по улучшению производительности макросов? Если только слова (а не конкретные буквы в данном слове) окрашены в красный цвет, не могли бы вы создать временный массив из блока текста (используйте пробел "" в качестве разделителя) и проходить по каждому слову?
Грубый экс)
blockOfText = "This is a block of text."
myArray = split(blockOfText, " ")
for each str in myArray
'' If color is red, append to "bad text array" and remove from this one ''
next
'' Then convert the "myArray" back into a string and place back in the cell