Здравствуйте, уперся в такую ситуацию. При определении дня недели по дате, через ДЕНЬНЕД(), если поставить тип "2", то номер дня недели покажет правильно (по-русски), а через пользовательский формат "ДДД" или "[$-FC219]ддд" название дня покажет на день меньше (по-американски). Если изменить на тип "1", тогда наоборот, номер дня на один меньше, а название дня правильно. Хочется одной функцией вынимать два параметра. Прошу помочь пояснить, спасибо.
Здравствуйте, уперся в такую ситуацию. При определении дня недели по дате, через ДЕНЬНЕД(), если поставить тип "2", то номер дня недели покажет правильно (по-русски), а через пользовательский формат "ДДД" или "[$-FC219]ддд" название дня покажет на день меньше (по-американски). Если изменить на тип "1", тогда наоборот, номер дня на один меньше, а название дня правильно. Хочется одной функцией вынимать два параметра. Прошу помочь пояснить, спасибо.Shylo
Погодите, на что именно вы накладываете формат даты?
ДЕНЬНЕД() возвращает число. Цифру. Числительное. Не какой-то день недели, а просто некое относительное число-показатель. Например "Пятый по порядку день недели, при условии, что неделя начинается с понедельника, который считается первым по порядку".
Накладывать на эту цифру формат даты (хоть ДДД, хоть ддд) - это как? Вы же в этом случае измеряете "какой день недели будет у <цифра> января 1900 года". И какой же это будет день недели, и какое отношение он имеет к вашей начальной дате, откуда вы взяли эту "цифру"? Потому что "число 1 в формате даты интерпретируется как..." и т.д.
Погодите, на что именно вы накладываете формат даты?
ДЕНЬНЕД() возвращает число. Цифру. Числительное. Не какой-то день недели, а просто некое относительное число-показатель. Например "Пятый по порядку день недели, при условии, что неделя начинается с понедельника, который считается первым по порядку".
Накладывать на эту цифру формат даты (хоть ДДД, хоть ддд) - это как? Вы же в этом случае измеряете "какой день недели будет у <цифра> января 1900 года". И какой же это будет день недели, и какое отношение он имеет к вашей начальной дате, откуда вы взяли эту "цифру"? Потому что "число 1 в формате даты интерпретируется как..." и т.д.AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Суббота, 26.08.2017, 18:05
AndreTM, Как вижу я. Функция из даты вернула цифру, которая соответствует номеру дня в неделе. При типе "2" 1 - это понедельник; 7 - это воскресенье. Но если этим же типом "2" попытаться отобразить название дня, то становится 1 это воскресенье, а не понедельник. Просмотренные темы на форуме: тут, и тут. В файле показаны расхождения, а мне не понятна причина такого несоответствия. Ведь через функцию ТЕКСТ, все отображается правильно.
AndreTM, Как вижу я. Функция из даты вернула цифру, которая соответствует номеру дня в неделе. При типе "2" 1 - это понедельник; 7 - это воскресенье. Но если этим же типом "2" попытаться отобразить название дня, то становится 1 это воскресенье, а не понедельник. Просмотренные темы на форуме: тут, и тут. В файле показаны расхождения, а мне не понятна причина такого несоответствия. Ведь через функцию ТЕКСТ, все отображается правильно.Shylo
Давайте разберемся, что у вас происходит в реальности.
Сразу же, наверное, огорошу вас известием, что в Excel нет никаких "дат". "Дата" в Excel - это число, означающее количество дней, при отсчете от 01.01.1900. А всякие минуты-секунды при этом представляются дробной частью этого числа.
Посмотрим на вашу таблицу. Столбец A содержит, по вашему, некие "даты". На самом деле - там записаны числа - 42736, 42737 и т.д. И после применения к этим числам формата "Дата" (ДД.ММ.ГГГГ) - вы и видите то, что видите. Столбец E содержит формулу с функцией ТЕКСТ() , которая в качестве параметра принимает число из столбца A, строку формата "ДДД", проделывает некие манипуляции (интерпретирует число как "дату", находит для этой даты день-месяц-год и т.д., но возвращает только наименование дня недели, причем "день недели" в этом случает соответствует настройкам локализации офиса и операционной системы. Вы видите в этом столбце текст, показывающий, как бы выглядело название дня недели в вашем компьютере в соответствующую дату.
Все остальные столбцы (B,C,D,F) содержат формулу с функцией ДЕНЬНЕД(), которая принимает число из столбца A и параметр, означающий правило интерпретации порядкового номера "названия дня недели", и возвращает эта функция некое число. В смысле что "просто число", озанчающее только "порядковый номер в некоем списке дней недели". Порядковый номер, понимаете? То есть результаты работы функции ДЕНЬНЕД() - это не "даты", и даже не названия дней недели. Конкретный возвращаемый результат зависит только от параметров самой функции ДЕНЬНЕД(), и интерпретироваться может только с учетом всех переданных этой функции параметров. А вы - накладываете на эту "циферку" некий "формат ячейки". Что в этом случае должен, по вашему, сделать формат "ДДД" или "[$-FC219]ддд"? Формату в этом случае передается просто цифра (например, 1 или 5, а можно даже число 100500 передать). Что должен сделать формат с этой цифрой? Вы налодили формат "даты" - и тогда формат ячейки преобразует эту цифру в дату (например 5 превращается в "пятое января 1900 года") и берет указанную вами часть этой даты ("пятница").
А то, что у вас "якобы совпадают результаты работы ТЕКСТ() и ДЕНЬНЕД()" при некоторых входных данных - так это просто потому, что 1 января 1900 года - понедельник. Пн = 21 августа 2017 г., ТЕКСТ(21.08.2017,"ДДД") = "Пн", ДЕНЬНЕД(21.08.2017;2) = 1, ТЕКСТ(01.01.1900;"ДДД") = "Пн" = Пн Вот только тот понедельник, что слева - это не тот понедельник, что справа. А число 1 в середине - это ни один из этих понедельников.
Вы сравниваете тёплое с мягким...
Давайте разберемся, что у вас происходит в реальности.
Сразу же, наверное, огорошу вас известием, что в Excel нет никаких "дат". "Дата" в Excel - это число, означающее количество дней, при отсчете от 01.01.1900. А всякие минуты-секунды при этом представляются дробной частью этого числа.
Посмотрим на вашу таблицу. Столбец A содержит, по вашему, некие "даты". На самом деле - там записаны числа - 42736, 42737 и т.д. И после применения к этим числам формата "Дата" (ДД.ММ.ГГГГ) - вы и видите то, что видите. Столбец E содержит формулу с функцией ТЕКСТ() , которая в качестве параметра принимает число из столбца A, строку формата "ДДД", проделывает некие манипуляции (интерпретирует число как "дату", находит для этой даты день-месяц-год и т.д., но возвращает только наименование дня недели, причем "день недели" в этом случает соответствует настройкам локализации офиса и операционной системы. Вы видите в этом столбце текст, показывающий, как бы выглядело название дня недели в вашем компьютере в соответствующую дату.
Все остальные столбцы (B,C,D,F) содержат формулу с функцией ДЕНЬНЕД(), которая принимает число из столбца A и параметр, означающий правило интерпретации порядкового номера "названия дня недели", и возвращает эта функция некое число. В смысле что "просто число", озанчающее только "порядковый номер в некоем списке дней недели". Порядковый номер, понимаете? То есть результаты работы функции ДЕНЬНЕД() - это не "даты", и даже не названия дней недели. Конкретный возвращаемый результат зависит только от параметров самой функции ДЕНЬНЕД(), и интерпретироваться может только с учетом всех переданных этой функции параметров. А вы - накладываете на эту "циферку" некий "формат ячейки". Что в этом случае должен, по вашему, сделать формат "ДДД" или "[$-FC219]ддд"? Формату в этом случае передается просто цифра (например, 1 или 5, а можно даже число 100500 передать). Что должен сделать формат с этой цифрой? Вы налодили формат "даты" - и тогда формат ячейки преобразует эту цифру в дату (например 5 превращается в "пятое января 1900 года") и берет указанную вами часть этой даты ("пятница").
А то, что у вас "якобы совпадают результаты работы ТЕКСТ() и ДЕНЬНЕД()" при некоторых входных данных - так это просто потому, что 1 января 1900 года - понедельник. Пн = 21 августа 2017 г., ТЕКСТ(21.08.2017,"ДДД") = "Пн", ДЕНЬНЕД(21.08.2017;2) = 1, ТЕКСТ(01.01.1900;"ДДД") = "Пн" = Пн Вот только тот понедельник, что слева - это не тот понедельник, что справа. А число 1 в середине - это ни один из этих понедельников.AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Суббота, 26.08.2017, 21:40
AndreTM, огромное спасибо за расширенный ликбез. Суть вопроса состоит в том, почему не совпадает номер дня недели с его названием. Система и Офисы - "ru". И попробовав Ваши примеры ДЕНЬНЕД(21.08.2017;1) = 1 у меня получилась цифра 2 (Пн), а не 1 как у Вас. Пробовал файл на двух ПК (ХР и W_7), на двух офисах (2003 и 2010), результат одинаковый. В региональных настройках копался в первую очередь, все для "РУ".
Вот только тот понедельник, что слева - это не тот понедельник, что справа. А число 1 в середине - это ни один из этих понедельников.
ничерта не понял. Большое спасибо за уделенное время.
AndreTM, огромное спасибо за расширенный ликбез. Суть вопроса состоит в том, почему не совпадает номер дня недели с его названием. Система и Офисы - "ru". И попробовав Ваши примеры ДЕНЬНЕД(21.08.2017;1) = 1 у меня получилась цифра 2 (Пн), а не 1 как у Вас. Пробовал файл на двух ПК (ХР и W_7), на двух офисах (2003 и 2010), результат одинаковый. В региональных настройках копался в первую очередь, все для "РУ".
И какая разница, какая именно цифра получилась? Вы пишете "получил цифру 2 - понедельник" или "получил цифру 1 - понедельник". Так это вы так эту цифру интерпретируете. А примнив формат "просто к этой цифре" - что именно вы хотите получить? неизвестно, что... а Excel вам прямо и отвечает, что "день недели для цифры 1 - это понедельник". Почему? Да потому что это не "первый день в неделе", а "день недели у даты 1 января 1900", который "понедельник"...
И какая разница, какая именно цифра получилась? Вы пишете "получил цифру 2 - понедельник" или "получил цифру 1 - понедельник". Так это вы так эту цифру интерпретируете. А примнив формат "просто к этой цифре" - что именно вы хотите получить? неизвестно, что... а Excel вам прямо и отвечает, что "день недели для цифры 1 - это понедельник". Почему? Да потому что это не "первый день в неделе", а "день недели у даты 1 января 1900", который "понедельник"...AndreTM