Jak stwierdzić, czy komórka Excel ma formułę, czy jest zakodowana na stałe?


17

Czy ktoś ma specjalną wskazówkę (zdecydowanie nie preferowaną przez VBA), aby systematycznie informować, czy komórka ma ustaloną wartość lub czy jest formułą pochodną?

Mam do czynienia z niektórymi danymi, w których osadzone są niechlujne sumy pośrednie i próbuję sprawdzić, czy mogę oddzielić nieprzetworzone linie.


Czy pomaga tryb „Pokaż formuły” (Ctrl + `)?
sblair

Tak, ale nie uważałbym tego za „systematyczne” - wymaga ode mnie ręcznego odpalenia linii częściowych.
YGA

Odpowiedzi:


8

Użyj formatowania warunkowego. Wybierz opcję „Użyj formuły, aby określić, które komórki sformatować” i wpisz „= NOT (Cellhasformula)”. Spowoduje to sformatowanie wszystkiego, co jest zakodowane na stałe.


8
To nie była pełna odpowiedź, ale w rzeczywistości jest dość elegancka. Pełna odpowiedź znajduje się na: j-walk.com/ss/excel/usertips/tip045.htm Kluczem jest to, że najpierw musisz utworzyć nazwę (za pomocą Formuł -> Menedżer nazw) o nazwie „Cellhasformula”, która „odnosi się do” mistyczna formuła = GET.CELL (48, POŚREDNIE („rc”, FALSE)). Jak mówi link, formuła używa GET.CELL, który jest w języku makr XLM (poprzednik VBA) i nie może być używany bezpośrednio w arkuszu. Argument „48” powoduje, że GET.CELL zwraca „True”, jeśli komórka ma formułę. INDIRECT zasadniczo tworzy odwołanie do każdej komórki w wybranym zakresie.
YGA,

Zredagowałem odpowiedź, aby uwzględnić te szczegóły. Dzięki @YGA
Alain

15

Wybierz odpowiednie komórki, naciśnij Ctrl+, Ga następnie wybierz, Specialaby uzyskać następujące okno dialogowe:

Przejdź do okna dialogowego Specjalne

Następnie określ typ komórek, które chcesz i kliknij, OKa tylko te typy komórek pozostaną wybrane.



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

lub aby wyświetlić tylko formuły:

=iferror(Formulatext(cell),"")

Dla każdego, kto używa LibreOffice Calc zamiast Excela, zamień formulatext () na formułę ().
fixer1234

2

Dwie inne metody to:

  1. Użyj narzędzia do mapowania, takiego jak mój Mappit! dodatek (który można uruchomić jako zaufany dodatek)
  2. Możesz użyć bardzo przydatnego obejścia nazw XLM / zakresów, które oferuje kolorowanie na stałe zakodowanych komórek, formuł, połączonych komórek itp. Nie wymaga to żadnej wiedzy programistycznej do wdrożenia w przeciwieństwie do VBA


1

Jeśli chcesz przechowywać plik Excel w formacie skoroszytu bez makr, powinieneś unikać zarówno VBA, jak i makr (tzn. Podejścia XL4 / XLM sugerowane w innych odpowiedziach). W tej odpowiedzi założyłem, że plik Excel nie zawiera makr.

Jeśli używasz MS-Excel 2013, możesz użyć:

=ISFORMULA(reference)

Jeśli używasz starszych wersji MS-Excel (np. 2010, 2007), nie ma prawdziwej funkcji pozwalającej ustalić, czy komórka zawiera formułę. Można to jednak przybliżyć, używając:

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

Powyższa funkcja zwraca:

  • PRAWDA dla komórek zawierających formułę, która daje dane typu String.
  • FALSE dla komórek zawierających literał String lub jest pusty.
  • „MAYBE” dla komórek zawierających wartość logiczną, liczbę lub datę, bez względu na to, czy wartość ta jest dosłowna, czy wynik formuły.

1

Znacznie wcześniej niż pierwotna data, ale jeśli jest przydatna dla kogokolwiek, udało mi się obejść ten problem, wybierając zakres komórek, a następnie używając Zamień (Ctrl + H), ustawiając go na „Szukaj w” Formułach i zamień równe =z apostrofem równa się'=

Ten przyniósł wszystkie formuły, ale oczywiście również konwertować rzeczy jak gdyby $ C $ 1 zawierał =if($A1=$B1,"Match","Different")się'=if($A1'=$B1,"Match","Different")

Zwróć uwagę A1'=B1na środek formuły, który może być problematyczny, ale nadal oznacza, że ​​możesz zobaczyć formuły, choć niepragmatycznie. Można użyć funkcji SUBSTITUTE, aby zmienić to z powrotem, więc $ D $ 1 zawiera =SUBSTITUTE(C1,"'=","="), a następnie po prostu skopiuj do Notatnika i wklej z powrotem do $ E $ 1

Innym sposobem byłoby „pokazanie formuł”, ale pokazałoby to formuły dla każdej komórki, a nie tylko wybranego zakresu.


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

Czy możesz dodać krótkie wyjaśnienie, aby powiedzieć nam, co się tutaj dzieje? :)
bertieb

Po prostu włóż to do modułu VBA, chociaż zdaję sobie sprawę, że teraz OP nie chciał VBA. Ale tak czy inaczej, dlatego używam.
George Skelton,

To nie jest tak naprawdę wytłumaczenie
bertieb,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.