Как рассчитать количество месяцев между двумя датами в конкретном году - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть потенциально случайный набор дат начала и сроков в Excel / Google Sheets.

Example - considering 2019 as the year in question
January 2017, 24 months
January 2019, 12 months
April 2019, 12 months
May 2020, 7 months

Мне нужно рассчитать количество месяцев каждого семестра в конкретном году.

Example answers - number of months in given timeframe that are in 2019
February 2017, 24 months A: 1 months
January 2019, 12 months A: 12 months
April 2019, 12 months A: 9 months
May 2020, 7 months A: 0 months

Вычислить даты начала и окончания с помощью DATEDIFF очень просто.Без невероятного количества запутанной логики я не смог бы определить, сколько месяцев выпадает в данном году.

Я что-то упускаю из ряда вложенных условных выражений, чтобы определить, находится ли начальный месяц в указанном году?

Получение условных операторов, которые слишком глубоко вложены, не является идеальным, потому что есть дополнительные слои, которые необходимо добавить, например, если термин будет обновлен и т. Д., Которые добавляют дополнительные сложности.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Это предложение сработало хорошо.Ниже то, что я сделал с несколькими дополнительными модификациями.

Нужно ли было добавить термин, который был автоматически продлен, или ожидалось, что он закончится.Однако с вашими предложениями это была простая модификация.

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

Год проверки находится в R2 - в данном случае 2019 Дата начала - столбец H Срок действия - столбец I Статус обновления -в столбце K (если задано значение yes, предполагается, что термин будет продолжаться бесконечно). Конечная дата - столбец P В столбцах Q

Q2 указаны месяцы от данного срока, которые встречаются в течение рассматриваемого года. Используемая строкав примере это 208 (извините)

формула в столбце P проверяет, установлено ли для продления значение Y или N. Если N использует указанный термин конец.Если Y устанавливает срок окончания на 12/31 рассматриваемого года.

=IF(K208="N",EOMONTH(H208,I208-1),DATE($Q$2,12,31))

Обратите внимание на одно небольшое изменение, указывающее, что конечной датой является конец месяца, поскольку меня интересуют полные месяцы, а не дата.

Примеры Срок, начинающийся с 2/2019 в течение одного месяца, будет длиться с 1 февраля по 28 февраля 2009 года (не с 1 февраля по 1 марта 2009 года) Срок, начинающийся с 2 сентября 2009 годав течение трех месяцев будет длиться с 1 февраля по 30 апреля 2009 года (а не с 1 февраля по 5 марта 2009 года)

Затем я по существу использовал формулу Forward Ed для расчетаколичество месяцев, о которых я заботился, основываясь на логике, которую он описал.

=IF(OR(P208<DATE($Q$2,1,1),H208>DATE($Q$2,12,31)),0,IF(AND(H208<=DATE($Q$2,1,1),P208>=DATE($Q$2,12,31)),12,IF(H208<=DATE($Q$2,1,1),MONTH(P208),IF(P208>=DATE($Q$2,12,31),12-MONTH(H208)+1,MONTH(P208)-MONTH(H208)+1))))
0 голосов
/ 19 февраля 2019

Допущения

Ваша дата начала и месяцы - это строки в отдельных столбцах.Вы можете преобразовать их в фактические даты в столбце помощника.Данные приведены ниже для каждого изображения.

Общие сведения

Я просто выкладываю свое решение в упрощенном виде.Вы можете в свою очередь вкладывать формулы, элементы жесткого кода и т. Д. В соответствии с вашими потребностями

Обрабатывать

Преобразовать дату начала из строки в A6 в фактическую дату Excel и поместить ее в D6.Я просто использовал следующую формулу, но существуют другие методы, которые могут потребоваться в зависимости от настроек системы.

=DATEVALUE(A6)

Рассчитать дату окончания на основе смещения месяца и поместить ее в E6.Чтобы добиться этого, я использовал следующую формулу, отличную от DATEDIFF, которую вы, похоже, понимаете:

=EOMONTH(D6,LEFT(B6,FIND(" ",B6)-1)-2)+1

Поместите указанный год, который вы ищете, в обозначенную ячейку.В этом случае я выбрал F1.

На основе целого числа, помещенного в F1, генерируется фактическая дата для первого месяца года и для последнего месяца года.Я поместил их в F2 и F3 соответственно.

=DATE(F1,1,1)

=DATE(F1,12,1)

Note:  These can easily be embedded in formulas but can be cleaner and make formulas easier to read.

Далее у вас есть 6 условий для проверки:

  1. Весь период перед данным годом => 0
  2. Весь период после указанного года => 0
  3. Период начинается до указанного года и заканчивается после конца данного года => 12
  4. Период начинается доданный год и заканчивается в течение данного года => формула 1
  5. Период начинается в течение данного года и заканчивается после указанного года => формула 2
  6. Период начинается в течение данного года и заканчиваетсяв течение данного года = формула 3

Я собираюсь подойти к этому с помощью вложенного IF и объясню его поэтапно.Оба условия 1 и 2 приводят к 0. Поэтому проверьте, является ли любое условие истинным, и верните 0, если так:

=IF(OR(E6<$F$2,D6>$F$3),0,

Обратите внимание, что формула не завершена.Ложная часть if не была предоставлена, и это где мы можем проверить условие 3.

=IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,

Таким образом, это проверяет, охватывают ли даты начала и окончания текущий год.Примечание. Я использую <= и> =, потому что если дата начала периода равна началу текущего года и / или дата окончания равна концу текущего года, то это тот же результат, что позволяет сэкономить при прохождении математического вычисления позже.Опять ложная сторона не была предоставлена.Чтобы заполнить эту часть, вам необходимо проверить условие 4.

Проверьте, не предшествует ли дата начала периода указанному году.Вам не нужно проверять дату окончания одновременно, потому что, если дата окончания наступает после того, как вы знаете, что она уже была обнаружена вашей предыдущей проверкой условия 3.Если это так, месяц конечной даты скажет вам, сколько месяцев было в данном году.Месяц окончания расчета периода - это формула 1

=IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,IF(D6<=$F$2,MONTH(E6),

Теперь вы при следующей проверке условий уже знаете, что дата начала периода - после начала года, в противном случае она уже была бы пойманаиз предыдущих проверок.вам нужно определить, подходит ли тогда конец периода к концу года, и рассчитать номер месяца от начала периода до конца года, который является формулой 2.

=IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,IF(D6<=$F$2,MONTH(E6),IF(E6>=$F$3,12-MONTH(D6)+1,

Естьникаких дальнейших условий для проверки, поскольку вы уловили все возможности, кроме одного, конечного условия.Все, что нужно определить, это формула 3 и закрыть все скобки для ваших вложенных IF.

=IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,IF(D6<=$F$2,MONTH(E6),IF(E6>=$F$3,12-MONTH(D6)+1,MONTH(E6)-MONTH(D6)+1))))

Поместите приведенную выше формулу в G6 и, при необходимости, скопируйте.

Этот процессне единственный путь, только первый, на который я пошел.У других может быть более элегантное решение.

POC

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