Estou vendo uma solução simples que não requer VBA (esta é uma resposta longa para uma solução simples, pois inclui variações para cobrir várias coisas que são ambíguas na questão).
Observequeestarespostacontémváriasversõesdafórmulaparadiferentescasosdeuso.Afórmulamostradanaimageméapenasumaereflete"duração" em vez de contagem de dias, conforme mostrado no exemplo da pergunta.
Definição "Número de dias"
Existem várias maneiras de interpretar isso. Se algo começa no meio de hoje e termina no meio de amanhã, você pode considerar uma duração de um dia. Se você estiver interessado nos dias do calendário em que ocorreu, considere esses dois dias. Vou mostrar os dois casos e você pode aplicar o que é relevante para você.
Início e término são apenas datas x data / hora
Se o intervalo Iniciar e Concluir forem apenas datas, o intervalo será armazenado em unidades de dias inteiros, para que você possa usar a aritmética simples para calcular as durações. Se eles forem realmente armazenados como data / hora e você estiver exibindo apenas a parte da data, as informações de hora ocultas podem causar erros de arredondamento inesperados. Vou mostrar uma solução para os dois casos.
Soluções: base de duração
Portanto, a tarefa é determinar se qualquer parte do intervalo se enquadra no ano determinado e, em seguida, calcular a duração da parte que o faz. Essa fórmula usa os cabeçalhos de coluna do ano, portanto, ela exige uma coluna de um ano além da última data de término.
Se o intervalo Iniciar e Terminar forem apenas datas e o objetivo for "duração", a fórmula em D2 (arraste para preencher a matriz):
=IF(OR($A2>=E$1,$B2<D$1),0,MIN($B2,E$1)-MAX($A2,D$1))
Se o intervalo Iniciar e Concluir contiver informações data / hora e o objetivo for "duração", a fórmula em D2:
=IF(OR($A2>=E$1,$B2<D$1),0,DATEDIF(MAX($A2,D$1),MIN($B2,E$1),"D"))
A função DATEDIF incorporada oferece a diferença entre as datas (ignorando as informações de tempo) e você pode especificar as unidades exibidas.
Explicação
Nessas duas fórmulas, o teste IF verifica se a data de início é posterior ao final do ano atual ou se a data de término é anterior ao ano atual. Se assim for, preenche um zero.
Caso contrário, calcula a diferença de datas. Ele usa o início do ano mais tarde (continuação do intervalo de um ano anterior), ou o início do intervalo (começa em algum momento durante o ano) e o início do fim do intervalo (termina durante o ano) ou o início do ano. no próximo ano (o intervalo continua no próximo ano).
Solução: base de contagem de dias
Se o seu objetivo é contar todos os dias no intervalo como um dia inteiro, precisamos adicionar um dia à entrada do ano anterior para o intervalo. Uma maneira simples de fazer isso é com o valor booleano (true = 1, false = 0) de um teste para saber se o ano de fechamento é igual ao ano "atual": (YEAR($B2)=YEAR(D$1))
, que pode ser adicionado a uma das fórmulas acima. Usando a primeira fórmula, por exemplo:
=IF(OR($A2>=E$1,$B2<D$1),0,MIN($B2,E$1)-MAX($A2,D$1)+(YEAR($B2)=YEAR(D$1)))