Neste artigo, criaremos uma Função Definida pelo Usuário (UDF) para contar o número de dias úteis entre as datas especificadas, incluindo ou excluindo sábados e domingos como folgas semanais.
Os dados brutos para este exemplo consistem em uma data de início e uma data de término. Queremos contar o número de dias úteis entre essas datas.
Especificamos as datas dos feriados na coluna A da planilha “Feriados”.
O Excel tem função embutida, DIAS DE REDE, para contar o número de dias úteis entre o intervalo.
Sintaxe da função NETWORKDAYS
NETWORKDAYS (StartDate, EndDate, [Holidays])
Esta função irá excluir a data especificada na lista de feriados, enquanto conta o número de dias úteis.
Esta função considera os sábados e domingos como folgas semanais por defeito, pelo que não podemos contar o número de dias úteis, caso tenhamos apenas uma semana de folga.
Criamos a função personalizada “CountWorkingDays” para contar o número de dias úteis entre o intervalo. Esta função personalizada lida com o problema da função NETWORKDAYS. Nesta função, podemos contar o número de dias úteis mesmo que haja apenas uma semana de folga no sábado ou no domingo.
Sintaxe da função personalizada
CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)
InclSaturdays e InclSundays são parâmetros opcionais. Por padrão, ambos têm valores TRUE. Para transformar sábados e domingos em dias úteis, altere o valor do respectivo parâmetro para FALSO.
A Microsoft introduziu a função NETWORKDAYS.INTL com o Excel 2010. Essa função lida com o problema da função NETWORKDAYS. Nesta função, podemos especificar os dias de folga da semana. Podemos especificar um ou dois dias como semana de folga.
Sintaxe da função NETWORKDAYS.INTL
NETWORKDAYS.INTL (StartDate, EndDate, [Weekend], [Holidays])
No parâmetro fim de semana, podemos especificar dias de folga na semana.
Neste exemplo, usaremos todas as três funções acima para contar o número de dias úteis.
Explicação lógica
Na função “CountWorkingDays”, primeiro verificamos se determinada data no parâmetro existe na lista de feriados especificada. Se a data constar da lista de feriados, esse dia não é contabilizado no número de dias úteis. Se a data não existir na lista de feriados, verifique se a data indicada é sábado ou domingo. Com base no parâmetro de entrada fornecido, verifique se deseja incluir ou excluir sábados ou domingos como feriados.
Explicação do código
Definir RngFind = planilhas ("feriados"). Colunas (1). Encontrar (i)
O código acima é usado para encontrar o local onde a data especificada existe na lista de feriados.
If Not RngFind Is Nothing Then
GoTo ForLast
Fim se
O código acima é usado para verificar se a data especificada existe na lista de feriados. Se a condição retornar TRUE, esse dia não será contado no número de dias úteis.
Siga abaixo para o código
Option Explicit Function CountWorkingDays (StartDate As Long, EndDate As Long, Opcional InclSaturdays As Boolean = True, _ Opcional InclSundays As Boolean = True) 'Declarando variáveis Dim RngFind As Range Dim i As Long For i = StartDate To EndDate On Error Resume Next' Encontrando o local onde a data especificada existe na planilha de feriados Set RngFind = Worksheets ("Holidays"). Colunas (1) .Find (i) On Error GoTo 0 'Checando se é feriado na data dada If Not RngFind Is Nothing Then GoTo ForLast End If 'Verificar se é sábado em determinada data If InclSaturdays Then If Weekday (i, 2) = 6 Then GoTo ForLast End If End If' Verificar se é domingo em determinada data If InclSundays Then If Weekday (i, 2) = 7 Then GoTo ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Next End Function
Se você gostou deste blog, compartilhe com seus amigos no Facebook. Além disso, você pode nos seguir no Twitter e no Facebook.
Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar nosso trabalho e torná-lo melhor para você. Escreva para nós no site de e-mail