Guia do Excel

Como Separar Planilhas de Excel com VBA?

Como Separar Planilhas de Excel com VBA? Hoje vou mostrar uma função que criei para separar uma planilha em várias a partir de uma coluna com o ano e mês.

MR
Marcos Rieper

Especialista em Excel

Atualizado em 10 de agosto de 2026 Publicado em 30 de julho de 2010 10 min de leitura

Como Separar Planilhas de Excel em Várias Planilhas com VBA?

Quando trabalhamos com grandes bases de dados no Excel, é comum precisarmos organizar as informações de acordo com algum critério específico. Um exemplo bastante prático é separar uma única planilha em várias planilhas, utilizando o ano e o mês de uma determinada data como critério.

Neste artigo, vou mostrar como fazer isso utilizando VBA. A ideia é partir de uma base de dados única e criar automaticamente uma nova planilha para cada combinação de ano e mês encontrada na coluna de datas.

Essa técnica é especialmente útil quando você recebe uma base consolidada e precisa distribuí-la em diferentes abas para facilitar a análise, a organização ou o envio das informações para outras pessoas.

Por exemplo, imagine uma tabela com lançamentos financeiros contendo uma coluna de data. Em vez de manter todos os registros em uma única aba, podemos criar automaticamente planilhas como 2026-1, 2026-2, 2026-3 e assim por diante, conforme os meses existentes na base.

O que a macro faz?

O processo realizado pela macro é relativamente simples. Primeiro, ela identifica a última linha preenchida da base de dados. Depois, ordena os registros pela coluna que contém as datas. Em seguida, percorre as linhas, identifica o ano e o mês de cada registro e cria uma nova planilha sempre que encontra uma combinação de ano e mês que ainda não foi criada.

Além de criar as abas, a macro copia o cabeçalho da base para cada nova planilha e transfere os registros correspondentes para a aba do respectivo período.

Com isso, o usuário não precisa criar manualmente cada aba, aplicar filtros, copiar os registros e repetir o procedimento para todos os meses. Todo o trabalho é executado automaticamente pelo VBA.

Como a base de dados deve estar organizada?

Para que o código funcione corretamente, é importante observar a estrutura utilizada no exemplo. A macro considera uma base na planilha chamada Plan1, com os dados ocupando as colunas A até F.

A coluna F é utilizada como referência para a data. Portanto, os valores dessa coluna precisam ser datas reconhecidas pelo Excel. Não basta que o conteúdo tenha aparência de data: o Excel precisa conseguir interpretar o valor como uma data para que as funções Year e Month consigam identificar o ano e o mês.

Também é importante que a primeira linha contenha os títulos das colunas. O código considera essa primeira linha como cabeçalho durante a ordenação e também a utiliza como modelo para as novas planilhas.

O código VBA

Para realizar a separação, foi utilizado o seguinte código com comentários. Os comentários ajudam a entender cada etapa da macro e facilitam a adaptação do procedimento para outras situações.

Veja como Copiar e aplicar o procedimento abaixo na sua planilha.

'
Divide a planilha em diversas a partir do critério do mês
Sub lsSeparaPlanilha()
    
    'Definição das Variáveis
    Dim iTotalLinhas As Integer
    Dim rngAux As Range
    Dim iAnoMes As String
    Dim lRow As Long
    Dim iTotalLinhasAux As Long
    Dim lCel As Long
    
    'Identifica a última linha da planilha
    iTotalLinhas = Cells(Rows.Count, 1).End(xlUp).Row
    
    'Seleciona os dados das colunas
    Columns("A:F").Select
    
    'Realiza a ordenação dos dados pela data
    ActiveWorkbook.Worksheets("Plan1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Plan1").Sort.SortFields.Add Key:=Range("F2:F" & iTotalLinhas) _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    With ActiveWorkbook.Worksheets("Plan1").Sort
        .SetRange Range("A1:F" & iTotalLinhas)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
        
    'Analisa as linhas e as separa criando para isso novas planilhas
    For lCel = 2 To iTotalLinhas
        'Ativa a planilha da base de dados
        ActiveWorkbook.Worksheets("Plan1").Activate
        Set rngAux = Range("F" & CStr(lCel))
        
        'Cria uma nova planilha
        If Year(rngAux.Value) & "-" & Month(rngAux.Value)  iAnoMes Then
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = CStr(Year(rngAux.Value) & "-" & Month(rngAux.Value))
            iAnoMes = Year(rngAux.Value) & "-" & Month(rngAux.Value)
            ActiveWorkbook.Worksheets("Plan1").Activate
            Range("A1").EntireRow.Select
            Application.CutCopyMode = False
            Selection.Copy
            Sheets(CStr(iAnoMes)).Select
            Range("A1").Select
            ActiveSheet.Paste
        End If
        
        'Realiza a cópia dos dados
        ActiveWorkbook.Worksheets("Plan1").Activate
        rngAux.EntireRow.Select
        Application.CutCopyMode = False
        Selection.Cut
        Sheets(CStr(iAnoMes)).Select
        iTotalLinhas = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & CStr(iTotalLinhas)).Select
        ActiveSheet.Paste
        
    Next lCel
    
    'Avisa o usuário o término do processo
    MsgBox "Planilha Separada", vbInformation
    '
End Sub

Entendendo o código passo a passo

Vamos analisar as principais etapas da macro para entender como ela funciona e, principalmente, como você pode adaptá-la para outras necessidades.

1. Declaração das variáveis

Logo no início, o código define as variáveis que serão utilizadas durante a execução. Entre elas está a variável rngAux, que representa a célula da coluna de data que está sendo analisada.

A variável iAnoMes armazena o período atualmente processado. Ela funciona como uma referência para identificar se a macro já criou a planilha correspondente ao ano e ao mês encontrados.

Já a variável lCel é utilizada para controlar o número da linha que está sendo analisada no loop.

Um ponto importante para quem está aprendendo VBA é observar que as variáveis possuem funções diferentes dentro do processo. Separar essas responsabilidades torna o código mais fácil de compreender e modificar posteriormente.

2. Identificação da última linha

O código utiliza a seguinte lógica para descobrir onde terminam os dados:

Cells(Rows.Count, 1).End(xlUp).Row

Essa é uma técnica bastante utilizada em VBA. Ela começa pela última linha possível da planilha na coluna A e sobe até encontrar uma célula preenchida.

Assim, a macro consegue descobrir quantos registros existem na base sem precisar informar manualmente a quantidade de linhas.

Isso torna o procedimento mais automático. Se hoje a base possui 500 registros e amanhã passar a ter 5.000, a macro poderá identificar essa nova quantidade automaticamente.

3. Ordenação pela data

Antes de separar os registros, a macro ordena a base utilizando a coluna F como referência.

Essa etapa é importante porque os registros de um mesmo mês ficam agrupados. Dessa forma, ao percorrer a base, a macro consegue identificar quando muda o período e criar a nova planilha no momento adequado.

A ordenação é feita em ordem crescente. Portanto, os períodos serão processados começando pelas datas mais antigas e avançando até as mais recentes.

4. Percorrendo os registros

Depois da ordenação, a macro utiliza um loop For para percorrer as linhas da base, começando na linha 2. Isso acontece porque a linha 1 contém o cabeçalho.

Para cada linha, o código obtém a célula correspondente na coluna F. É a partir desse valor que o VBA identifica o ano e o mês do registro.

As funções Year e Month são utilizadas para extrair essas informações da data.

Por exemplo, uma data como 15/08/2026 será interpretada como ano 2026 e mês 8. A combinação será utilizada para determinar a planilha que receberá aquele registro.

5. Criação das planilhas

Quando a macro identifica um novo período, ela cria uma nova planilha no final do arquivo.

O nome da aba é formado pela combinação do ano e do mês. Dessa maneira, cada período possui uma identificação simples e objetiva.

Depois de criar a planilha, o código retorna para a Plan1, copia o cabeçalho da base e cola esse cabeçalho na nova aba.

Essa etapa é importante porque cada planilha criada mantém a mesma estrutura da base original. Assim, ao abrir uma aba mensal, o usuário consegue identificar facilmente o significado de cada coluna.

6. Transferência dos registros

Depois que a planilha correspondente ao período já existe, a macro copia a linha do registro atual para essa aba.

O código utiliza a ação de recorte para transferir a linha da base original para a planilha criada. Em outras palavras, os registros não permanecem na Plan1 depois de serem transferidos.

Esse comportamento é importante para entender o resultado final. A macro não está simplesmente duplicando os dados. Ela está separando a base original em diferentes planilhas.

7. Mensagem ao final

Depois que todas as linhas são processadas, a macro apresenta uma mensagem informando que a planilha foi separada.

Isso é útil porque permite ao usuário saber que o procedimento chegou ao fim sem precisar acompanhar visualmente cada etapa da execução.

Material gratuito

Planilha de Controle Financeiro no Excel

Tenha um controle bonito e completo do seu financeiro.

  • Categorias e subcategorias já configuradas
  • Planilhas separadas por tabela (configuração, lançamentos, resumo)
  • Personalize com suas próprias categorias e ícones

Baixe grátis — receba o link no seu e-mail

Por que ordenar os dados antes da separação?

A ordenação é uma das partes mais importantes dessa solução. Como a macro compara o período atual com o período armazenado na variável iAnoMes, é necessário que os registros estejam organizados por data.

Imagine uma base em que os registros estejam misturados desta forma: janeiro, março, janeiro, fevereiro e março. A macro poderia identificar novamente um mês que já havia sido processado.

Ao ordenar a base pela data, os registros ficam agrupados cronologicamente. Assim, todos os registros de um determinado mês aparecem juntos e a criação das abas acontece de maneira organizada.

Como adaptar a macro?

Uma das principais vantagens dessa solução é que o conceito pode ser utilizado em diferentes tipos de bases de dados.

Se a data estiver em outra coluna, por exemplo, será necessário adaptar as referências utilizadas no código. Da mesma forma, se a base possuir mais ou menos colunas, o intervalo utilizado na ordenação e na cópia dos dados também deverá ser ajustado.

O critério de separação também pode ser alterado. Em vez de ano e mês, a mesma lógica pode ser adaptada para separar informações por vendedor, cidade, departamento, cliente, categoria ou qualquer outro campo existente na base.

O conceito fundamental é sempre o mesmo: identificar um critério, percorrer os registros, verificar quando o critério muda e direcionar os dados para a planilha correspondente.

Cuidados ao utilizar essa solução

Antes de executar uma macro que utiliza Cut para transferir registros, é recomendável fazer uma cópia do arquivo original. Dessa forma, você mantém uma versão de segurança caso precise voltar ao estado inicial da base.

Também é importante conferir se os nomes das planilhas e as referências das colunas utilizadas no código correspondem à estrutura real do seu arquivo.

Outro cuidado é verificar os dados da coluna de datas. Valores vazios, textos ou informações que não sejam reconhecidas como datas podem causar problemas durante a execução das funções Year e Month.

Por isso, antes de automatizar a separação, vale a pena validar a qualidade da base de origem.

Uma solução simples para um problema muito comum

Separar manualmente uma grande base em várias planilhas pode consumir bastante tempo e aumentar o risco de erros. Além disso, repetir o procedimento todos os meses não é uma boa utilização do tempo de quem trabalha com Excel.

Com VBA, podemos transformar uma sequência de tarefas manuais em um processo automático. Depois que a macro estiver ajustada à estrutura da base, basta executá-la para realizar a separação.

Esse é justamente um dos grandes benefícios da automação com VBA: eliminar tarefas repetitivas e criar processos padronizados dentro do Excel.

Conclusão

Neste exemplo, criamos uma macro capaz de separar uma base de dados em várias planilhas utilizando o ano e o mês como critério. O procedimento identifica a quantidade de registros, ordena a base, percorre as linhas, cria as abas necessárias, copia os cabeçalhos e transfere os registros para seus respectivos períodos.

Embora o exemplo utilize o mês como critério, a lógica pode ser aproveitada em diversos outros projetos. Basta substituir o campo utilizado para determinar a separação e ajustar as referências da macro conforme a estrutura da base.

Esse tipo de automação é especialmente interessante em relatórios recorrentes, controles financeiros, bases comerciais, registros administrativos e outras situações em que os mesmos dados precisam ser distribuídos em diferentes grupos.

Se você trabalha frequentemente com Excel, recomendo entender não apenas como executar esse código, mas também como cada etapa funciona. Dessa maneira, fica muito mais fácil adaptar a solução para suas próprias necessidades e criar outras automações a partir do mesmo conceito.

Então é isso. Essa macro pode ser adaptada a diversas necessidades com poucas alterações e é um bom exemplo de como o VBA pode simplificar tarefas repetitivas no Excel.

Este conteúdo foi útil?

Continue lendo