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


17

Есть ли у кого-нибудь особый совет (не являющийся предпочтительным для VBA), чтобы систематически сообщать, имеет ли ячейка жестко закодированное значение или это производная формула?

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


Помогает ли режим «Показать формулы» (Ctrl + `)?
sblair

Это так, но я бы не стал считать это "систематическим" - требует, чтобы я убрал вручную все промежуточные строки.
YGA

Ответы:


8

Используйте условное форматирование. Выберите опцию «Использовать формулу, чтобы определить, какие ячейки форматировать» и введите «= NOT (Cellhasformula)». Это отформатирует все, что жестко закодировано.


8
Так что это был не полный ответ, но на самом деле это довольно элегантно. Полный ответ: j-walk.com/ss/excel/usertips/tip045.htm Ключ в том, что вам сначала нужно создать имя (через Формулы -> Диспетчер имен) под названием «Cellhasformula», которое «относится к» мистическая формула = GET.CELL (48, INDIRECT ("rc", FALSE)). Как говорится в ссылке, в формуле используется GET.CELL, который написан на языке макросов XLM (предшественник VBA) и не может использоваться непосредственно на рабочем листе. Аргумент «48» заставляет GET.CELL возвращать «True», если ячейка имеет формулу. INDIRECT в основном создает ссылку на каждую ячейку в выбранном диапазоне.
YGA

Я отредактировал ответ, чтобы включить эти детали. Спасибо @YGA
Алена

15

Выберите нужные ячейки, нажмите Ctrl+, Gа затем выберите, Specialчтобы открыть следующее диалоговое окно:

Перейти к специальному диалоговому окну

Затем укажите желаемый тип ячеек и щелкните, OKи останутся выбранными только те типы ячеек.



3
=iferror(Formulatext(cell),"Not Formula")

или показать только формулы:

=iferror(Formulatext(cell),"")

Для тех, кто использует LibreOffice Calc вместо Excel, замените formulatext () на формулу ().
fixer1234

2

Два других метода

  1. Используйте картографический инструмент, такой как мой Mappit! надстройка (которая может быть запущена как доверенная надстройка)
  2. Вы можете использовать очень полезный обходной путь XLM / Range Names, который предлагает в реальном времени раскрашивать жестко запрограммированные ячейки, формулы, связанные ячейки и т. Д. Для развертывания в отличие от VBA не требуются знания программирования.

1

Я знаю, что вы сказали, что предпочитаете не VBA, но если у вас нет других решений, у объекта Range есть свойство HasFormula.

Возвращает: True, если все ячейки в диапазоне содержат формулы; False, если ни одна из ячеек в диапазоне не содержит формулы; в противном случае

Источник: http://msdn.microsoft.com/en-us/library/bb208626%28v=office.12%29.aspx


1

Если вы хотите сохранить файл Excel в формате книги без макросов, вам следует избегать как VBA, так и макросов (т.е. подходы XL4 / XLM, предложенные в других ответах). В этом ответе я предположил, что файл Excel не содержит макросов.

Если вы используете MS-Excel 2013, вы можете использовать:

=ISFORMULA(reference)

Если вы используете более старые версии MS-Excel (например, 2010, 2007), нет истинной функции, чтобы определить, содержит ли ячейка формулу. Однако вы можете приблизить его, используя:

=IF(OR(ISBLANK(reference);CELL("prefix";reference)<>"");FALSE;IF(CELL("type";reference)="l";TRUE;"MAYBE"))

Функция выше возвращает:

  • TRUE для ячеек, содержащих формулу, которая приводит к строковым данным.
  • ЛОЖЬ для ячеек, содержащих строковый литерал или пустой.
  • «МОЖЕТ БЫТЬ» для ячеек, содержащих логическое значение, число или дату, независимо от того, является ли это значение буквальным или результатом формулы.

1

Прошло далеко от первоначальной даты, но, если она кому-то пригодится, мне удалось обойти это, выделив диапазон ячеек, затем с помощью Replace (Ctrl + H), установив для него значение «Искать в» «Формулы» и заменить на равно =с апострофом-равным'=

Это выявило все формулы, но, очевидно, также преобразовало бы такие вещи, как если бы $ C $ 1 содержался =if($A1=$B1,"Match","Different")в'=if($A1'=$B1,"Match","Different")

Обратите внимание на A1'=B1середину формулы, которая может быть проблематичной, но все же означает, что вы можете увидеть формулы, хотя и непрагматично. Можно использовать функцию SUBSTITUTE, чтобы вернуть ее обратно, так что $ D $ 1 содержит =SUBSTITUTE(C1,"'=","="), затем просто скопировать в Блокнот и вставить обратно в $ E $ 1.

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


1
Function is_formula(c As Range) As Boolean
  is_formula = Left(c.Formula, 1) = "="
End Function

Можете ли вы добавить краткое объяснение, чтобы рассказать нам, что здесь происходит? :)
bertieb

Просто вставьте его в модуль VBA, хотя теперь я понимаю, что OP не хотел VBA. Но в любом случае, именно поэтому я использую.
Джордж Скелтон

Это не совсем объяснение
bertieb
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.