Vamos ao problema:
Dado uma data que cai, por exemplo, no dia 05/03/2011, que dá em um sábado. Desejando-se adicionar 2 dias úteis, a função deverá retornar 10/03/2011, já que 07/03 e 08/03 caem no carnaval, feriado portanto.
Para vencermos esse desafio vamos precisar de:
1-Uma tabela de feriados.
2-Uma tabela para testar
3-Duas funções para calcularmos os dias úteis.
Vamos ao projeto:
1º) Abra um novo arquivo de trabalho do Excel.
2º) Renomeie a Plan1 para Feriados. Em A1 cole o seguinte conteúdo:
12/10/2010 terça-feira Nossa Sr.a Aparecida - Padroeira do Brasil
02/11/2010 terça-feira Finados
15/11/2010 segunda-feira Proclamação da República
25/12/2010 sábado Natal
01/01/2011 sábado Confraternização Universal
07/03/2011 segunda-feira Carnaval
08/03/2011 terça-feira Carnaval
21/04/2011 quinta-feira Tiradentes
22/04/2011 sexta-feira Paixão de Cristo
01/05/2011 domingo Dia do Trabalho
23/06/2011 quinta-feira Corpus Christi
07/09/2011 quarta-feira Independência do Brasil
12/10/2011 quarta-feira Nossa Sr.a Aparecida - Padroeira do Brasil
02/11/2011 quarta-feira Finados
15/11/2011 terça-feira Proclamação da República
25/12/2011 domingo Natal
01/01/2012 domingo Confraternização Universal
20/02/2012 segunda-feira Carnaval
21/02/2012 terça-feira Carnaval
06/04/2012 sexta-feira Paixão de Cristo
21/04/2012 sábado Tiradentes
01/05/2012 terça-feira Dia do Trabalho
07/06/2012 quinta-feira Corpus Christi
07/09/2012 sexta-feira Independência do Brasil
12/10/2012 sexta-feira Nossa Sr.a Aparecida - Padroeira do Brasil
02/11/2012 sexta-feira Finados
15/11/2012 quinta-feira Proclamação da República
25/12/2012 terça-feira Natal
Temos aqui uma pequena faixa de feriados. Em outro post vou colocar a planilha completa.
3º) Vamos renomear essa faixa de células:
1-Selecione de A1 a C28
2-Na barra de endereço, dê um nome para essa faixa: TB_FERIADO

4º) Agora, vamos criar as funções que iremos utilizar na solução.
1-Utilize a combinação das teclas ALT e F11, para acionar o editor de código VBA do Excel.
2-Na tela que abriu, clique com o botão direito em Plan1. Clique em Inserir e, depois, em Módulo.
3-Digite o seguinte código:
Function Eh_Feriado(dData As Date) As Boolean
Dim rng As Variant
Dim sData As String
Dim sNome AS string
sNome = ActiveWorkBook.Name
sData = CDate(dData)
Set rng = Workbooks(sNome).Worksheets("Feriados").Range("A1:A500").Find(sData)
Eh_Feriado = Not (rng Is Nothing)
End Function
4º) Vamos criar outra função, que é a que iremos utilizar comumente:
1-Digite o seguinte código, após a End Function da função anterior:
Function AdicionaDiaUtil(dData As Date, iDias As Integer)
'
' Esta função adicionará iDias úteis em dData
'
Dim iCont As Integer
iCont = 1
While iCont <= iDias
'
' Adiciona 1 dia
'
dData = DateAdd("d", 1, dData)
If Eh_Feriado(dData) Then
iDias = iDias + 1
Else
If (Weekday(dData) = 1) Then
iDias = iDias + 1
ElseIf (Weekday(dData) = 7) Then
iDias = iDias + 1
End If
End If
iCont = iCont + 1
Wend
AdicionaDiaUtil = dData
End Function
Não esqueça de salvar!
5º) Vamos criar uma tabela auxiliar para recuperar o nome do dia da semana, para facilitar os testes:
1-Na planilha Tabelas, coloque a seguinte sequência, a partir de E1:
6º) Pronto, já temos o que precisamos para calcular. Vamos criar uma planilha de teste.
1-Abra a Plan2.
2-Em B5, digite: Data:
3-Em B6, digite: Dia da Semana:

Veja que eu atribui o nome TB_DIADASEMANA para essa faixa de células.
4-Em B8, digite: Dias úteis:
5-Em B9, digite: Próxima data:
6-Em B10, digite: Dia da semana
7º) Agora, vamos colocar o Excel para trabalhar por nós:
1-Na célula C5 digite uma data qualquer. Exemplo: 01/01/2011
2-Na célula C6 digite: =PROCV( DIA.DA.SEMANA( C5); TB_DIADASEMANA;2)´
Veja que ele já recupera o dia da semana para a data informada. Para a data 01/1/2011, retorna sábado.
3-Na célula C8 informe a quantidade de dias úteis desejada para a data testada. Digamos: 2
4-Na célula C9 vamos colocar a função que criamos, passando como parâmetro da data, que está em C6 e a quantidade de dias úteis, que está em C9: =AdicionaDiaUtil(C5;C8)
5-Na célula C10 coloque: =PROCV( DIA.DA.SEMANA( C9); TB_DIADASEMANA;2)
Pronto! Para dia 01/01/2011, adicionando 2 dias úteis a essa data teremos 04/01/2011, senão vejamos:
Dia 01/01/2011 é sábado, além de ser feriado.
Dia 02/01/2011 é domingo, não pode contar como o primeiro dia úti.
Dia 03/01/2011 é segunda, primeiro dia útil.
Dia 04/01/2011 é o segundo dia útil.
Teste com 04/03/2011 e veja o resultado!
No próximo post coloco o arquivo com a tabela de feriado completa.
Dúvidas, sugestões, estou à disposição.