Как узнать есть ли формула в ячейке?
Что умеет Excel
Определить наличие формулы в ячейке можно двумя способами.
Способ первый — создание именованной формулы(без применения VBA — Visual Basic for Application)
- Выделяете ячейку B1
- жметe Ctrl+F3(вызов диспетчера имен) Если по каким-то причинам Ctrl+F3 не работает, то Диспетчер имен можно вызвать через меню:
Excel 2003:Вставка-Имя-Присвоить.
Excel 2007:вкладка Формулы-Диспетчер имен.
- в поле имя пишите — HasFormula(или любое понравившееся Вам название, но не противоречащее правилам создания имен в Excel)
- в поле Диапазон вписываете такую формулу: =ПОЛУЧИТЬ.ЯЧЕЙКУ(48;Лист1!A1)
Теперь, записав в ячейку В1: =HasFormula Вы узнаете, есть ли в ячейке А1 формула или же там константа.
Так же при помощи функций листа макросов можно получить и сам текст формулы. Для этого достаточно поменять формулу в поле Диапазон на такую:
=ПОЛУЧИТЬ.ФОРМУЛУ(Лист1!A1)
Недостатки данного метода — Вы привязаны к «левостороннему» определению формулы. Т.е. таким методом Вы можете узнать есть ли формула(или какая формула) в ячейке, расположенной слева от ячейки с именованной формулой. Для того, чтобы «узнать формулу справа» именованная формула должна выглядеть так: =ПОЛУЧИТЬ.ЯЧЕЙКУ(48;Лист1!C1);для работы формулы обязательно должны быть разрешены макросы. Чтобы не зависеть от левостороннего или правостороннего определения можно закрепить столбцы(выделяете ссылку на ячейку - А1 и нажимаете F4. Ссылка будет меняться, появятся знаки доллара $. Если знак стоит перед именем столбца - $А1 — то смещение по столбцу происходить не будет. Так же со строками)
Для ПОЛУЧИТЬ.ФОРМУЛУ есть еще недостаток: формула будет отображаться в стиле ссылок R1C1, что не совсем удобно..Для работы такой функции должны быть разрешены макросы.
Способ второй — создание пользовательской функции.
- Открываете редактор VBA
- Вставляете стандартный модуль(про модули см.здесь)
- В модуль копируете следующий код:
Function IsFormula(ByVal Cell As Range, Optional ShowFormula As Boolean = False) 'Application.Volatile True If ShowFormula Then If Cell.HasFormula Then IsFormula = "Формула: " & IIf(Cell.HasArray, "{" & Cell.FormulaLocal & "}", Cell.FormulaLocal) Else IsFormula = "Значение: " & Cell.Value End If Else IsFormula = Cell.HasFormula End If End Function
Function IsFormula(ByVal Cell As Range, Optional ShowFormula As Boolean = False) 'Application.Volatile True If ShowFormula Then If Cell.HasFormula Then IsFormula = "Формула: " & IIf(Cell.HasArray, "{" & Cell.FormulaLocal & "}", Cell.FormulaLocal) Else IsFormula = "Значение: " & Cell.Value End If Else IsFormula = Cell.HasFormula End If End Function
Теперь в ячейку записываете =IsFormula(A2).
Данная функция имеет два аргумента:
- Cell — ссылка на проверяемую ячейку;
- ShowFormula — необязательный аргумент. Если присвоено значение ЛОЖЬ или 0 или опущен(не указан) — то функция вернет значение ИСТИНА или ЛОЖЬ(в зависимости от наличия или отсутствия формулы в ячейке). Если присвоено значение ИСТИНА или 1, то в функция вернет не просто ИСТИНА или ЛОЖЬ, а еще и текст самой формулы.
Формулу можно так же найти в диспетчере функций в категории Определенные пользователем — IsFormula.
Чтобы при изменении формулы в целевой ячейке сразу же изменялось её отображение в ячейке с данной функцией необходимо убрать апостраф(‘) перед Application.Volatile True (в файле-примере это уже сделано).
Недостатки данного метода — для работы функции обязательно должны быть разрешены макросы.
Tips_All_HasFormula.xls (31,0 KiB, 1 976 скачиваний)

8954

однозначно, Эксель — это не для меня, но всё равно спасибо за полезные советы!
Дмитрий,объясните пож-ста,может я чего-то не понимаю,но разве формулы и функции выделенной ячейки не отображаются в поле функции под панелью инструментов?
Лена, конечно, отображается! Но статья писалась для случаев, когда необходимо быстро узнать в массиве ячеек наличие формулы.
Представьте столбец из 12000 ячеек. Формулы в 3-5 ячейках из всех. В каких — Вы не знаете. Что будет проще: воспользоваться моим спобосом или проглядеть глазками каждую ячейку?