Сколько дней между двумя датами составляет определенный месяц?

Используя формулы Excel, в ячейке, я хочу рассчитать, сколько дней, которые >= startdate и <= enddate находятся в определенном месяце.

Пример startdate: 2014-01-15

enddate: 2015-04-02

месяц: january

результат формулы: 17 january days in 2014 + 31 january days in 2015 = 48

Возможно ли это сделать?

Мой подход: использование формулы массива, которая создает массив дат с даты начала до начала + 9999. Для этого он добавляет 0, 1, 2, … 9999 дней к дате начала до 9999 дней. Затем подсчитайте, сколько из этих дней находится в нужном месяце и ниже или равно конечной дате.

введите описание изображения здесь

Формула в E2

 =SUMPRODUCT((MONTH(A2+ROW($A$1:$A$10000)-1)=D2)*((A2+ROW($A$1:$A$10000)-1)<=B2)) 

Обратите внимание, что это не работает, если между датой начала и конечной датой существует более 9999 дней.

Это вариант первого ответа, используя INDIRECT для создания массива дат между датой начала и окончания (F1): –

 =SUMPRODUCT(--(MONTH(A2-1+ROW(INDIRECT("1:"&(B2-A2+1))))=D2)) 

Как уже упоминалось Акселем Рихтером, вы также можете использовать INDEX для создания массива дат (F2): –

 =SUMPRODUCT(--(MONTH(A2-1+ROW($A$1:INDEX($A:$A,B2-A2+1)))=D2)) 

Преимущество использования этих формул состоит в том, что нет никаких ограничений на разницу между датой начала и окончания.

Недостатком использования INDIRECT является то, что он изменчив и генерирует приглашение «SAVE», когда файл закрыт.

Недостатком метода INDEX является то, что он уязвим для вставки / удаления строк.

введите описание изображения здесь

это лучше всего достигается с помощью специальной формулы. вам нужно войти в VBA (щелкните правой кнопкой мыши на имени листа), вставьте модуль (щелкните правой кнопкой мыши на имени листа в панели VBA> вставить> модуль) и вставьте этот код:

 Function DaysInMonthBetween(startDate As Date, endDate As Date, chosenMonth As Integer) Dim startYear, startMonth, startDay As Integer Dim endYear, endMonth, endDay As Integer Dim currentDate As Date Dim sumDays, daysInMonth As Integer sumDays = 0 startYear = Year(startDate) startMonth = month(startDate) startDay = Day(startDate) endYear = Year(endDate) endMonth = month(endDate) endDay = Day(endDate) If (startMonth > chosenMonth) Then startYear = startYear + 1 If (endMonth < chosenMonth) Then endYear = endYear - 1 If (endYear >= startYear) Then For i = startYear To endYear currentDate = DateSerial(i, chosenMonth, 1) daysInMonth = Day(Application.WorksheetFunction.EoMonth(currentDate, 0)) sumDays = sumDays + daysInMonth Next If (startMonth = chosenMonth) Then sumDays = sumDays - (startDay - 1) If (endMonth = chosenMonth) Then currentDate = DateSerial(endYear, endMonth, 1) daysInMonth = Day(Application.WorksheetFunction.EoMonth(currentDate, 0)) sumDays = sumDays - (daysInMonth - endDay) End If End If DaysInMonthBetween = sumDays End Function 

вы можете использовать эту настраиваемую формулу с =DaysInMonthBetween(startDate, endDate, chosenMonth) набрав =DaysInMonthBetween(startDate, endDate, chosenMonth) , поэтому, если ваша дата начала и дата окончания указаны в A1 и A2 соответственно, вы должны ввести =DaysInMonthBetween(A1,A2,1) чтобы получить результат за январь, =DaysInMonthBetween(A1,A2,2) за февраль и т. д.

  • Групповые поля в диапазоны - Excel
  • Ошибка IErrorInfo.GetDescription с ошибкой E_FAIL (0x80004005) при загрузке листа excel
  • Как найти идентификатор родителя в предполагаемой иерархии
  • Запись из R в шаблон в excel при сохранении форматирования
  • Excel: использование выпадающего списка для запроса таблицы данных в рабочей книге
  • Вычитание значений строк независимо от адреса столбца
  • Поиск совпадения в значениях столбцов и суммирование значений
  • Есть ли способ найти ближайший соседний сегмент линии по обе стороны от линии в excel?
  • создать новый лист с помощью макроса в excel 2007
  • Преобразование временной строки из команды unix time, например 10m20.5s, в формат времени в excel
  • Создание таблицы в Excel
  • Давайте будем гением компьютера.