Допущения
Ваша дата начала и месяцы - это строки в отдельных столбцах.Вы можете преобразовать их в фактические даты в столбце помощника.Данные приведены ниже для каждого изображения.
Общие сведения
Я просто выкладываю свое решение в упрощенном виде.Вы можете в свою очередь вкладывать формулы, элементы жесткого кода и т. Д. В соответствии с вашими потребностями
Обрабатывать
Преобразовать дату начала из строки в 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 условий для проверки:
- Весь период перед данным годом => 0
- Весь период после указанного года => 0
- Период начинается до указанного года и заканчивается после конца данного года => 12
- Период начинается доданный год и заканчивается в течение данного года => формула 1
- Период начинается в течение данного года и заканчивается после указанного года => формула 2
- Период начинается в течение данного года и заканчиваетсяв течение данного года = формула 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 и, при необходимости, скопируйте.
Этот процессне единственный путь, только первый, на который я пошел.У других может быть более элегантное решение.