Calcular data e hor...
 
Notifications
Clear all

Calcular data e hora util

11 Posts
3 Usuários
0 Reactions
3,463 Visualizações
(@nemesistms)
Posts: 12
Active Member
Topic starter
 

Senhores, Boa tarde!

Estou a quase 2 semanas tentando montar uma planilha em minha empresa mas estou travado(Estou quase sendo mandado embora kkk :cry: ), se puderem me ajudar agradeco muito.

Eu preciso montar uma planilha onde eu coloco uma data e hora ( dd/mm/aaaa hh:mm) e a formula adiciona neste periodo um prazo para atendimento do chamado, por exemplo classificamos em 4 pesos (1º - 1 hora depois / 2 º 5 horas e etc) isso tudo em um periodo de 08:00 as 18:00 de seg a sex e sabado 08:00 12:00, eu até consegui fazer calcular de segunda a sexta mas quando chega em fim de semanas e feriados eu travei.

segue em anexo o que consegui fazer.

Obs. so consegui fazer separando a data e a hora, se puderem fazer junto seria otimo, mas se nao der tudo bem. :D
Obs2. Não encontrei no forum algo que me ajude... estou buscando na net a alguns dias algo assim

Se puderem ajudar eu agradeceria muito. :D

 
Postado : 27/09/2016 2:35 pm
(@rilust)
Posts: 387
Reputable Member
 

prezado
algumas duvidas?
1) o que vc quer e calcular o prazo de termino é isso?
2) considera-se o horário de almoço ou não?

horarios
2 a sexta 08 as 18
sabado 08:00 as 12:00

3) o que são esses escalonamentos?
1º Escalonamento 2º Escalonamento 3º Escalonamento 4º Escalonamento
01:00 05:00 11:00 15:00

Espero ter Ajudado. Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]

 
Postado : 28/09/2016 9:14 am
(@nemesistms)
Posts: 12
Active Member
Topic starter
 

Rilust, Boa tarde!

Obrigado pela ajuda,
1º sim eu quero calcular o prazo de fim, por exemplo: vou colocar uma data e nos escalonamentos vai aparecer os prazos(1º 1 hora depois da - 2º 5horas depois - 3º 11horas depois - 4º 15 horas depois) eu coloquei esses valores que tem que acrescentar em uma outra guia na planilha com nome de config.
2º não precisa calcular hora de almoço, esta planilha é um local onde vou cadastrar os chamados da empresa e ela vai me dizer dia e hora que tenho que ligar para o pessoal responsavel

3º sim os horarios sao de seg a sex das 08 as 18 e sabado 08 as 12

4º escalonamentos é o valor da data e hora mais os prazos(1º 1 hora depois da - 2º 5horas depois - 3º 11horas depois - 4º 15 horas depois) eu coloquei esses valores que tem que acrescentar em uma outra guia na planilha com nome de config ( estes sao os resultados da planilha)

Mais uma vez obrigado pela ajuda.

 
Postado : 28/09/2016 9:34 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Minha opinião é que problemas de SLA se tornam bastante complexos conforme variáveis vão sendo acrescentadas e vão se tornando cada vez mais inviáveis solução por fórmula.
No seu caso, eu sugiro a solução por meio de uma UDF, que é uma função personalizada desenvolvida no VBA.
Uma UDF personalizada para o cenário que entendi à sua questão poderia ser:

Public Function DATASLA(dInicial As Date, dTempoSolução As Date, dTempoEscalonamento As Date, rFeriados As Range) As Date

Dim dREPOSTA As Date

Do Until dTempoEscalonamento = CDate("00:00")

    'DIAS UTEIS DE SEG A SEXTA
    If WorksheetFunction.Weekday(dInicial, 2) <= 5 And WorksheetFunction.CountIf(rFeriados, VBA.Int(dInicial)) = 0 Then
    
        If dTempoSolução > CDate("18:00") Then
            dTempoSolução = CDate("18:00")
        End If
        
        If dInicial + dTempoSolução + dTempoEscalonamento > dInicial + CDate("18:00") Then
            dTempoEscalonamento = dTempoEscalonamento - (CDate("18:00") - dTempoSolução)
        Else
            dREPOSTA = dInicial + dTempoSolução + dTempoEscalonamento
            dTempoEscalonamento = CDate("00:00")
        End If
        
    End If
    
    'SÁBADO
    If WorksheetFunction.Weekday(dInicial, 2) = 6 And WorksheetFunction.CountIf(rFeriados, VBA.Int(dInicial)) = 0 Then
    
        If dTempoSolução > CDate("12:00") Then
            dTempoSolução = CDate("12:00")
        End If
        
        If dInicial + dTempoSolução + dTempoEscalonamento > dInicial + CDate("12:00") Then
            dTempoEscalonamento = dTempoEscalonamento - (CDate("12:00") - dTempoSolução)
        Else
            dREPOSTA = dInicial + dTempoSolução + dTempoEscalonamento
            dTempoEscalonamento = CDate("00:00")
        End If
        
    End If
    
    dInicial = dInicial + 1
    dTempoSolução = CDate("8:00")
    
Loop
        
DATASLA = dREPOSTA

End Function

Esta UDF tem a sintaxe:

=DATASLA(data_prazo;Hora_prazo;Hora_Escalonamento;intervalo_Feriados)

Todos os argumentos são obrigatórios, e na sua planilha seriam:

data_prazo: Coluna C da planilha Data Escalonamento
Hora_prazo: Coluna D da planilha Data Escalonamento
Hora_Escalonamento: células A3, B3, C3 e D3 da planilha Config
Intervalo_feriados: B3:B13 da planilha Feriados

Para facilitar, veja o arquivo anexo.

A UDF é passível de melhoria, fiz baseado no que compreendi das variáveis do seu cenário.

Abraços!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 28/09/2016 9:50 am
(@nemesistms)
Posts: 12
Active Member
Topic starter
 

Issamu,Boa tarde!

Realmente Muito obrigado, me ajudou muito.

Eu nao conheço muito VBA porem ja programei muito em vb6, mas me tire umas duvidas:

1º Eu consigo usar a data e hora do prazo de solução na mesma celula e fazer todo este calculo?
2º Os horarios que faz o calculo na formula de VBA ( 08:00 - 18:00 e 08:00 - 12:00) eu consigo fazer ele puchar de uma celula? pergunto isso pq tem clientes que possuem horarios diferentes.

Mas muito obrigado mesmo, salvou minha pele na empresa kkk

 
Postado : 28/09/2016 10:21 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Olá!
Não testei totalmente, mas acho que ficaria:

Public Function DATASLA(dInicial As Date, _
                        dTempoSolução As Date, _
                        dTempoEscalonamento As Date, _
                        rFeriados As Range, _
                        Optional Entrada_Semana As Date = "08:00", _
                        Optional Saída_Semana As Date = "18:00", _
                        Optional Entrada_Sábado As Date = "08:00", _
                        Optional Saída_Sábado As Date = "12:00") As Date

Dim dREPOSTA As Date

Do Until dTempoEscalonamento = CDate("00:00")

    'DIAS UTEIS DE SEG A SEXTA
    If WorksheetFunction.Weekday(dInicial, 2) <= 5 And WorksheetFunction.CountIf(rFeriados, VBA.Int(dInicial)) = 0 Then
    
        If dTempoSolução > Saída_Semana Then
            dTempoSolução = Saída_Semana
        End If
        
        If dInicial + dTempoSolução + dTempoEscalonamento > dInicial + Saída_Semana Then
            dTempoEscalonamento = dTempoEscalonamento - (Saída_Semana - dTempoSolução)
            dTempoSolução = Entrada_Semana
        Else
            dREPOSTA = dInicial + dTempoSolução + dTempoEscalonamento
            dTempoEscalonamento = CDate("00:00")
        End If
        
    End If
    
    'SÁBADO
    If WorksheetFunction.Weekday(dInicial, 2) = 6 And WorksheetFunction.CountIf(rFeriados, VBA.Int(dInicial)) = 0 Then
    
        If dTempoSolução > Saída_Sábado Then
            dTempoSolução = Saída_Sábado
        End If
        
        If dInicial + dTempoSolução + dTempoEscalonamento > dInicial + Saída_Sábado Then
            dTempoEscalonamento = dTempoEscalonamento - (Saída_Sábado - dTempoSolução)
            dTempoSolução = Entrada_Sábado
        Else
            dREPOSTA = dInicial + dTempoSolução + dTempoEscalonamento
            dTempoEscalonamento = CDate("00:00")
        End If
        
    End If
    
    dInicial = dInicial + 1
        
Loop
        
DATASLA = dREPOSTA

End Function

Sendo que adicionei 4 argumentos opcionais, que se não forem colocados ficará com o valor padrão de entradas e saídas conforme o seu enunciado (08:00, 18:00 - semana, e 08:00 e 12:00 sábados).

A sintaxe ficou:

=DATASLA(data_prazo;Hora_prazo;Hora_Escalonamento;intervalo_Feriados;entrada_Semana;saida_semana;entrada_Sábado;saída_sábado)

Analise o arquivo anexo e qualquer coisa avise.

Abs!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 28/09/2016 11:05 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Quanto a usar data e hora na mesma célula. Dá, mas é necessário mexer no código.
Não estou dispondo de tempo no momento para fazer essa alteração. Outra hora posso ver.
Abraços!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 28/09/2016 11:11 am
(@nemesistms)
Posts: 12
Active Member
Topic starter
 

Ok, meu caro ... muito obrigado.

Se alguém puder me ajudar com isso agradeceria ... estou tentando aqui, caso eu consiga resolver isso antes de obter alguma outra ajuda eu posto aqui.

 
Postado : 28/09/2016 11:16 am
(@nemesistms)
Posts: 12
Active Member
Topic starter
 

Senhores, Boa noite!

Consegui terminar minha planilha, agradeço a ajuda de todos que participaram deste Tópico e estou disponibilizando a planilha pronta como eu precisava.

Att.

 
Postado : 28/09/2016 2:46 pm
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Emprego salvo!! rs

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 28/09/2016 2:51 pm
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Notei que havia um pequeno erro de lógica que dependendo do dia e horário no ano poderia dar um erro no horário.

Corrigi o código. Pode conferir no arquivo anexo.

Abraços!

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 28/09/2016 3:05 pm