Вот UDF, который должен работать в большинстве случаев:
Function HAS_REF(r As Range) As Boolean
    HAS_REF = (r.Formula <> r.FormulaR1C1)
End Function
Свойства Formula и FormulaR1C1 диапазона оказываются одинаковыми, если они не содержат ссылку на ячейку.
Исключение: если ячейка содержит ссылку на именованный диапазон, оба будут равны, и ваша ячейка не будет выделена.
Обновить:
Вот версия, которая также проверяет имена диапазонов:
Function HAS_REF(r As Range) As Boolean
    Dim i As Long
    HAS_REF = (r.Formula <> r.FormulaR1C1)
    If HAS_REF Then Exit Function
    For i = 1 To ThisWorkbook.Names.Count
        If InStr(r.Formula, ThisWorkbook.Names(i).Name) Then
            HAS_REF = True
            Exit Function
        End If
    Next i
End Function
Конечно, если вы не используете имена диапазонов в своей рабочей книге, функции, которую я разместил ранее, должно хватить.
Об атрибуте Precedents :
Я попытался использовать атрибут Precedents для проверки ссылок. Но это не похоже на работу. Я пробовал следующее:
- Непосредственно используя - r.Precedentsв UDF, чтобы проверить, есть ли у диапазона прецеденты. Присвоение его переменной диапазона просто присвоило- r(а не- r.Precedents).
 
- Использование вспомогательной подпрограммы для выполнения фактической проверки путем вызова подпрограммы from. Это тоже не сработало. Однако, когда вы закомментируете строку в функции, которая вызывает подпроцедуру, подпрограмма работает и проверяет прецеденты должным образом. 
- Пробовал использовать глобальные переменные, которые доступны как UDF, так и вспомогательной подпрограмме. Не имеет значения.