Página 1 de 1
Calculo de dias uteis
Enviado: 21 Abr 2022 às 14:37
por JCabral
Boa tarde
Gostaria de ter a vossa ajuda para o calculo de dias uteis, por cada mês, atendendo a determinados intervalos de datas.
Assim, na aba "BD" tenho AUSENCIAS e respetiva data [AL], CAMPANHAS e respetivas datas [AP:AQ] e AVARIAS e respetivas datas [AX:AY].
Na aba "CALCULOS" tenho os cálculos que preciso (os valores que estão lá são os expectáveis em função dos dados em BD) ou seja os dias uteis por mês, atendendo também à lista de feriados.
De notar que nenhum dos ranges em BD são fixos, ou seja, conforme vou tendo AUSENCIAS/CAMPANHAS/AVARIAS vou acrescentado os intervalos de datas.
A solução para as CAMPANHAS e AVARIAS será a mesma.
NOTA: Tenho preferência por cálculos sem colunas auxiliares
Obrigado
Jorge
Re: Calculo de dias uteis
Enviado: 21 Abr 2022 às 18:53
por babdallas
Re: Calculo de dias uteis
Enviado: 22 Abr 2022 às 08:05
por osvaldomp
Olá, @JCabral .
Experimente esta matricial em CALCULOS!TE3 e arraste para a direita.
=SOMA(SE(DIATRABALHO(+BD!$AL2:$AL5-1;1;FERIADOS!$C2:$C18)=BD!$AL2:$AL5;SE(MÊS(BD!$AL2:$AL5)=TE2;1)))
A outra fórmula é bem mais trabalhosa, vou tentar algo aqui.
Re: Calculo de dias uteis
Enviado: 22 Abr 2022 às 09:59
por JCabral
@babdallas,
Obrigado pela sua solução, mas a minha duvida não é relativamente ao calculo dos dias trabalhados na aba BD, mas sim calcular os valores que estão na aba CALCULOS, ou seja o total de dias uteis nas ausências e por mês, o total de dias uteis nas campanhas e por mês e o mesmo para as avarias.
@osvaldomp,
Obrigado pela sua solução, funciona na perfeição para o caso especifico, mas é possível ter essa formula mais genérica, é que como refiro os intervalos não são fixos. Não sei se com ranges nomeados funcionará já que quando o processo começa todos esses valores são zero ou seja não tenho ausências, não tenho campanhas e não tenho avarias, por isso não sei se um range nomeado se não tiver elementos não dá erro?
Fico a aguardar a outra solução, obrigado
Editado:
Estive a testar e assim resolve a questão do intervalo ser dinâmico:
Código: Selecionar todos=SOMA(SE(+DIATRABALHO(DESLOCAMENTO(BD!$AL$2;;;CONTAR.VAL(BD!$AL:$AL)-1;1)-1;1;FERIADOS!$C2:$C18)=DESLOCAMENTO(BD!$AL$2;;;CONTAR.VAL(BD!$AL:$AL)-1;1);SE(MÊS(DESLOCAMENTO(BD!$AL$2;;;CONTAR.VAL(BD!$AL:$AL)-1;1))=TE2;1)))
Re: Calculo de dias uteis
Enviado: 24 Abr 2022 às 15:48
por babdallas
Usei objeto tabela para facilitar. Considerei que não é Office 365, pois se fosse a complexidade diminuiria um pouco.
TOTAL DIAS UTEIS AUSENCIAS
TOTAL DIAS UTEIS CAMPANHAS
Código: Selecionar todos=SOMARPRODUTO((TRANSPOR(LIN(INDIRETO(DATA.VALOR(TT2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(TT2&"/"&$TD$2);0))))>=tbDiasUteis[DATAi])*(TRANSPOR(LIN(INDIRETO(DATA.VALOR(TT2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(TT2&"/"&$TD$2);0))))<=tbDiasUteis[DATAf])*(DIA.DA.SEMANA(TRANSPOR(LIN(INDIRETO(DATA.VALOR(TT2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(TT2&"/"&$TD$2);0))));11)<6)*(1-CONT.SE(FERIADOS!$C$2:$C$18;TRANSPOR(LIN(INDIRETO(DATA.VALOR(TT2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(TT2&"/"&$TD$2);0)))))))
TOTAL DIAS UTEIS AVARIAS
Código: Selecionar todos=SOMARPRODUTO((TRANSPOR(LIN(INDIRETO(DATA.VALOR(UI2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(UI2&"/"&$TD$2);0))))>=tbAvarias[DATAi])*(TRANSPOR(LIN(INDIRETO(DATA.VALOR(UI2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(UI2&"/"&$TD$2);0))))<=tbAvarias[DATAf])*(DIA.DA.SEMANA(TRANSPOR(LIN(INDIRETO(DATA.VALOR(UI2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(UI2&"/"&$TD$2);0))));11)<6)*(1-CONT.SE(FERIADOS!$C$2:$C$18;TRANSPOR(LIN(INDIRETO(DATA.VALOR(UI2&"/"&$TD$2)&":"&FIMMÊS(DATA.VALOR(UI2&"/"&$TD$2);0)))))))
Re: Calculo de dias uteis
Enviado: 24 Abr 2022 às 21:07
por JCabral
@babdallas,
Obrigado pela sua solução.
O Office é o 365, quando diz que a complexidade diminuiria um pouco, está a dizer que não teria que usar o objecto tabela? Seria fantástico.
Se for possível gostaria dessa solução do Office365.
Obrigado
Jorge
Re: Calculo de dias uteis
Enviado: 25 Abr 2022 às 22:43
por babdallas
TOTAL DIAS UTEIS CAMPANHAS
Código: Selecionar todos=LET(dtIni;DATA.VALOR(TT2&"/"&$TD$2);dtFim;FIMMÊS(DATA.VALOR(TT2&"/"&$TD$2);0);ListaDatas;TRANSPOR(SEQUÊNCIA(dtFim-dtIni+1;;dtIni));SOMARPRODUTO((ListaDatas>=tbDiasUteis[DATAi])*(ListaDatas<=tbDiasUteis[DATAf])*(DIA.DA.SEMANA(ListaDatas;11)<6)*(1-CONT.SE(FERIADOS!$C$2:$C$18;ListaDatas))))
TOTAL DIAS UTEIS AVARIAS
Código: Selecionar todos=LET(dtIni;DATA.VALOR(UI2&"/"&$TD$2);dtFim;FIMMÊS(DATA.VALOR(UI2&"/"&$TD$2);0);ListaDatas;TRANSPOR(SEQUÊNCIA(dtFim-dtIni+1;;dtIni));SOMARPRODUTO((ListaDatas>=tbAvarias[DATAi])*(ListaDatas<=tbAvarias[DATAf])*(DIA.DA.SEMANA(ListaDatas;11)<6)*(1-CONT.SE(FERIADOS!$C$2:$C$18;ListaDatas))))
Re: Calculo de dias uteis
Enviado: 26 Abr 2022 às 06:41
por JCabral
@babdallas,
Muito obrigado, vou tentar com essa solução ver se dá para não trabalhar com o objeto tabela.
Re: Calculo de dias uteis
Enviado: 26 Abr 2022 às 17:06
por babdallas
Qual o motivo de não usar o objeto Tabela?
Re: Calculo de dias uteis
Enviado: 27 Abr 2022 às 06:33
por JCabral
babdallas escreveu: ↑26 Abr 2022 às 17:06
Qual o motivo de não usar o objeto Tabela?
É que já tenho a ADIÇÃO, EDITAR, APAGAR dos dados feita sem ser em tabela e não queria mexer nessa parte do código.