Страницы: 1
RSS
сколько дней в году считает эксел?, формула вычисления заданной даты определённое количество лет и дней назад
 
Почему:
15.05.2025 - 10*365 = 18.05.2015 ?
15.05.2025 - 15.05.1925 = 36525 (365*10+25) ?
15.05.2925 - 15.05.1925 = 365243 (365*1000+243) ?

1. сколько дней в году по мнению Эксел?

2. По какой формуле корректно вычислить заданную дату определённое количество лет и дней назад?
Например: 15 мая 2025 г 100 лет назад минус 1 день должно получиться 14 мая 1925 г!!!
Экселу, похоже, не справиться  этой задачей!

3. Каким образом выполнять операции  датами до 1900 года?
 
Цитата
shegal написал:
Почему:15.05.2025 - 10*365 = 18.05.2015 ?
по тому что он знает о висакосных годах
Цитата
shegal написал:
15.05.2025 - 15.05.1925 = 36525 (365*10+25) ?
100 а не 10 лет и там аж 25 дней в високосных году набегает.
Цитата
shegal написал:
1. сколько дней в году по мнению Эксел?
ровно столько сколько в календаре
Цитата
shegal написал:
2. По какой формуле корректно вычислить заданную дату определённое количество лет и дней назад? Например: 15 мая 2025 г 100 лет назад минус 1 день должно получиться 14 мая 1925 г!!! Экселу, похоже, не справиться  этой задачей!
вы на испуг excel не берите

=EDATE(A8;-100*12)-1

Цитата
shegal написал:
3. Каким образом выполнять операции  датами до 1900 года?
а вот тут надо включать фантазию и приводить к тому что работает ибо старт от 1900 и 01.01.1900 = 1 и отрицательных дат нет.
По вопросам из тем форума, личку не читаю.
 
Цитата
shegal написал:
Например: 15 мая 2025 г 100 лет назад минус 1 день должно получиться 14 мая 1925 г!!!
Код
=ДАТАМЕС("15.05.2025";-100*12)-1

с привязкой к ячейке:
Код
=ДАТАМЕС(A1;-100*12)-1

или
Код
=ДАТА(ГОД(A1)-100;МЕСЯЦ(A1);ДЕНЬ(A1))-1

Цитата
shegal написал:
Каким образом выполнять операции  датами до 1900 года?
Excel не может работать с датами до 1900 года, эти расчеты можно перевести в VBA, где возможно работать с отрицательными (до 1900 года) датами, а также корректно учитывается, что в 1900 году 365 дней, а не 366
 
Цитата
MCH написал:
=ДАТА(ГОД(A1)-100;МЕСЯЦ(A1);ДЕНЬ(A1))-1
Тезка, вопрос спорный в правильности ибо для
29.02.2024 и 99 лет и 1 день имеем или 28 или 27. но как минимум две формулы, эта и ДАТАМЕС, выдадут два разных результата. хотя =EDATE(A1-1;-99*12) даст тоже 28 . Мне это напоминает Задорновский 9й пустой вагон . "Все были тоже нормальные и знали что 9й идет после восьмого, а не перед 10м".
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
1. сколько дней в году по мнению Эксел? ровно столько сколько в календаре
спасибо! А -12 дней 1918 г, видимо, не учитывается.
 
Цитата
shegal написал:
сколько дней в году по мнению Эксел?
- достаточно знать что в году 12 месяцев.
Т.е. можно от текущего месяца всегда получить его индекс по-экселевски (от 1900-го года), и от этого числа высчитывать сдвиг куда угодно в месяцах или годах. Если далее нужен сдвиг ещё и в днях - это можно добавить, ориентируясь на первый день высчитанного месяца и текущий день.
 
Цитата
shegal написал:
А -12 дней 1918 г, видимо, не учитывается.
тогда нужно указывать в каком календаре ибо летоисчисление разнится.
По вопросам из тем форума, личку не читаю.
 
1. При смещении на месяц назад от даты
A21=31.05.1993
ДАТА(ГОД(A21);МЕСЯЦ(A21)-1;ДЕНЬ(A21)) = 01.05.1993

Дата 31 мая месяц назад. Какая формула позволяет получить дату 30 апреля?
Как избежать переброски 31 дня в разряд месяца из 30 дней?

Задача: Известно что возраст ребенка в мае 1 мес.
Когда он мог родиться?
Ответ от 2 марта (это не ошибка!) до 30 апреля!
А какой формулой вычитать верхнюю границу этого диапазона, несмотря на то что в мае 31 день?

2.
Цитата
написал:
shegal  написал:Каким образом выполнять операции  датами до 1900 года?Excel не может работать с датами до 1900 года, эти расчеты можно перевести в VBA, где возможно работать с отрицательными (до 1900 года) датами, а также корректно учитывается, что в 1900 году 365 дней, а не 366
А VBA учитывает календарь до 1900г?

3. Есть ли какие-либо формулы, учитывающие сдвиг календаря в России 31 янв на 13 фев  1918 г?
 
Цитата
shegal написал:
1. ...Какая формула позволяет получить дату 30 апреля?Как избежать переброски 31 дня в разряд месяца из 30 дней
=ДАТАМЕС(A21; -1)
Изменено: DAB - 11.10.2025 01:23:05
 
Цитата
написал:
=ДАТАМЕС(A21; -1)
Тогда вторая задача.
Известно что возраст ребенка в июне составляет 1 полный мес.
Когда он мог родиться?
Ответ от 2 апреля до 31 мая!
А какой формулой вычитать верхнюю границу этого диапазона, несмотря на то что в июне 30 дней?

Какая м.б. формула для общего случая?
 
Цитата
shegal написал:
Тогда вторая задача.
У вас хотелки всё увеличиваются и увеличиваются.
:D
А, что конкретно нужно - непонятно.
Код
=КОНМЕСЯЦА(A1;-1)
 
Цитата
написал:
У вас хотелки всё увеличиваются и увеличиваются.  А, что конкретно нужно - непонятно.
Я же сформулировал задачу.
Вычисление календарного интервала возможного рождения по возрасту на заданный месяц (в общем виде, для любого месяца).
И более сложный вариант - по заданному периоду или дате регистрации возраста.

Вычисление нижней границы - задача решена.
А с верхней проблема.
Изменено: shegal - 11.10.2025 11:34:07
 
shegal, что-то вы себе накручиваете, по-моему )
 
Если дата рождения 1 июня
Нижняя граница
=ДАТАМЕС(A1; -2) + 1
При дате 01.06.2025 вернёт 02.04.2025
Верхняя граница
=КОНМЕСЯЦА(A1; -1)
При дате 01.06.2025 вернёт 31.05.2025
 
для офис 2016 скорректировала код
Изменено: Ma_Ri - 24.10.2025 18:00:41
Ma_Ri ≠ Мария
 
Цитата
написал:
Здравствуйте!дата до 01.01.1900 не может быть распознана как дата в Excel, поэтому выведены даты в текстовом формате pqКод ? 12345678910let    f=(x)=>((a)=>Date.AddDays(Date.AddMonths(Date.AddYears(a,x[Years]??0),x[Months]??0),x[Days]??0))     (Date.From(x[Date_start])),    from = Excel.CurrentWorkbook(){[Name="Dates"]}[Content],    rem=Table.RemoveColumns(from,"Date"),    add=Table.AddColumn(rem,"Date",f),    tr=Table.TransformColumns(add,{{"Date_start",(x)=>Date.ToText(Date.From(x),"dd.MM.yyyy")},                                   {"Date",(x)=>Date.ToText(x,"dd.MM.yyyy")}})in    tr

Прикрепленные файлы
Даты.xlsx  (17.01 КБ)
Чудесно! Посчитано всё идеально. Но куда вставить этот код в Эксел, и можно ли вставить например на html страницу? И как сделать это работающим в Эксел?
 
Здравствуйте!
Так как были озвучены общие вопросы в теме
Цитата
shegal, написал: По какой формуле корректно вычислить заданную дату определённое количество лет и дней назад? Каким образом выполнять операции  датами до 1900 года?
То я представила тестовый вариант, как можно вычислить дату, отстоящую на определенное количество лет, месяцев и дней назад, с помощью Power Query.
Цитата
shegal, написал: куда вставить этот код в Эксел
Этот код уже есть в приложенном файле в редакторе Power Query и он работает в Excel в предложенном варианте и Вы можете проверить его работу...
Заполняете данными таблицу:
в столбце "Date_start" вносите дату,
в столбцах "Days","Months","Years" заполняете количество лет, месяцев, дней (положительные значения - для будущих периодов, отрицательные значения - для прошлых). Необязательно вводить 1 месяц и 15 дней, можно указать в графе общее количество дней, например, 45 (дней).
В столбце "Date" будет выведен результат выполнения кода после обновления Запроса.
Как обновить запрос:
Перейдите на вкладку Данные (Data) в ленте инструментов.
Нажмите на кнопку Обновить всё (Refresh All).
Цитата
shegal, написал: можно ли вставить например на html страницу?
Ответить на этот вопрос не могу (в этом вопросе некомпетентна), но на форуме много профессионалов, они могут дать профессиональную консультацию по этому вопросу.
Цитата
shegal, написал: как сделать это работающим в Эксел?
Power Query позволяет импортировать данные с HTML-страницы, распарсить, при необходимости — преобразовать или очистить данные и использовать данные в Excel, в том числе используя код. Но чтобы Вам помогли в Вашем вопросе, используя VBA (этот вариант тоже предлагался) или Power Query, надо видеть исходные данные (пример) и сформулировать (показать на примере) ожидаемый результат. И скорее всего решение будет другим, так как решение зависит от конкретных данных и целей.
Ma_Ri ≠ Мария
 
Цитата
написал:
В столбце "Date" будет выведен результат выполнения кода после обновления Запроса. Как обновить запрос:Перейдите на вкладку Данные (Data) в ленте инструментов.Нажмите на кнопку Обновить всё (Refresh All)
Почему-то не работает, как ни бился. Exel 2016 32 разр. При нажатии "Обновить всё" говорит: "Элемент с тем же ключом уже был добавлен", и ничего не меняется.
Подключения к книге: Имя-   Запрос - Dates
Может надо как-то подключить какой-то источник?
Изменено: shegal - 14.10.2025 21:06:32
 
Цитата
написал:
для офис 2016 скорректировала код
Ура! Работает! Огромное спасибо.
Но только в вашем файле. Таблица, вставленная в другой файл при обновлении - сбой инициализации источника данных!
Можно ли редактировать эту таблицу. Я не о данных, а например как-то её изменять, переименовывать столбцы?
Изменено: shegal - 25.10.2025 12:42:55
 
Код
=ДАТА(ГОД(A1)-100; МЕСЯЦ(A1); ДЕНЬ(A1)) - 1

Код
Function DateBefore1900(ByVal baseDate As Date, ByVal YearsBack As Integer, Optional ByVal DaysBack As Integer = 0) As String    Dim resultDate As Date    resultDate = DateAdd("d", -DaysBack, DateAdd("yyyy", -YearsBack, baseDate))    DateBefore1900 = Format(resultDate, "dd.mm.yyyy")End Function
Код
=DateBefore1900("15.05.2025"; 100; 1)
 
Здравствуйте!
Цитата
Ma_Ri,  написал:
надо видеть исходные данные (пример) и сформулировать (показать на примере) ожидаемый результат. И скорее всего решение будет другим, так как решение зависит от конкретных данных и целей.
Вы упорно игнорируете мои советы. Вместо того, чтобы представить свой пример с исходными данными и результатом какой Вы хотели бы получить, Вы сейчас будете пытаться тестовую таблицу прикрутить к своим данным. Хорошо если структура таблицы постоянная и у Вас получится изменить код без проблем…Для реальной задачи я не думаю, что это хороший выбор.
Данные могут поступать в разных формах и размерах, и каждый раз пытаться подгонять их под одну таблицу неудобно и неэффективно. Постоянная адаптация источника данных под заданную схему станет для Вас затратной и утомительной задачей.
Намного эффективнее будет загружать исходные данные и с помощью кода автоматически их обрабатывать. Это будет и быстрее, и точнее, исключите ошибки ручного переформатирования всей таблицы.
Цитата
shegal,  написал: Работает...Но только в вашем файле.
Вот нисколько не сомневалась, что так будет.
Я думаю, Вы очень хорошо подумаете… Я ни в коем случае не устраняюсь, я сделаю все, что в моих силах... )
Рекомендации по Вашим вопросам в приложенном файле. Будет непонятно - пишите.
Всего доброго! )
Ma_Ri ≠ Мария
Страницы: 1
Читают тему
Наверх