Учитывая дату, как я могу получить день недели (например, "понедельник") в ячейку в Excel?
9 ответов
Простой пример:
A1 ячейка: 08.01.2009
Ячейка B1: = TEXT(WEEKDAY(A1), "dddd")
Для данной даты будет напечатан соответствующий день.
Это то, что вы хотели?
Ответ, приведенный выше, работает только по счастливой случайности, потому что Excel считает, что 01.01.1900 было воскресеньем *, и по умолчанию Excel использует первый день недели в качестве функции недели.
То, что вы на самом деле вычисляете в этом методе, это день недели как число, затем форматирование его как дня на основе этого числа, интерпретируемого как дата. Например, если ваша дата 1/2/2003 и вы используете функцию WEEKDAY, это приводит к 7 (= суббота). Когда вы затем форматируете это как "dddd", вы фактически получаете название дня 7-го дня в Excel с момента его "эпохи", то есть 1/19/1900, что является субботой *. Эта формула сломается, если кто-то откроет ее, выбрав опцию для использования системы дат 1904 года, поскольку 01.01.1904 было не воскресенье, а пятница. (да, я знаю, что вряд ли кто-то использует это, но вы не хотите создавать решение, которое опирается на это, не так ли?)
Вы можете сделать формулу короче, быстрее и надежнее, просто используя
=TEXT(A1,"dddd")
Конечно, вы можете просто отформатировать сами ячейки даты с помощью пользовательского формата, как уже предлагалось, в зависимости от того, действительно ли вам это нужно в отдельном столбце или нет. Я часто использую форматы даты, такие как
ddd dd mmm yyyy
например, суббота 01 февраля 2003 г., поэтому дата является явной, но также указывается название дня недели.
Использование второго столбца и функции TEXT очень важно, если вы хотите явно использовать день недели где-нибудь в почтовом слиянии (например), аналогично для таких вещей, как валюты и т.д. В Excel> Слияние Word передает фактическое базовое хранимое значение, а не версия отформатирована на экране, поэтому, независимо от формата ячейки, Word видит какое-то ужасное число. Истинное текстовое поле передается «как есть» и правильно отображается в Word.
* на самом деле это понедельник, но Excel был написан так, чтобы соответствовать неправильным датам в Lotus 1-2-3, которые рассматривали 1900 год как високосный год, когда это не так.
Другая возможность, в зависимости от того, что вы хотите сделать с датой позже, - установить формат ячейки в Custom: dddd.
Я обнаружил, что вложенные операторы IF
могут быть громоздкими, но это работает. Однако, если вы хотите сэкономить немного времени на печать, вы можете попробовать это:
=CHOOSE(WEEKDAY(A2), "Sun","Mon","Tue","Wed","Thur","Fri","Sat")
Или, если вам нужны полные имена:
=CHOOSE(WEEKDAY(A2), "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
В этом примере "A2" может быть любой ячейкой (или формулой), содержащей указанную дату. Например:
=CHOOSE(WEEKDAY(TODAY()), "Sun","Mon","Tue","Wed","Thur","Fri","Sat")
напечатал бы трехбуквенное сокращение для того, что сегодня есть.
Вы также можете локализовать ответ, используя [$ nnn] перед форматом (поэтому пользовательский код: [$ nnn] dddd; @). измените nnn с правильным языковым кодом. у меня нет списка, но почему-то английский код -409 (а мой местный -421).
Я думаю, что вы можете поэкспериментировать с форматом чисел, изменить поле языка, а затем изменить его обратно на пользовательский формат.
Ячейка A1: 08.01.2009. Ячейка B1: = A1, затем нажмите Ctrl +1 (ячейка формата), выберите вкладку номера, нажмите "Custom", затем введите "DDDD" в поле типа txtbox.
Отображает текущую дату
=TEXT(WEEKDAY(MONTH(TODAY())),"dddd")
Отображает текущую дату с требуемым обязательным текстом.
=CHOOSE(WEEKDAY(MONTH(TODAY())), "S-U-N-D-A-Y","M-O-N-D-A-Y","T-U-E-S-D-A-Y","W-E-D-N-E-S-D-A-Y","T-H-R-S-D-A-Y","F-R-I-D-A-Y","S-A-T-U-R-D-A-Y")
Ячейки формата - Дата - Тип календаря (выберите григорианский английский) - Тип (в разделе указан необходимый формат среда, 14 марта 2001 г.)
Функция WEEKDAY может использоваться в кодах Vba. Например :
Label1.Caption = WeekdayName(Weekday(TextBox1, 0), False, 0)
Название дня получено из TextBox1 в приведенном выше примере. Результат "понедельник" .
Я использовал эту функцию, когда создавал пользовательскую форму для ввода даты в активную ячейку с контекстным меню.