Nos diversos fóruns que participo, há um tipo de questão muito frequente e, muitas vezes, difícil de responder, que o cálculo de SLA.
SLA é a sigla de Service Level Agreement, que significa “Acordo de Nível de Serviço – ANS”, na tradução para o português. Usualmente, o termo é utilizado para definir o prazo de atendimento de um determinado processo, chamado, relatório, ocorrência, etc.
Quando digo que estes tipos de questões são difíceis de se responder é porque geralmente elas nunca são iguais entre si. Cada companhia define o prazo de SLA de maneira diferente. As variáveis que podem afetar o prazo SLA são inicio e fim de expediente, horário de almoço, e se os considera ou não, e feriados. Em alguns casos, a resposta via funções nativas do Excel ficam um tanto quanto complexas.
Pensando nesta dificuldade e na recorrência deste tipo de questão, resolvi criar uma UDF que consiga atender a maioria das questões de SLA. Batizei a UDF como DATASLA e o código está abaixo:
Function DATASLA(dDataInicial As Date, _ dHoraInicial As Date, _ sTempoResposta As Variant, _ Optional rFeriados As Range) As Date 'Declaração de variáveis Dim dTempoResposta As Date Dim dREPOSTA As Date Dim bAlmoço As Boolean Dim dHora_Entrada As Date Dim dHora_Saída As Date Dim dHora_Ini_Almoço Dim dHora_Fim_Almoço Dim Entrada_Seg As Date, Ini_Almoço_Seg As Date, fim_Almoço_Seg As Date, Saída_Seg As Date Dim Entrada_Ter As Date, Ini_Almoço_Ter As Date, fim_Almoço_Ter As Date, Saída_Ter As Date Dim Entrada_Qua As Date, Ini_Almoço_Qua As Date, fim_Almoço_Qua As Date, Saída_Qua As Date Dim Entrada_Qui As Date, Ini_Almoço_Qui As Date, fim_Almoço_Qui As Date, Saída_Qui As Date Dim Entrada_Sex As Date, Ini_Almoço_Sex As Date, fim_Almoço_Sex As Date, Saída_Sex As Date Dim Entrada_Sab As Date, Ini_Almoço_Sab As Date, fim_Almoço_Sab As Date, Saída_Sab As Date Dim Entrada_Dom As Date, Ini_Almoço_Dom As Date, fim_Almoço_Dom As Date, Saída_Dom As Date Dim Expediente_Seg As Boolean, Almoço_Na_Seg As Boolean Dim Expediente_Ter As Boolean, Almoço_Na_Ter As Boolean Dim Expediente_Qua As Boolean, Almoço_Na_Qua As Boolean Dim Expediente_Qui As Boolean, Almoço_Na_Qui As Boolean Dim Expediente_Sex As Boolean, Almoço_Na_Sex As Boolean Dim Expediente_Sab As Boolean, Almoço_No_Sab As Boolean Dim Expediente_Dom As Boolean, Almoço_No_Dom As Boolean 'Converter o Tempo de resposta para número formato numérico dTempoResposta = CDbl(CDate(sTempoResposta)) 'Definidir dias que haverão expedientes: True -> Tem expediente, False -> Não tem Expediente Expediente_Seg = True: Almoço_Na_Seg = True Expediente_Ter = True: Almoço_Na_Ter = True Expediente_Qua = True: Almoço_Na_Qua = True Expediente_Qui = True: Almoço_Na_Qui = True Expediente_Sex = True: Almoço_Na_Sex = True Expediente_Sab = False: Almoço_No_Sab = True Expediente_Dom = False: Almoço_No_Dom = True 'Definir Horários Expediente Entrada_Seg = "9:00": Saída_Seg = "18:00" Entrada_Ter = "9:00": Saída_Ter = "18:00" Entrada_Qua = "9:00": Saída_Qua = "18:00" Entrada_Qui = "9:00": Saída_Qui = "18:00" Entrada_Sex = "9:00": Saída_Sex = "18:00" Entrada_Sab = "9:00": Saída_Sab = "18:00" Entrada_Dom = "9:00": Saída_Dom = "18:00" 'Definir inicio e fim do almoço Ini_Almoço_Seg = "12:00": fim_Almoço_Seg = "13:00" Ini_Almoço_Ter = "12:00": fim_Almoço_Ter = "13:00" Ini_Almoço_Qua = "12:00": fim_Almoço_Qua = "13:00" Ini_Almoço_Qui = "12:00": fim_Almoço_Qui = "13:00" Ini_Almoço_Sex = "12:00": fim_Almoço_Sex = "13:00" Ini_Almoço_Sab = "12:00": fim_Almoço_Sab = "13:00" Ini_Almoço_Dom = "12:00": fim_Almoço_Dom = "13:00" Do Until dTempoResposta = "00:00" 'Validar Feriado. Se for feriado pula o dia. If Not (rFeriados Is Nothing) Then If WorksheetFunction.CountIf(rFeriados, VBA.Int(dDataInicial)) 0 Then dHoraInicial = 0 GoTo PróximoDia End If End If 'Valida dia da semana e define os horários de entrada, saída e almoço nas variaveis de controle Select Case WorksheetFunction.Weekday(dDataInicial, 2) Case 1 'Seg-feira If Expediente_Seg Then dHora_Entrada = Entrada_Seg: dHora_Saída = Saída_Seg dHora_Ini_Almoço = Ini_Almoço_Seg: dHora_Fim_Almoço = fim_Almoço_Seg bAlmoço = Almoço_Na_Seg Else GoTo PróximoDia End If Case 2 'Ter-Feira If Expediente_Ter Then dHora_Entrada = Entrada_Ter: dHora_Saída = Saída_Ter dHora_Ini_Almoço = Ini_Almoço_Ter: dHora_Fim_Almoço = fim_Almoço_Ter bAlmoço = Almoço_Na_Ter Else GoTo PróximoDia End If Case 3 'Qua-feira If Expediente_Qua Then dHora_Entrada = Entrada_Qua: dHora_Saída = Saída_Qua dHora_Ini_Almoço = Ini_Almoço_Qua: dHora_Fim_Almoço = fim_Almoço_Qua bAlmoço = Almoço_Na_Qua Else GoTo PróximoDia End If Case 4 'Qui-feira If Expediente_Qui Then dHora_Entrada = Entrada_Qui: dHora_Saída = Saída_Qui dHora_Ini_Almoço = Ini_Almoço_Qui: dHora_Fim_Almoço = fim_Almoço_Qui bAlmoço = Almoço_Na_Qui Else GoTo PróximoDia End If Case 5 'Sex-feira If Expediente_Sex Then dHora_Entrada = Entrada_Sex: dHora_Saída = Saída_Sex dHora_Ini_Almoço = Ini_Almoço_Sex: dHora_Fim_Almoço = fim_Almoço_Sex bAlmoço = Almoço_Na_Sex Else GoTo PróximoDia End If Case 6 'Sab If Expediente_Sab Then dHora_Entrada = Entrada_Sab: dHora_Saída = Saída_Sab dHora_Ini_Almoço = Ini_Almoço_Sab: dHora_Fim_Almoço = fim_Almoço_Sab bAlmoço = Almoço_No_Sab Else GoTo PróximoDia End If Case 7 'Dom If Expediente_Dom Then dHora_Entrada = Entrada_Dom: dHora_Saída = Saída_Dom dHora_Ini_Almoço = Ini_Almoço_Dom: dHora_Fim_Almoço = fim_Almoço_Dom bAlmoço = Almoço_No_Dom Else GoTo PróximoDia End If End Select 'Validar dHoraInicial para dentro do expediente do dia If dHoraInicial > dHora_Saída Then 'Caso hora inicial esteja após termino do expediente dHoraInicial = dHora_Saída ElseIf dHoraInicial dHora_Ini_Almoço And dHoraInicial < dHora_Fim_Almoço Then 'Caso, no horario de almoço dHoraInicial = dHora_Fim_Almoço End If ' INICIO DO CALCULO DO SLA DESCONTANDO O TEMPO ATÉ ZERAR dTempoResposta If bAlmoço Then 'SE HORARIO ALMOÇO = TRUE If dHoraInicial dDataInicial + dHora_Ini_Almoço Then 'SE não zerou o dTempoResposta dTempoResposta = dTempoResposta - (dHora_Ini_Almoço - dHoraInicial) 'Desconta tempo da manhã dHoraInicial = dHora_Fim_Almoço 'Definir novamente horário inicial dDataInicial = dDataInicial - 1 'Reduzir um dia para rodar novamente o laço e cair no mesmo dia Else 'Terminou o chamado no dia dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta 'Define o tempo SLA dTempoResposta = CDate("00:00") 'Zera tempo resposta para sair do laço End If Else 'Inicia contagem após o almoço If dDataInicial + dHoraInicial + dTempoResposta > dDataInicial + dHora_Saída Then 'Checa se ultrapassa o dia atual dTempoResposta = dTempoResposta - (dHora_Saída - dHoraInicial) 'Desconta o tempo do dia dHoraInicial = 0 'Zera a hora inicial para ser definida novamente para o inicio do expediente ao voltar o laço Else 'Terminou o chamado no dia dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta 'Define o tempo SLA dTempoResposta = CDate("00:00") 'Zera tempo resposta para sair do laço End If End If Else 'SE HORARIO ALMOÇO = FALSE If dHoraInicial dDataInicial + dHora_Saída Then 'Checa se o tempo avança para dia seguinte dTempoResposta = dTempoResposta - (dHora_Saída - dHoraInicial) 'Desconta o tempo do dia dHoraInicial = 0 'Zera a hora inicial para ser definida novamente para o inicio do expediente ao voltar o laço Else 'Terminou o chamado no dia dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta 'Define o tempo SLA dTempoResposta = CDate("00:00") 'Zera tempo resposta para sair do laço End If End If End If PróximoDia: dDataInicial = dDataInicial + 1 'Adicionar um dia para rodar novamente o laço Loop 'Retornar o laço para o dia seguinte DATASLA = dREPOSTA End Function
Para criar uma UDF, leia a explicação contida no artigo Valores do Vetor.
Após copiar o código num novo módulo, será necessário personalizar o código conforme a sua necessidade. Veja a imagem abaixo:
SINTAXE DA UDF
DATASLA(Data_Início; Tempo_Início; Tempo_SLA;[Intervalo_Feriados])
Data_Início (Obrigatório): É a data em que se inicia o prazo SLA. Pode ser inserida como data (“dd/mm/aa”) entre aspas duplas ou pode ser referência de uma célula contendo a data, ou uma fórmula que resulte em data.
Tempo_Inicio (Obrigatório): É o horário em que se inicia o prazo SLA. Pode ser inserida como tempo (“hh:mm”) entre aspas duplas ou pode ser referência de uma célula contendo a horas, ou uma fórmula que resulte em horas.
Tempo_SLA (Obrigatório): É o prazo do SLA. Pode ser inserida como tempo (“hh:mm”) entre aspas duplas ou pode ser referência de uma célula contendo a horas, ou uma fórmula que resulte em horas.
Intervalo_Feriados (Opcional): Intervalo contendo datas que serão desconsideradas no cálculo do SLA.
Busquei simplificar ao máximo os argumentos desta função para facilitar a aplicação dela. Vamos ver alguns exemplos na prática, considerando a personalização que está feita no código disponível acima, que é basicamente considerar expediente de segunda a sexta feira das 9:00 as 18:00 com uma hora de almoço das 12:00 as 13:00.
Como podem observar, essa UDF é bastante flexível e pode ser personalizada nos mais variados cenários possíveis de horários a serem ou não considerados.
Espero este artigo ajude você!
Clique na imagem abaixo para baixar o arquivo com os modelos deste artigo!
Dica excelente! Estou curtindo muito esse blog!
CurtirCurtir
Olá Rafael, bom dia, tudo bem?
Em primeiro lugar parabéns pelo seu artigo! Ajudou bastante!
Veja se consegue me ajudar numa coisa:
Como eu faço se o meu SLA (3o parâmetro da função) for superior a 23:59 ??
Porque existe na função DATASLA o comando ( dTempoResposta = CDbl(CDate(sTempoResposta)) ) que não consegue fazer a conversão, por exemplo, quando for “48:00″)
Consegue me ajudar nisso?
A forma como estou usando a função é essa:
=DATASLA(N2;2;SE(E2=”1-URGENTE”;”24:00″;SE(E2=”2-ALTA”;”48:00″;SE(E2=”3-MÉDIA”;”150:00″;SE(E2=”4-BAIXA”;”225:00″;0))));AC$2:AC$13)
Repare que no 3o parâmetro eu coloco uma condicional em função do conteúdo de uma célula para se definir a quantidade de horas para o SLA.
Obrigado pela ajuda!
CurtirCurtir
Rafael, me ajuda neste caso aqui?
Alterei o código para um SLA de 16 horas, sem horário de almoço de seg a sex, das 9:00hrs as 16:00hrs.
Sempre que coloco um horário inicial após as 16hrs (16:01 por ex) e quando a data calcula o fds,sempre dá erro. Poderia verificar, se há alguma alteração há ser feita?
Option Explicit
Function DATASLA(dDataInicial As Date, _
dHoraInicial As Date, _
sTempoResposta As Variant, _
Optional rFeriados As Range) As Date
‘Declaração de variáveis
Dim dTempoResposta As Date
Dim dREPOSTA As Date
Dim bAlmoço As Boolean
Dim dHora_Entrada As Date
Dim dHora_Saída As Date
Dim dHora_Ini_Almoço
Dim dHora_Fim_Almoço
Dim Entrada_Seg As Date, Ini_Almoço_Seg As Date, fim_Almoço_Seg As Date, Saída_Seg As Date
Dim Entrada_Ter As Date, Ini_Almoço_Ter As Date, fim_Almoço_Ter As Date, Saída_Ter As Date
Dim Entrada_Qua As Date, Ini_Almoço_Qua As Date, fim_Almoço_Qua As Date, Saída_Qua As Date
Dim Entrada_Qui As Date, Ini_Almoço_Qui As Date, fim_Almoço_Qui As Date, Saída_Qui As Date
Dim Entrada_Sex As Date, Ini_Almoço_Sex As Date, fim_Almoço_Sex As Date, Saída_Sex As Date
Dim Entrada_Sab As Date, Ini_Almoço_Sab As Date, fim_Almoço_Sab As Date, Saída_Sab As Date
Dim Entrada_Dom As Date, Ini_Almoço_Dom As Date, fim_Almoço_Dom As Date, Saída_Dom As Date
Dim Expediente_Seg As Boolean, Almoço_Na_Seg As Boolean
Dim Expediente_Ter As Boolean, Almoço_Na_Ter As Boolean
Dim Expediente_Qua As Boolean, Almoço_Na_Qua As Boolean
Dim Expediente_Qui As Boolean, Almoço_Na_Qui As Boolean
Dim Expediente_Sex As Boolean, Almoço_Na_Sex As Boolean
Dim Expediente_Sab As Boolean, Almoço_No_Sab As Boolean
Dim Expediente_Dom As Boolean, Almoço_No_Dom As Boolean
‘Converter o Tempo de resposta para número formato numérico
dTempoResposta = CDbl(CDate(sTempoResposta))
‘Definidir dias que haverão expedientes: True -> Tem expediente, False -> Não tem Expediente
Expediente_Seg = True: Almoço_Na_Seg = False
Expediente_Ter = True: Almoço_Na_Ter = False
Expediente_Qua = True: Almoço_Na_Qua = False
Expediente_Qui = True: Almoço_Na_Qui = False
Expediente_Sex = True: Almoço_Na_Sex = False
Expediente_Sab = False: Almoço_No_Sab = False
Expediente_Dom = False: Almoço_No_Dom = False
‘Definir Horários Expediente
Entrada_Seg = “9:00”: Saída_Seg = “16:00”
Entrada_Ter = “9:00”: Saída_Ter = “16:00”
Entrada_Qua = “9:00”: Saída_Qua = “16:00”
Entrada_Qui = “9:00”: Saída_Qui = “16:00”
Entrada_Sex = “9:00”: Saída_Sex = “16:00”
Entrada_Sab = “9:00”: Saída_Sab = “16:00”
Entrada_Dom = “9:00”: Saída_Dom = “16:00”
‘Definir inicio e fim do almoço
Ini_Almoço_Seg = “12:00”: fim_Almoço_Seg = “13:00”
Ini_Almoço_Ter = “12:00”: fim_Almoço_Ter = “13:00”
Ini_Almoço_Qua = “12:00”: fim_Almoço_Qua = “13:00”
Ini_Almoço_Qui = “12:00”: fim_Almoço_Qui = “13:00”
Ini_Almoço_Sex = “12:00”: fim_Almoço_Sex = “13:00”
Ini_Almoço_Sab = “12:00”: fim_Almoço_Sab = “13:00”
Ini_Almoço_Dom = “12:00”: fim_Almoço_Dom = “13:00”
Do Until dTempoResposta = “00:00”
‘Validar Feriado. Se for feriado pula o dia.
If Not (rFeriados Is Nothing) Then
If WorksheetFunction.CountIf(rFeriados, VBA.Int(dDataInicial)) 0 Then
dHoraInicial = 0
GoTo PróximoDia
End If
End If
‘Valida dia da semana e define os horários de entrada, saída e almoço nas variaveis de controle
Select Case WorksheetFunction.Weekday(dDataInicial, 2)
Case 1 ‘Seg-feira
If Expediente_Seg Then
dHora_Entrada = Entrada_Seg: dHora_Saída = Saída_Seg
dHora_Ini_Almoço = Ini_Almoço_Seg: dHora_Fim_Almoço = fim_Almoço_Seg
bAlmoço = Almoço_Na_Seg
Else
GoTo PróximoDia
End If
Case 2 ‘Ter-Feira
If Expediente_Ter Then
dHora_Entrada = Entrada_Ter: dHora_Saída = Saída_Ter
dHora_Ini_Almoço = Ini_Almoço_Ter: dHora_Fim_Almoço = fim_Almoço_Ter
bAlmoço = Almoço_Na_Ter
Else
GoTo PróximoDia
End If
Case 3 ‘Qua-feira
If Expediente_Qua Then
dHora_Entrada = Entrada_Qua: dHora_Saída = Saída_Qua
dHora_Ini_Almoço = Ini_Almoço_Qua: dHora_Fim_Almoço = fim_Almoço_Qua
bAlmoço = Almoço_Na_Qua
Else
GoTo PróximoDia
End If
Case 4 ‘Qui-feira
If Expediente_Qui Then
dHora_Entrada = Entrada_Qui: dHora_Saída = Saída_Qui
dHora_Ini_Almoço = Ini_Almoço_Qui: dHora_Fim_Almoço = fim_Almoço_Qui
bAlmoço = Almoço_Na_Qui
Else
GoTo PróximoDia
End If
Case 5 ‘Sex-feira
If Expediente_Sex Then
dHora_Entrada = Entrada_Sex: dHora_Saída = Saída_Sex
dHora_Ini_Almoço = Ini_Almoço_Sex: dHora_Fim_Almoço = fim_Almoço_Sex
bAlmoço = Almoço_Na_Sex
Else
GoTo PróximoDia
End If
Case 6 ‘Sab
If Expediente_Sab Then
dHora_Entrada = Entrada_Sab: dHora_Saída = Saída_Sab
dHora_Ini_Almoço = Ini_Almoço_Sab: dHora_Fim_Almoço = fim_Almoço_Sab
bAlmoço = Almoço_No_Sab
Else
GoTo PróximoDia
End If
Case 7 ‘Dom
If Expediente_Dom Then
dHora_Entrada = Entrada_Dom: dHora_Saída = Saída_Dom
dHora_Ini_Almoço = Ini_Almoço_Dom: dHora_Fim_Almoço = fim_Almoço_Dom
bAlmoço = Almoço_No_Dom
Else
GoTo PróximoDia
End If
End Select
‘Validar dHoraInicial para dentro do expediente do dia
If dHoraInicial > dHora_Saída Then ‘Caso hora inicial esteja após termino do expediente
dHoraInicial = dHora_Saída
ElseIf dHoraInicial dHora_Ini_Almoço And dHoraInicial < dHora_Fim_Almoço Then 'Caso, no horario de almoço
dHoraInicial = dHora_Fim_Almoço
End If
'INICIO DO CALCULO DO SLA DESCONTANDO O TEMPO ATÉ ZERAR dTempoResposta
If bAlmoço Then 'SE HORARIO ALMOÇO = TRUE
If dHoraInicial dDataInicial + dHora_Ini_Almoço Then ‘SE não zerou o dTempoResposta
dTempoResposta = dTempoResposta – (dHora_Ini_Almoço – dHoraInicial) ‘Desconta tempo da manhã
dHoraInicial = dHora_Fim_Almoço ‘Definir novamente horário inicial
dDataInicial = dDataInicial – 1 ‘Reduzir um dia para rodar novamente o laço e cair no mesmo dia
Else ‘Terminou o chamado no dia
dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta ‘Define o tempo SLA
dTempoResposta = CDate(“00:00”) ‘Zera tempo resposta para sair do laço
End If
Else ‘Inicia contagem após o almoço
If dDataInicial + dHoraInicial + dTempoResposta > dDataInicial + dHora_Saída Then ‘Checa se ultrapassa o dia atual
dTempoResposta = dTempoResposta – (dHora_Saída – dHoraInicial) ‘Desconta o tempo do dia
dHoraInicial = 0 ‘Zera a hora inicial para ser definida novamente para o inicio do expediente ao voltar o laço
Else ‘Terminou o chamado no dia
dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta ‘Define o tempo SLA
dTempoResposta = CDate(“00:00”) ‘Zera tempo resposta para sair do laço
End If
End If
Else ‘SE HORARIO ALMOÇO = FALSE
If dHoraInicial dDataInicial + dHora_Saída Then ‘Checa se o tempo avança para dia seguinte
dTempoResposta = dTempoResposta – (dHora_Saída – dHoraInicial) ‘Desconta o tempo do dia
dHoraInicial = 0 ‘Zera a hora inicial para ser definida novamente para o inicio do expediente ao voltar o laço
Else ‘Terminou o chamado no dia
dREPOSTA = dDataInicial + dHoraInicial + dTempoResposta ‘Define o tempo SLA
dTempoResposta = CDate(“00:00”) ‘Zera tempo resposta para sair do laço
End If
End If
End If
PróximoDia:
dDataInicial = dDataInicial + 1 ‘Adicionar um dia para rodar novamente o laço
Loop ‘Retornar o laço para o dia seguinte
DATASLA = dREPOSTA
End Function
CurtirCurtir
Olá André! Realmente este cenário está gerando um erro devido a falta de um sinal de “=” no meu código, uma falha que passou desapercebida.
Para tornar o código funcional neste cenário procure lá no final do código, altere conforme abaixo:
Errado:
If dHoraInicial < dHora_Saída Then 'Checa se hora de início está dentro do expediente
Correto:
If dHoraInicial <= dHora_Saída Then 'Checa se hora de início está dentro do expediente
Abraços!
CurtirCurtir
Rafael, obrigado pela prontidão na resposta, mas o erro persiste.
Resumindo o cenário que preciso:
-SLA de 16 horas
-Sem horário de almoço
-Período de segunda a sexta
-Expediente 9:00hrs as 16:00hrs.
Esse SLA é de uma abertura de chamado, porém o SLA é contado apenas no período de 09 às 16:00hrs, com o máximo de 16horas.
As aberturas dos chamados são feitas de 8 ás 18.
Então preciso que mesmo que a abertura seja feita as 8:00, conte a partir das 9:00. E quando for aberto após as 16, seja contado apenas no próximo dia.
Grato.
CurtirCurtir
Olá. Estou usando exatamente a UDF que você colocou no post, mas está dando erro: Else sem If – pode me ajduar, por favor? Obrigada
CurtirCurtido por 1 pessoa
Olá Marivsouza! Obrigado por acessar o meu blog. Realmente quando voltei o código, algumas linhas de código ficaram dentro de linhas comentadas, gerando este erro. Eu ajustei isso, mas se tiver dificuldades baixe o arquivo de exemplo e extraia a UDF de lá. Grande abraço.
CurtirCurtir
Obrigada, Rafael. Eu baixe o arquivo de exemplo e extraia a UDF de lá. Uma duvida: eu não consigo compartilhar para uso com outros usuários uma planilha com UDF, consigo?
CurtirCurtir
Olá Rafael, bom dia, tudo bem?
Em primeiro lugar parabéns pelo seu artigo! Ajudou bastante!
Veja se consegue me ajudar numa coisa:
Como eu faço se o meu SLA (3o parâmetro da função) for superior a 23:59 ??
Porque existe na função DATASLA o comando ( dTempoResposta = CDbl(CDate(sTempoResposta)) ) que não consegue fazer a conversão, por exemplo, quando for “48:00″)
Consegue me ajudar nisso?
A forma como estou usando a função é essa:
=DATASLA(N2;2;SE(E2=”1-URGENTE”;”24:00″;SE(E2=”2-ALTA”;”48:00″;SE(E2=”3-MÉDIA”;”150:00″;SE(E2=”4-BAIXA”;”225:00″;0))));AC$2:AC$13)
Repare que no 3o parâmetro eu coloco uma condicional em função do conteúdo de uma célula para se definir a quantidade de horas para o SLA.
Obrigado pela ajuda!
CurtirCurtir
Olá Marcos! A questão não é que o VBA não converte o valor, a conversão é feita contanto que seja passado um valor, e não um texto como você está fazendo. No seu caso há duas alternativas, ou vc informa o tempo no formato inteiro ou utilize a função valor:
=DATASLA(N2;2;SE(E2=”1-URGENTE”;1;SE(E2=”2-ALTA”;2;SE(E2=”3-MÉDIA”;6,25;SE(E2=”4-BAIXA”;9,375;0))));AC$2:AC$13)
Note que 1 = 24:00, 2 = 48:00, 3 = 72:00, 6,25 = 150:00, ….
ou
=DATASLA(N2;2;SE(E2=”1-URGENTE”;VALOR(“24:00″);SE(E2=”2-ALTA”;VALOR(“48:00″);SE(E2=”3-MÉDIA”;VALOR(“150:00″);SE(E2=”4-BAIXA”;VALOR(“225:00”);0))));AC$2:AC$13)
Tente ai e qualquer dificuldade volte a perguntar!
Abraços!
CurtirCurtir
Olá rafaelissamu,
Esta função está muito boa, mas estou procurando algo um pouco diferente (mas relacionado).
Neste caso você diz qual o inicio, qual o tempo SLA e a função devolve qual o resultado.
Estou procurando uma forma de dizer qual o inico, qual o final e a função dizer-me quanto tempo demorou tendo em atenção os horários de expediente (de segunda a sexta 08:00-20:00, sábado 08:00-13:00, domingo fechado) e sem almoço.
Exemplo:
Inicio Final
2018-02-04 01:18 2018-02-06 14:40
No exemplo eu sei que dia 04 domingo (00:00), dia 05 segunda (12:00) e dia 06 terça (06:40). No total deverá dar 18:40.
Tem alguma coisa que me ajude a conseguir este resultado?
Abraço
CurtirCurtir
Obrigada meu amigo!
Usei sua macro em um caso complicadíssmo aqui em meu serviço!
Só tenho a agradecer!!!
CurtirCurtir
Boa noite!
Pesquisando na net sobre como resolver esse problema de SLA, vi seu site e seu trabalho. Esta me ajudando muito.
Uma duvida que tenho, tem como eu ao inves de colocar dentro do codigo o dias e horarios trabalhados, fazer com que ele busque essa informacao no Excel? Pois tenho varios clientes e cada cliente tenho um prazo SLA.
Obrigado pela ajuda!
CurtirCurtir
Olá Rodrigo, obrigado por acessar meu blog. Para que a função busque essas informações em células do Excel seria necessário incluir as declarações de variáveis como argumento da função, e sabendo a posição de cada argumento você poderia montar uma fórmula para cada empresa. Não é uma adaptação difícil de ser feita, mas tem que possuir um pouco de conhecimento técnico da linguagem VBA.
CurtirCurtir
Então preciso pesquisar sobre VBA… pois faz muito tempo que mexi… e já não lembro quase nada.
Obrigado pelo retorno!
CurtirCurtir
Bom dia!
Uma duvida aqui… na sua formula aparece como FERIADOS.. como vc faz isso?
CurtirCurtir
Rafael, boa noite!
Sua tabela esta me ajudando muito, porem agora me pediram mais um campo para ser colocado na planilha.
Querem que na tabela informe quanto tempo demorou da abertura do chamado ate o termino. Contando apenas as horas uteis. Como faco isso? Poderia me ajudar. Desde ja agradeco.
CurtirCurtir
Boa noite! Fiz um teste com sua tabela e me ajuda muito, porem quando o chamado e aberto no sabado, o calculo das horas nao esta batendo… poderia me ajudar pfv?
CurtirCurtir
Rafael.. estou com uma duvida aqui. Nessa UDF se eu colocar como Sabado = False e a data e colocada no sabado.. ela comeca a contar a hora no proximo dia util apenas no horario que foi inserido no sabado… e nao no inicio do dia util. Como resolver isso? Obrigado!
CurtirCurtir