У меня есть наборы диапазонов дат, которые мне нужны для расчета общего количества дней. но обычно начало диапазона и конец приходится на середину месяца. Итак, как мне рассчитать количество дней в каждом месяце.
Затем для этих дат мне нужно рассчитать сумму денег, которую они получают, пропорционально количеству дней в месяце. (300 долларов США/дни месяца) * дни включают
Пример:
Дата 19.02.2024 - 16.06.2024
Дни, которые мне нужно вычислить:
(февраль: 11 дней)+(март: 31 день)+(апрель: 30 дней)+(май: 31 день)+(июнь: 16 дней)
Всего дней: 119 дней
Сумма, которую мне нужно рассчитать:
(Февраль: (300 долларов США/29 дней)*11 дней)+(Март: (300 долларов США/31 день)*31 день)+(Апрель: (300 долларов США/30 дней)*30 дней)+(Май: (300 долларов США/31 день)*31 день)+(Июнь : (300 долларов США/30 дней)*16 дней)
Общая выплаченная сумма: 1 173,80 долларов США.
Как мне посчитать это в Excel и возможно ли это вообще в одной ячейке?


Используйте функцию DATEDIF().
=DATEDIF(A1,B1,"D")+1
Я не уверен, что именно это вы просите, чтобы получить общую выплаченную сумму:
• Формула, используемая в ячейке B2
=LET(
_StartDate, TEXTBEFORE(A2," - "),
_EndDate, TEXTAFTER(A2," - "),
_FirstDay, EOMONTH(_StartDate,-1)+1,
_Dates, TEXT(HSTACK(SEQUENCE(_EndDate-_StartDate+1,,_StartDate),
SEQUENCE(EOMONTH(_EndDate,0)-_FirstDay,,_FirstDay)),"emmm"),
_Uniq, UNIQUE(TOCOL(_Dates,2)),
_Output, MAKEARRAY(ROWS(_Uniq),1, LAMBDA(r,c, LET(b, INDEX(_Uniq,r),
INDEX(SUM(N(b=TOCOL(TAKE(_Dates,,1),2)))*(300/SUM(N(b=TAKE(_Dates,,-1)))),c)))),
ROUND(SUM(_Output),2))
Используя GROUPBY(), если применимо, тогда:
=LET(
_StartDate, TEXTBEFORE(A2," - "),
_EndDate, TEXTAFTER(A2," - "),
_FirstDay, EOMONTH(_StartDate,-1)+1,
_Dates, TEXT(SEQUENCE(_EndDate-_StartDate+1,,_StartDate),"emmm"),
_ActualDates, TEXT(SEQUENCE(EOMONTH(_EndDate,0)-_FirstDay,,_FirstDay),"emmm"),
ROUND(SUM(DROP(GROUPBY(_Dates,_Dates,ROWS,,0)*
(300/GROUPBY(_ActualDates,_ActualDates,ROWS,,0)),,1)),2))
Эта формула принимает три части диапазона дат. Начало, конец и промежуточные месяцы. Работает и на старых версиях.
=SUM((EOMONTH(B44,0)-B44+1)*300/(EOMONTH(B44,0)-EOMONTH(B44,-1)),
IF((YEAR(C44)-YEAR(B44))*12+MONTH(C44)-MONTH(B44)>1,300*((YEAR(C44)-YEAR(B44))*12+MONTH(C44)-MONTH(B44)-1)),
(C44-EOMONTH(C44,-1))*300/(EOMONTH(C44,0)-EOMONTH(C44,-1)))
IF проверяет, есть ли в заданном диапазоне какой-либо полный месяц, и если да, то рассчитывает его значение со ставкой 300 долларов в месяц.
Эта формула работает! но мне все еще нужно понять, как он рассчитывается, для моего будущего понимания. Итак, я понимаю, что из этого следует ((включаемые дни месяца) * 300)/дни месяца), __ тогда мне непонятна часть IF. как вы рассчитываете проверить >1300. а какой номер 1300?
Запятая является знаком разделителя функции. В некоторых языках это может быть десятичное число (как на скриншоте, где разделителем является точка с запятой), но в формуле это разделитель IF между критериями и возвращаемым значением, когда TRUE
Если у вас есть 365 и каждая дата находится в отдельной ячейке с именем first и last, а сумма за месяц находится в ячейке с именем amt, то:
=LET(
fullMonths, DATEDIF(
DATE(YEAR(first), MONTH(first), 1),
DATE(YEAR(last), MONTH(last) - 1, 1),
"m"
),
firstFx, (DAY(EOMONTH(first, 0)) - DAY(first) + 1) /
DAY(EOMONTH(first, 0)),
lastFx, DAY(last) / DAY(EOMONTH(last, 0)),
SUM(fullMonths, firstFx, lastFx) * amt
)
Если ваш диапазон дат находится в одной ячейке, вы можете включить функцию TEXTSPLIT для анализа фрагментов.
Если у вас более ранняя версия Excel, вы можете использовать тот же алгоритм с более сложной для понимания формулой:
=(
DATEDIF(
DATE(YEAR(first), MONTH(first), 1),
DATE(YEAR(last), MONTH(last) - 1, 1),
"m"
) +
(DAY(EOMONTH(first, 0)) - DAY(first) + 1) /
DAY(EOMONTH(first, 0)) +
DAY(last) / DAY(EOMONTH(last, 0))
) * 300
Обратите внимание, что вы можете факторизовать свое выражение: сумма является общим коэффициентом, поэтому вам просто нужно умножить 300 на количество полных месяцев, а затем добавить пропорциональные месяцы (февраль и июнь в вашем примере), умноженные на 300.
Зная это, более короткая формула будет такой:
=((DATEDIF(EOMONTH(B1,0)+1,DATE(YEAR(C1),MONTH(C1),1),"m"))*A1)+((((DAY(EOMONTH(B1,0)))-DAY(B1)+1)/(DAY(EOMONTH(B1,0))))*A1)+((DAY(C1)/DAY(EOMONTH(C1,0)))*A1)
простая для понимания формула и она работает. однако возникнет ошибка в ситуации, когда начало и конец приходятся на один и тот же месяц. Например: 1 апреля 2024 г. – 15 апреля 2024 г.
Как это поможет при пропорциональном распределении расходов по различным месяцам?