Як сказати, чи є в комірці Excel формула чи жорстко кодується?


17

Хтось має спеціальну пораду (не бажана VBA), щоб систематично повідомити, чи має клітинка значення з твердим кодом або це похідна формула?

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


Чи допомагає режим "Показати формули" (Ctrl + `)?
sblair

Так, але я б не вважав це "систематичним" - вимагає, щоб я відривав підточні лінії.
YGA

Відповіді:


8

Використовуйте умовне форматування. Виберіть "Використовувати формулу, щоб визначити, які клітинки відформатувати" параметр та тип "= НЕ (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! addin (який можна запустити як надійний аддін)
  2. Ви можете використовувати дуже корисний спосіб вирішення імен XLM / Range Names, який пропонує фарбування в режимі реального часу кольорових комірок, формул, пов'язаних комірок тощо. Для розгортання цього не потрібні знання з програмування на відміну від VBA

1

Я знаю, ви сказали, що не VBA надає перевагу, але якщо ви не маєте інших рішень, об’єкт Range має властивість HasFormula.

Повертає: Вірно, якщо всі комірки в діапазоні містять формули; Неправильно, якщо жодна з комірок у діапазоні не містить формули; null інакше.

Джерело: 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"))

Наведена вище функція повертає:

  • ІСТИНА для комірок, що містять формулу, яка призводить до даних String.
  • FALSE для комірок, що містять лінійку String або порожній.
  • "МОЖЕ" для комірок, що містять булеве число, число чи дату, незалежно від того, чи є це значення буквальним чи результатом формули.

1

Минуло початкову дату, але якщо вона комусь корисна, мені вдалося обійти це, вибравши діапазон комірок, потім скориставшись Замінити (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, хоча я розумію, що зараз ОП не хотів VBA. Але все одно, саме тому я і використовую.
Джордж Скелтон

Це насправді не пояснення
bertieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.