Data de formatação condicional do Excel antes do fim de semana / feriado

1

Estou tentando criar um calendário de folha de pagamento. Somos pagos duas vezes por mês, no dia 15 e no último dia do mês, mas nunca em um fim de semana ou sexta-feira. Se o dia 15 ou o último dia cair em um fim de semana, o dia do pagamento será transferido para a sexta-feira anterior. Se o dia 15 ou o último dia cair na Sexta-feira Santa, o dia do pagamento será transferido para a quinta-feira anterior.

Como você escreveria uma função de formatação condicional para sombrear as células do dia de pagamento e fazê-lo durante o ano inteiro? O conjunto de dados são as datas de um calendário do ano inteiro em uma planilha. Estou usando o Excel 2016.

Michael Harris
fonte
(1) Você é pago duas vezes por mês, todos os meses, certo? E nunca em um fim de semana (sempre mudou para a sexta-feira anterior), certo? A redação inicial da pergunta não deixou isso totalmente claro. (2) Qual versão do Excel você está usando? Por favor, não responda nos comentários; edite sua pergunta para torná-la mais clara e completa. Adicione a marca para a versão do Excel que você está usando.
G-Man

Respostas:

1

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)datedateWEEKDAYEOMONTH

=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 F1para 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 F1estiver 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).

G-Man
fonte
Eu tentei a fórmula, mas não funcionou. Vou separá-lo e ver se não consigo descobrir o que está errado. Isso também vai me ajudar a entender melhor.
Michael Harris
Isso funcionou. Obrigado. Ajudou a formatar meus números como data!
Michael Harris
Eu descobri uma complicação. Temos a Sexta-Feira Santa, que será no dia 14 de abril. Portanto, receberemos o pagamento na quinta-feira, 13 de abril. Suponho que o mesmo possa acontecer no final do mês, já que a Sexta-feira Santa (Páscoa) se aproxima. Eu tenho uma fórmula que calcula a data da Sexta-feira Santa. Existe uma maneira de levar isso em conta?
Michael Harris