Olá pessoal. Hoje vamos resolver o problema de muita gente que pergunta por e-mail e nos comentários como adicionar um calendário em uma planilha do Excel 2013, já que ele não tinha a mesma funcionalidade "quase" automática do Excel 2007.

Bom, se você ainda usa o 2007, o método anterior ainda é válido, por isso corra e clique aqui. Agora, se você quiser baixar GRATUITAMENTE, nosso calendário pro ano de 2017 + agendador de tarefas e de contas a pagar, clique aqui.

Lembrando que o código apresentado na aula de hoje irá inserir um calendário anual de um determinado ano especificado por você. Caso deseje um código que crie um calendário mensal de um certo mês e ano na sua planilha, confira este outro código. Na verdade eu sugiro que você veja os 2 e escolha qual se adapta melhor às suas necessidades.

Agora, se você está no Office 2010 ou 2013 vamos fazer o seguinte:

Logo que abrir a planilha aperte Alt+F11 para acessar o modo de edição e programação de macros. Agora vamos clicar com o direito em "VBAProject" e depois em "Inserir" e "Módulo".

Uma nova janela para inserção de código será aberta, nela você vai colar o seguinte texto, depois salvar e voltar ao Excel:

Option Explicit 
    Sub CriarCalendario()
    Dim lMonth As Long
    Dim strMonth As String
    Dim rStart As Range
    Dim strAddress As String
    Dim rCell As Range
    Dim lDays As Long
    Dim dDate As Date
    Dim lPositionCell As Integer
    Dim bEscreveData As Boolean
    Dim lYear As Integer
    Dim sYear As String
                    'Solicita o Ano para montar o calendário
    sYear = InputBox("Informe o Ano para gerar o calendário:", "Criar Calendário", Year(Date))
                    'Sai da rotina se não for informado um ano válido
   If (sYear = "" Or Not IsNumeric(sYear)) Then Exit Sub
   lYear = CInt(sYear)
                    'Adiciona uma nova Planilha para criar o calendário
   Worksheets.Add
   ActiveSheet.Name = "Calendário " & lYear
                    'Ocultar as linhas de grade
   ActiveWindow.DisplayGridlines = False
                    'Formata as colunas
   With Cells
      .ColumnWidth = 6
      .Font.Size = 8
   End With
                   'Cria o cabeçalho para os meses
   For lMonth = 1 To 12 Step 3
   Select Case lMonth
       Case 1
             Set rStart = Range("A1")
       Case 4
             Set rStart = Range("A9")
        Case 7
             Set rStart = Range("A17")
        Case 10
             Set rStart = Range("A25")
   End Select
   strMonth = MonthName(lMonth) 'Atribui o nome do mês na variável
                   'Mescla, auto-preenche e alinha os blocos dos meses
   With rStart
      .Value = UCase(strMonth)
      .HorizontalAlignment = xlCenter
      .Interior.ColorIndex = 6
      .Font.Bold = True
   With .Range("A1:G1")
      .Merge
      .BorderAround LineStyle:=xlContinuous
   End With
                      'Preenche o cabeçalho dos dias da semana
   For lDays = 1 To 7
      .Cells(2, lDays).Value = UCase(WeekdayName(lDays, True))
   Next lDays
      .Range("A2:G2").BorderAround LineStyle:=xlContinuous 
                      'Auto preenche demais meses ao lado
       .Range("A1:G2").AutoFill Destination:=.Range("A1:U2")
   End With
   Next lMonth
                       'Preenche os meses com seus respectivos dias
   For lMonth = 1 To 12
   strAddress = Choose(lMonth, "A3:G8", "H3:N8", "O3:U8", _
            "A11:G16", "H11:N16", "O11:U16", _
            "A19:G24", "H19:N24", "O19:U24", _
            "A27:G32", "H27:N32", "O27:U32")
    lDays = 0
    lPositionCell = 0
    bEscreveData = False
    Range(strAddress).BorderAround LineStyle:=xlContinuous
                       'Adiciona os dias
    For Each rCell In Range(strAddress)
    lDays = lDays + 1
    lPositionCell = lPositionCell + 1
    dDate = DateSerial(lYear, lMonth, lDays) 
    If bEscreveData = False Then
    If Weekday(dDate, vbSunday) = lPositionCell Then
    bEscreveData = True
  Else
    bEscreveData = False
   lDays = 0
 End If
 End If
   If bEscreveData = True Then
   If Month(dDate) = lMonth Then 'Se for uma data válida
   With rCell
        .Value = dDate
        .NumberFormat = "dd"
  End With
End If
End If
   Next rCell
   Next lMonth
                               'Formatação condicional para o dia de hoje.
   With Range("A1:U32")
       .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=HOJE()"
       .FormatConditions(1).Font.ColorIndex = 2
       .FormatConditions(1).Interior.ColorIndex = 11
       .HorizontalAlignment = xlCenter
   End With
End Sub

Ao voltar pro Excel vamos teclar Alt + F8, e na caixa que será aberta clicar em "Executar" (a função que acabamos de inserir "CalendarioDoAno" já deverá estar selecionada).

Para finalizar, uma nova caixa aparecerá, nela você escolherá o ano do seu calendário. Note que já irá aparecer o ano de 2015 automaticamente, mas você poderá colocar 2016, 2018, etc. O Excel irá criar o calendário de acordo com o ano que você pedir.

Veja como ficará:

Pronto pessoal. Agora você já sabe como criar um calendário no Excel 2013. Abaixo segue o download da planilha que fizemos em aula.

 Para saber mais sobre criação de Macros clique aqui.

Problemas com o download?

Veja nosso tutorial e saiba como resolver qualquer tipo de problema que você enfrentar para baixar, abrir ou executar nossas planilhas.

Atualização do código dia 05/11/2015

Código reformulado e corrigido. Agora funcionando em todas as versões, inclusive no Excel 2016.