=TODAY
date A date B date C
Мне нужна формула, которая вычислит дату B.
То есть, если между датой A и =TODAY прошло больше года и если дата C пуста, то дата B будет такой же, как =TODAY, в противном случае дата будет такой же, как дата A плюс один год.
Мне удалось создать такую формулу:
=IF(AND(DATEDIF(date A,$date $B,"Y") >= 1, ISBLANK(date C)), TODAY(), DATE(YEAR(date A)+1,MONTH(date A),DAY(date A)))
но это, похоже, не работает, когда разница между датой А и СЕГОДНЯ составляет более одного года.
решение1
Примечание: я нахожусь в Великобритании, поэтому в моем ответе используются даты в формате дд/мм/гггг.
Скажем:
date a
находится в ячейке A1
date b
находится в ячейке B1
и
date c
находится в ячейкеC1
Допустим, вы вставляете 31/02/2015
в ячейку A1
и вставляете =IF(AND(DATEDIF(A1,TODAY(),"Y")>=1,ISBLANK(C1)),TODAY(),DATE(YEAR(A1)+1,MONTH(A1),DAY(A1)))
в ячейку A2
формула работает для меня.
Как сказал @Máté Juhász в комментариях, проблема возникает, когда у вас есть что-то в ячейке C1
. Если это так, то к дате в A1 будет добавлен 1 год, что сделает ее 31/02/2016 вместо сегодняшней даты 02/09/2016.
Ячейка C1
может показаться вам пустой, если вы поместите в нее пробел, но Excel будет видеть пробел как данные. Поэтому для безопасности, если вы хотите проверить, что ячейка воспринимается человеком как пустая, включив пробел как пустую, вам нужно изменить логическую проверку, чтобы =OR(ISBLANK(C1),C1=" ")
сделать окончательную формулу в ячейке B1
как=IF(AND(DATEDIF(A1,TODAY(),"Y")>=1,OR(ISBLANK(C1),C1=" ")),TODAY(),DATE(YEAR(A1)+1,MONTH(A1),DAY(A1)))
Альтернативой =OR(ISBLANK(C1),C1=" ")
, которая не имеет никаких функциональных отличий, за исключением сокращения длины формулы на 6 символов, является использование альтернативы, предложенной в комментарии, которая будет =OR(C1="",C1=" ")
создавать альтернативную окончательную формулу в ячейке B1
как=IF(AND(DATEDIF(A1,TODAY(),"Y")>=1,OR(C1="",C1=" ")),TODAY(),DATE(YEAR(A1)+1,MONTH(A1),DAY(A1)))