Формулы Excel для проверки содержимого ячейки
Я пытаюсь создать некоторое Условное форматирование во время выполнения (huzzah) для надстройки (double huzzah) и обнаружил, что, по-видимому, некоторые функции не могут использоваться, как в обычном листе. (Я просто получаю недопустимую ошибку вызова процедуры 5 при попытке создать CF, ссылающуюся на функцию VBA, которую я мог бы вызвать в ячейке, даже если она находится в надстройке, а не в книге; я могу создать CF fine со встроенной функцией.) Самое ясное подтверждение, которое я нашел для этого здесь, но это на самом деле не объясняет, в чем проблема; это эзотерическая часть, хотелось бы услышать больше о том, что я могу ожидать с этим.
резина встречает дорогу часть: можно ли избежать VBA и использовать ряд Excel-только, встроенный функции для проверки того, содержит ли данная ячейка константу (т. е. значение, введенное пользователем), формулу (т. е. какой-то расчет, логическую операцию и т. д.-- в значительной степени начинается с=) или ссылки (т. е. ссылка на ячейку в другом листе или в другой книге)? Я знаю, что Excel имеет это определение на кончиках пальцев; свидетель использования и скорости GoTo / Special. Как Я добраться до него?
заранее спасибо за вашу помощь.
3 ответов
Я не думаю, что вы можете избежать 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 на листе.
по завершении остановите запись и просмотрите записанный макрос.
Я не знаю никаких других функций для выбора по типу ячейки, но я просто новичок, поэтому он может быть там очень легко и не быть известным мне.