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.
microsoft-excel
worksheet-function
microsoft-excel-2016
Michael Harris
fonte
fonte
Respostas:
O dia de pagamento pode ser um dos oito dias possíveis:
__________
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:* Um dia útil é de segunda a sexta-feira, exceto Sexta-feira Santa .
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 sejaDAY(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.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).fonte