2

Я пытался условно отформатировать ячейки, значение которых не зависит ни от чего другого, поэтому я подумал, что применение ISFORMULA к каждой ячейке поможет, но потом понял, что если в ячейке есть что-то вроде =10^23 то это тоже будет формулой хотя его значение является постоянным.

Ячейка с формулой =10+5 будет иметь функцию, которую я ищу, возвращает FALSE, а ячейка с =A5+3 будет иметь функцию, возвращающую TRUE.

1 ответ1

4

Вот 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, так и вспомогательной подпрограмме. Не имеет значения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .