W jaki sposób Excel obsługuje skład funkcji?

21

Próbowałem użyć funkcji, aby uzyskać dzisiejszy dzień jako liczbę w programie Excel. Na przykład, kiedy napisałem to pytanie, powinienem uzyskać 18 $.

Próbowałem użyć:

  1. funkcja TODAY() która zwraca dzisiejszą datę w formacie daty.
  2. Day(<date>) to zwraca numer dnia <date>. To jest DAY(19/05/1984) powinien wrócić 19.

Dlatego formuła

=DAY(TODAY())

powinien dać wynik, którego chciałem.

Jednak ten zwrot 18/01/1900 (przy użyciu tej funkcji dzisiaj)

Jeśli używam

=TODAY()

w komórce A1, a następnie

=DAY(A1)

w innej komórce otrzymuję właściwy wynik.

Dlaczego DZIEŃ (DZIŚ ()) nie daje oczekiwanego wyniku?

Z mojego tła matematyki i programisty amatorskiego (w Maple, Java i niektórych Pythonie) moja kompozycja funkcji wydaje się w porządku.

Bardziej ogólnie, w jaki sposób Excel radzi sobie ze składem formuł?

Taladris
źródło
11
Prawidłowa odpowiedź brzmi „źle”.
Carl Witthoft
Obsługa pakietu Office dla funkcji programu Excel .. to nawet mówi: =DAY(TODAY()) ... Zwraca bieżący dzień miesiąca (1 - 31) ..
txtechhelp

Odpowiedzi:

40

Twoja formuła jest poprawna; to sposób, w jaki Excel formatuje komórki, co jest mylące. Na przykład, jeśli ręcznie ustawisz wartość komórki na 18 a następnie zmień format na datę, wyświetli to jako January 18, 1900.

Jeśli zmienisz format komórki z formułą na „Ogólne”, powinien wyświetlić oczekiwany wynik.

apple9321
źródło
3
Może to pomóc wyjaśnić czemu formatowanie to robi. Excel przechowuje znaczniki czasu jako „dni od 00:00:00 stycznia 0th 1900”, z godzinami, minutami i sekundami jako liczby dziesiętne dnia (południe 1 stycznia 1900 r. To „1,5”).
Carl Kevinson
A Excel będzie domyślnie formatował datę lub godzinę, gdy tylko zostanie użyta jakakolwiek wartość daty / czasu. Może to być inna komórka sformatowana w ten sposób lub funkcje podobne TODAY(). Naprawdę denerwujące, gdy używasz ich tylko w funkcjach dekompozycji i musisz zmienić formatowanie.
ratchet freak
1
Istotnie istotne: sciencemag.org/news/2016/08/… [Jeden na pięć artykułów genetycznych zawiera błędy dzięki Microsoft Excel]
Darren Ringer
@ DarrenRinger Zawsze czytałem to jako „obwinianie ich narzędzi” - kluczowy punkt bycia papierowym i pozostając czujnym . Podobnie stało się ze mną (choć nie z genetyką) i jak wszyscy myślę, że „Excel zmienił tę figurę na…”, podczas gdy powinienem sobie powiedzieć „cholera, nie wziąłem pod uwagę, że ta liczba się zmieni do ....."
Darren Bartrup-Cook
9

Myślę, że możesz być zdezorientowany myśląc, że Excel manipuluje wartościami „daty”: nie.

Jak używać dat i godzin w programie Excel

W programie Excel liczby są używane przedstawiać daty (prawdopodobnie ułamkowa liczba dni od 0-sty-1900), ale są one przechowywane i manipulowane przez Excel jako liczby. DZIŚ () jest funkcją o wartościach liczbowych, a DAY () jest funkcją z argumentu liczbowego do wyniku numerycznego.

W twoim przypadku DAY (TODAY ()) poprawnie zwróciło 18 (liczbę), którą, jak sądzę, przypisałeś do komórki sformatowanej, aby pokazać datę w krótkiej formie - tak, że 18 wyświetla się jako 18/01/1900. Ponieważ do programu Excel, gdy 18 jest interpretowane jako data, to znaczy.

Jeśli sformatujesz tę komórkę do formatu numerycznego, zobaczysz odpowiedź wyświetlaną w oczekiwany sposób, tj. 18.

Spike0xff
źródło
2

Nie ma nic złego w twojej Formule. Co chciałbym zasugerować, jeśli formuła nie daje oczekiwanego wyniku, to albo powoduje błąd, albo błędny wynik. Ponieważ nie wspomniałeś o tym, co Formuła ma, gotuj!

Tymczasem chciałbym pokazać, jakie są możliwości uzyskania wartości DAY w numerze w Excelu.

Sprawdź zrzut ekranu poniżej.

Get Day in Number

Uwaga:

Data jest w Komórka E166 . Druga kolumna F ma wyniki i 3. kolumna G pokazuje Formułę, której użyłem.

Możesz również użyć funkcji TEKST, aby uzyskać wartość Dnia jako Dane tekstowe.

Wartość to CZERWONY Kolor ma Niestandardowy format komórki DD, można zastosować na komórce (S), aby wyświetlić tylko wartości dnia daty (S).

Uwaga, Zaproponowałem ci wszystkie możliwości, ponieważ wspomniałeś, że zasadniczo nie jesteś użytkownikiem programu Excel.

Mam nadzieję, że to pomoże, nie zapomnij opublikować BŁĘDU, który podał twój Formula.

Rajesh S
źródło
1

Twoja formuła jest poprawnie skomponowana. Nieoczekiwany wynik wynika z tego, jak różne typy danych są przechowywane przez Excel.

Istnieją dwa podobne systemy używane przez program Excel do przechowywania dat na podstawie ustawienia poziomu skoroszytu.

System daty 1900

W systemie daty 1900 pierwszy obsługiwany dzień to 1 stycznia 1900 r. Po wprowadzeniu daty data jest konwertowana na numer seryjny, który reprezentuje liczbę dni, które upłynęły od 1 stycznia 1900 r. Na przykład, jeśli wprowadź 5 lipca 1998, Excel konwertuje datę na numer seryjny 35981.

Domyślnie program Microsoft Excel dla systemu Windows używa systemu daty 1900. System daty 1900 umożliwia lepszą kompatybilność między programem Excel a innymi programami do obsługi arkuszy kalkulacyjnych, takimi jak Lotus 1-2-3, które są zaprojektowane do pracy w systemie MS-DOS lub Microsoft Windows.

System daty 1904

W systemie daty 1904 pierwszy obsługiwany dzień to 1 stycznia 1904 r. Po wprowadzeniu daty data jest konwertowana na numer seryjny, który reprezentuje liczbę dni, które upłynęły od 1 stycznia 1904 r. Na przykład, jeśli wprowadź 5 lipca 1998, Excel konwertuje datę na numer seryjny 34519.

Domyślnie program Microsoft Excel dla komputerów Macintosh używa systemu daty 1904. Ze względu na konstrukcję wczesnych komputerów Macintosh daty sprzed 1 stycznia 1904 r. Nie były obsługiwane. Ten projekt miał zapobiec problemom związanym z faktem, że rok 1900 nie był rokiem przestępnym. Jeśli przełączysz się na system daty 1900, Excel dla komputerów Macintosh obsługuje daty już od 1 stycznia 1900 roku.

Te fragmenty pochodzą z: https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

Numer seryjny to prosta liczba uruchomień liczby dat od 1 stycznia 1900 r., W tym fikcyjna data 29 lutego 1900 r. Funkcję DZIEŃ można jednak dodatkowo traktować jako funkcję konwersji typu danych. To trwa numer seryjny daty jako wejście i zwraca liczba całkowita jako wyjście. W twoim przykładzie, jeśli pomyślimy 18 jako reprezentujący datę szeregową i licząc 18 dni do przodu od 1 stycznia 1900 roku, kończymy na 18 stycznia 1900 roku.

Prostą poprawką na froncie jest zmiana formatu komórki na coś innego Numer lub Generał . Dzięki temu program Excel wyświetli go jako liczbę całkowitą, zamiast próbować interpretować go jako numer seryjny daty. Z tyłu wszystko jest dobre. Wynik całkowity może być użyty w dowolnej innej formule i zachowuje się poprawnie.

Jako przykład, powiedzmy, że chcieliśmy stworzyć formułę warunkową, która poinformowałaby nas, czy 15-ty minął w bieżącym miesiącu. Możemy to zrobić za pomocą:

=IF(DAY(TODAY())>15,"The 15th has passed","It is not yet the 15th")

Znacznie trudniej byłoby osiągnąć ten sam rezultat, używając daty seryjnej, więc funkcja DAY zwracająca liczbę całkowitą staje się bardziej użyteczna w kontekście typowych przypadków użycia programu Excel.

Skoddie
źródło