Рассчитать перекрытие даты в месяцах - PullRequest
0 голосов
/ 30 апреля 2020

Нужна небольшая помощь, если вы будете так любезны.

В MS Excel я пытаюсь определить количество месяцев, в течение которых студент посещает университет, исходя из академии c год

Например, студент поступает и заканчивает университет в следующие даты:

  • 23/06/2018 - 23/06/2020

и Есть несколько академических c лет, которые студент посещает:

  • 01/08/2017 - 31/07/2018

  • 01 / 08/2018 - 31/07/2019

  • 01/08/2018 - 31/07/2020

Я хочу рассчитать, сколько месяцев, которые студент посещает в каждой академии c год:

  • 01/08/2017 - 31/07/2018 (1 месяц)

  • 01/08/2018 - 31/07/2019 (12 месяцев)

  • 01/08/2018 - 31/07/2020 (11 месяцев)

Мне удалось рассчитать дни, используя эту функцию:

=MAX(MIN(term_end_date, student_,end_date) - MAX(term_start_date, student_start_date)+1,0)

Но мне нужны месяцы, если это возможно.

Заранее благодарны за помощь.

enter image description here

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Пожалуйста, попробуйте этот UDF.

Function MonthsOverlap(Rng As Range, _
                       AccYear As Integer) As String
    ' 016

    Const Ststart As Long = 1               ' index of array 'Study'
    Const Stend As Long = 2                 ' index of array 'Study'

    Dim Fun As Integer                      ' Months of overlap
    Dim YearStart As Date, YearEnd As Date
    Dim Study As Variant

    YearStart = DateSerial(AccYear, 8, 1)   ' modify year and day as required
    YearEnd = DateAdd("yyyy", 1, YearStart)
    Study = Rng.Value                       ' Rng columns must be adjacent

    With Application.WorksheetFunction
        If Study(1, Ststart) <= YearStart Then
            Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), .Min(Study(1, Stend), YearEnd))
        ElseIf Study(1, Ststart) <= YearEnd Then
             Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), YearEnd)
        End If
        Fun = .Max(Fun, 0)
    End With

    MonthsOverlap = Fun & " month" & IIf(Fun = 1, "", "s")
End Function

Я проверил его на листе, подобном изображенному ниже. Пожалуйста, соблюдайте формулу в панели формул. enter image description here

Как видите, функция возвращает неожиданные результаты за 2017 и 2019 годы. Я не думаю, что они ошибаются. В формуле используется только округление месяцев, отличное от вашей системы. Я думаю, что функция может быть изменена, чтобы приспособить ваше правило, как только вы сделаете это известным. Между тем это следует правилу Microsoft, которое, честно говоря, я тоже не знаю. Тем не менее, обратите внимание, что общее время обучения составляет 24 месяца, что является правильным и, следовательно, достаточным, вместе со взглядами на часы, чтобы убедить меня позволить хорошему быть достаточно хорошим на сегодня: -)

0 голосов
/ 02 мая 2020

Я нашел решение, которое работает удовольствие:

enter image description here

Спасибо за вашу помощь всем.

0 голосов
/ 30 апреля 2020

= DATEDIF (A1, B1, «M») даст количество целых месяцев между двумя датами (т. Е. Исключая начальный и конечный месяцы), где даты вводятся в A1 и B1. «М» означает, что вы хотите, чтобы информация сообщалась в месяцах.

Для получения точного результата больше попробуйте: = (DATEDIF (A1, B1, “D”) / 365) * 12. Если даты охватывают несколько лет, включая високосные, - попробуйте делится на 365,25 против 365.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...