Mam długą formułę o następującej strukturze:
=IF(!X!<>0,!X!+A1,"")
gdzie ! X! to bardzo długa formuła.
Czy istnieje rozwiązanie pozwalające uniknąć powtarzania! X! dwa razy? Potrzebuję go z dwóch powodów:
- Aby formuła była czytelna dla użytkownika arkusza
- Aby skrócić czas procesu
Doceniam każdą pomoc.
Dzięki, Dio
To reduce the process time
to oczywiście musisz gdzieś zapisać wynik, w przeciwnym razie Excel ponownie przeliczy wartość, gdy warunek się spełni. Podział jest również bardzo kosztowną operacjąOdpowiedzi:
Innym podejściem jest użycie podwójnej inwersji :
Jeśli really_long_formula ma wartość 0 , dostaniesz dzielenie przez zero, a
IFERROR()
będzie go złapać!Należy pamiętać, że zwykłym (i najlepszym) sposobem spełnienia tego wymogu jest użycie komórki pomocniczej.
źródło
1/1/x
kilkakrotnie w programie Excel 100 000 liczb losowych i tylko 1,4% czasu występował błąd zaokrąglania. Maksymalny błąd względny, jaki kiedykolwiek znalazłem, wynosił 1,6e-16, co właściwie jest zerowe. Co ciekawe, liczby całkowite nigdy nie wyświetlały błędów zaokrąglania (przetestowano kilka zakresów od 0 do 1e14). Tak więc na tę odpowiedź można się skrzywić z punktu widzenia czystości / czystości, ale nie z praktycznego punktu widzenia obliczeń.Oczywistą odpowiedzią jest umieszczenie formuły w komórce roboczej, z dala od głównego arkusza. Na przykład, jeśli używasz
H1
, ustaw na:Twoja formuła staje się następnie:
Jest to typowe dla tego, co można zrobić w każdym innym języku programowania.
źródło
1/(1/x)
nie zawsze jest dokładnie taka sama jakx
), szczególnie jeśli masz do czynienia z danymi liczbowymi całkowitymi. Nie ma również zastosowania bardziej ogólnie (np. Sprawdzanie wartości mniejszej niż zero). (Komentarz skrzyżowany z odpowiedzią @ LưuVĩnhPhúc pod przyjętą odpowiedzią.)Czy naprawdę potrzebujesz wyniku
""
w fałszywym przypadku? Jeśli potrzebujesz tylko komórki, aby wyglądała pusto (np. Nie będziesz używać czegoś takiego=ISNUMBER()
na niej później), możesz użyć formatowania warunkowego, aby ukryć zawartość w fałszywym przypadku.Format warunkowy zastosowany do komórki, aby nic nie wyświetlał , jest formatem niestandardowym
""
, takim jak ten (jest w języku portugalskim, ale masz pomysł):Formuła w komórce będzie, zgodnie z oczekiwaniami, po prostu
=!X!+A1
.Formuła formatowania warunkowego mogłaby być
=!X!=0
, ale wymusiłoby to ponowne obliczenie!X!
, którego nie chcesz (twój „punkt 2”). Lepiej jest wykorzystać samą komórkę za pomocą=B1=A1
(zakładając, że nasza komórka to B1 ) - to by oznaczało!X! = 0
.Nawet jeśli rzeczywiście potrzebujesz zawartości komórki
""
, zwykle można wprowadzić niewielkie zmiany w arkuszu, aby można było zastosować to podejście. Jeśli tak jest, zostaw komentarz opisujący sytuację.źródło
Jeśli nie możesz dodać kolumny pomocnika , dlaczego nie dodać całego arkusza? Ma to kilka zalet:
=IF(X<>0,X+A1,"")
D5
.helper!D5
w głównym arkuszu.Wady, które widzę to:
sheetname!D5
zamiast tak jakD5
.Biorąc pod uwagę zalety i wady, myślę, że w wielu przypadkach jest to dobre rozwiązanie. Istnieją sytuacje, w których nie jest to optymalne, choć w tej chwili nie mogę o tym myśleć.
źródło
opcją jeszcze nie zasugerowaną jest utworzenie funkcji zdefiniowanej przez użytkownika. Musisz włączyć kartę Deweloper na pasku menu (google it) i utworzyć moduł.
Następnie możesz zrobić na pasku formuły
UWAGA: Staje się teraz plikiem .xlsx (z makrami) i może wymagać dodatkowych uprawnień w sieci firmowej, ponieważ makra mogą być wykorzystywane do szkodliwych celów, a niektóre filtry poczty e-mail je blokują. Funkcje są nieudokumentowane, więc będziesz musiał podać notatki o tym, co robią twoje funkcje i uważam, że przydatne jest wywoływanie wszystkich moich funkcji udf_xxxxx, aby było jasne, że nie jest to funkcja wbudowana
Istnieją również inne GOTCHA z UDF. Zobacz ten link, aby uzyskać kilka dobrych wskazówek http://www.decisionmodels.com/calcsecretsj.htm
źródło