O dia de pagamento pode ser um dos oito dias possíveis:
- o dia 12 (se o dia 13 for sexta-feira santa, porque os dias 13, 14 e 15 formam um fim de semana de três dias)
- dia 13 (se for o último dia útil da semana * )
- dia 14 (se for o último dia útil da semana * )
- dia 15 (se for um dia útil * )
- o penúltimo dia do mês (se o penúltimo dia for Sexta-feira Santa, porque os últimos três dias do mês formarão um fim de semana de três dias)
- o terceiro ao último dia do mês (se for o último dia útil da semana * )
- o penúltimo dia do mês (se for o último dia útil da semana * )
- o último dia do mês (se for um dia útil * )
__________
* Um dia útil é de segunda a sexta-feira,
exceto Sexta-feira Santa .
No Excel 2013,
retorna 1 se for segunda-feira,…, 7 se for domingo. Isso é indicado como sendo uma extensão recente; se não funcionar para você, diga-o e podemos contornar isso. Usando essa função, e a função que nos diz o último dia do mês, podemos converter a lista acima para a seguinte fórmula:
WEEKDAY(date, 2)
date
date
WEEKDAY
EOMONTH
=AND(OR(AND(DAY(A1)=12,A1+1=F$1), AND(DAY(A1)>=13,DAY(A1)<=14,OR(WEEKDAY(A1,2)=5,A1+1=F$1)), AND(DAY(A1)=15,WEEKDAY(A1,2)<=5), AND(EOMONTH(A1,0)-A1=3,A1+1=F$1), AND(EOMONTH(A1,0)-A1<=2,EOMONTH(A1,0)-A1>=1,OR(WEEKDAY(A1,2)=5,A1+1=F$1)), AND(A1=EOMONTH(A1,0),WEEKDAY(A1,2)<=5)), A1<>F$1)
onde a data da Sexta-feira Santa (14 de abril de 2017) é (manualmente) inserida na célula F1
.
Esta fórmula pode ser grosseiramente dividida em
=AND(
OR( AND(something1), AND(something2), AND(something3),
AND(something4), AND(something5), AND(something6)
),
something7
)
Onde
something1
é DAY(A1)=12,A1+1=F$1
, que testa o primeiro marcador (quinta-feira, 12º dia do mês, quando o próximo dia é sexta-feira).
something2
ou seja DAY(A1)>=13,DAY(A1)<=14,OR(WEEKDAY(A1,2)=5,A1+1=F$1)
, que testa a segunda e a terceira balas (13 ou 14 na sexta-feira ou no dia (quinta-feira) antes da sexta-feira).
something3
é DAY(A1)=15,WEEKDAY(A1,2)<=5)
, que testa a quarta bala (a 15 de um dia da semana).
something4
é EOMONTH(A1,0)-A1=3,A1+1=F$1
, que testa o quinto marcador (do penúltimo dia do mês, quando o próximo dia é sexta-feira).
something5
é EOMONTH(A1,0)-A1<=2,EOMONTH(A1,0)-A1>=1,OR(WEEKDAY(A1,2)=5,A1+1=F$1)
, que testa os sexto e sétimo marcadores (segundo ou terceiro ao último dia do mês, na sexta-feira ou no dia anterior à sexta-feira santa).
something6
é A1=EOMONTH(A1,0),WEEKDAY(A1,2)<=5
, que testa o oitavo marcador (último dia do mês, em um dia da semana).
something7
é A1<>F$1
, que testa hoje a Sexta-feira Santa e a exclui. Sem esse teste, destacaríamos (cor / sombra) quinta-feira, 13 de abril, e sexta - feira, 14 de abril.
Para testar isso, convém definir F1
para cada uma das seguintes datas para 2017 e verificar se os dias corretos estão realçados.
- Sexta-feira Santa real: 14 de abril, que obriga a quinta-feira, 13 de abril.
- 13 de janeiro, que forçaria o dia de pagamento na quinta-feira, 12 de janeiro.
- 15 de setembro (ou 15 de dezembro), que forçaria o dia de pagamento na quinta-feira, 14 de setembro.
- Sexta-feira, 28 de abril, o que forçaria o dia de pagamento a ser na quinta-feira, 27 de abril.
- 29 de setembro, que forçaria o dia de pagamento na quinta-feira, 28 de setembro.
- 31 de março (ou 30 de junho), que forçaria o dia de pagamento a ser o segundo ao último dia desse mês.
Nota: Se F1
estiver definido como uma data que não seja sexta-feira, serão exibidos resultados incorretos (por exemplo, mais de dois dias de pagamento em um mês).