Формулы Excel для проверки содержимого ячейки

Я пытаюсь создать некоторое Условное форматирование во время выполнения (huzzah) для надстройки (double huzzah) и обнаружил, что, по-видимому, некоторые функции не могут использоваться, как в обычном листе. (Я просто получаю недопустимую ошибку вызова процедуры 5 при попытке создать CF, ссылающуюся на функцию VBA, которую я мог бы вызвать в ячейке, даже если она находится в надстройке, а не в книге; я могу создать CF fine со встроенной функцией.) Самое ясное подтверждение, которое я нашел для этого здесь, но это на самом деле не объясняет, в чем проблема; это эзотерическая часть, хотелось бы услышать больше о том, что я могу ожидать с этим.

резина встречает дорогу часть: можно ли избежать VBA и использовать ряд Excel-только, встроенный функции для проверки того, содержит ли данная ячейка константу (т. е. значение, введенное пользователем), формулу (т. е. какой-то расчет, логическую операцию и т. д.-- в значительной степени начинается с=) или ссылки (т. е. ссылка на ячейку в другом листе или в другой книге)? Я знаю, что Excel имеет это определение на кончиках пальцев; свидетель использования и скорости GoTo / Special. Как Я добраться до него?

заранее спасибо за вашу помощь.

3 ответов


обновлено для Excel 2013:

для версий Office 2013 и выше,ISFORMULA1 функция доступна. Сочетание этого с не


Я не думаю, что вы можете избежать VBA вообще, но вы можете создать простой UDF и использовать его в Excel

например

Function IsFormula(Check_Cell As Range)
  IsFormula = Check_Cell.HasFormula
End Function

и

Function IsLink(Check_Cell As Range)

  If InStr(1, Check_Cell.Formula, "!", vbTextCompare) Then
   IsLink = Check_Cell.HasFormula
  End If
End Function

=IsFormula (A1) вернет TRUE, если есть формула в A1 и FALSE в противном случае =IsLink (A1) вернет TRUE, если в A1 есть формула, содержащая '!- в противном случае ложь!--3-->

вы можете объединить их и Создать Строковый вывод "Формула","ссылка", "значение"


не уверен, что это то, что вы хотите, но он, кажется, делает то, что вы просите, по крайней мере, некоторые из них.

http://www.ozgrid.com/VBA/special-cells.htm

Это range.specialcells метод.

он возвращает диапазон, содержащий только константы или только формулы и т. д.

пример того, как этот код будет использоваться показано ниже:

Sub CheckForConstants()
    Dim x As Range
    Set x = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)
    MsgBox "address of cells that contain numbers only is " & x.Address
    Set x = Selection.SpecialCells(xlCellTypeConstants)
    MsgBox "address of cells that contain constant of any type is " & x.Address
End Sub

вы выбираете диапазон, а затем выполняете этот макрос, и он возвращает адрес те ячейки, которые отвечают требованиям.

первый x ищет ячейки, содержащие только числа. Второй x ищет ячейки, содержащие любые константы

диапазон в этом случае был выбран, но вы можете установить то, что хотите, т. е. диапазон("a1:b5") и т. д.

Я вернулся к рабочему листу и использовал специальный метод goto.

по-видимому, он также использует диапазон.специальный метод.

я использовал параметр макроса записи, и это то, что я полученный.

Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Range("M7").Select
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    Range("I6:J16").Select
    Selection.SpecialCells(xlCellTypeConstants, 1).Select
    Range("L9").Select
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("CP").Select
    Application.CutCopyMode = False
    Range("I21").Select
    ActiveSheet.DrawingObjects.Select
    Application.Goto Reference:="GoToSpecialRoutine"

специальная функция goto на листе использует специальный метод ячеек для некоторых из его действий.

Он также использует другие. В последних 5 строках кодов я изменил рабочий лист и попросил его перейти к объектам.

Это не к ним. Он просто выбирает их.

рабочий лист CP содержал объекты, и он использовал код в последних 3 строках, чтобы выбрать все объекты на рабочем листе.

лучший выбор для просмотра код за goto special должен записать макрос, а затем использовать функцию goto / special на листе.

по завершении остановите запись и просмотрите записанный макрос.

Я не знаю никаких других функций для выбора по типу ячейки, но я просто новичок, поэтому он может быть там очень легко и не быть известным мне.