Версия для печати

Как узнать есть ли формула в ячейке?

Что умеет 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 скачиваний)



Поддержать автора сайта
Поделиться ссылкой
  1. Юзер
    4 Февраль 2012 в 18:42 | #1

    однозначно, Эксель — это не для меня, но всё равно спасибо за полезные советы!

  2. Лена
    7 Май 2012 в 12:56 | #2

    Дмитрий,объясните пож-ста,может я чего-то не понимаю,но разве формулы и функции выделенной ячейки не отображаются в поле функции под панелью инструментов?

  3. 9 Май 2012 в 12:28 | #3

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

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум