Olá pessoal. Hoje vamos resolver um problema de diversos usuários (eu inclusive) e que resolvi postar após receber o pedido do leitor Sérgio S. no nosso post sobre como trabalhar os dados em pastas e planilhas diferentes.

Bom, a dica de hoje é a seguinte: Como fazer cópia de algum valor para outra célula ou planilha após esse valor alcançar determinada condição. Ficou confuso? Por exemplo. Tenho uma planilha com gastos domésticos onde armazeno as saídas de dinheiro e especifico como sendo por "Cartão". "Dinheiro" e "Cheque".

Quero então separar os valores em planilhas separadas: Uma planilha para cartão, outra para dinheiro e outra para cheque. Como fazer? Com o código VBA que vamos aprender a partir de agora =)

O exemplo acima citado será este:

Veja que separei por 4 tipos de gastos. Lá embaixo têm também as 4 abas onde vão ir nossos dados copiados. Detalhe: No final do post você vai poder fazer o download e vai reparar que eu coloquei uma lista com as opções que podem ser selecionadas "cheque", "cartão", etc. Veja como aprender a fazer isso aqui neste link.

Pronto, agora está tudo pronto e vamos começar a mágica com o nosso código de VBA. Aperte Alt +F11 e vamos entrar na janela de edição de códigos. Nela vamos dar 2 cliques em "Planilha 1 (Base)". Agora cole o seguinte código:

Private Sub Worksheet_Deactivate()

Worksheets("Card").Range("A1:c1000").ClearContents
 
 For I = 1 To 10000
   If Worksheets("base").Cells(I, 1) = "" Then Exit For
   If Worksheets("base").Cells(I, 3) = "Card" Then
    Linha = Application.WorksheetFunction.CountA(Worksheets("Card").Range("A1:A1000"))
    Linha = Linha + 2
    Worksheets("Card").Cells(Linha, 1) = Worksheets("base").Cells(I, 1)
    Worksheets("Card").Cells(Linha, 2) = Worksheets("base").Cells(I, 2)
    Worksheets("Card").Cells(Linha, 3) = Worksheets("base").Cells(I, 3)
   End If
  Next I

End Sub

 Na prática vai ficar assim:

Bom, você reparar ver que o código do exemplo está diferente do download. Essa diferença é porque ali em cima está a versão inicial, e no download a versão editada para se encaixar no nosso exemplo. Vamos ver um pouco como editá-la a partir do próximo parágrafo.

Worksheets("Card").Range("B2:f1000").ClearContents
Worksheets("Cheque").Range("B2:f1000").ClearContents
Worksheets("Dinheiro").Range("B2:f1000").ClearContents
Worksheets("Outros").Range("B2:f1000").ClearContents

Essa 1ª parte editável faz o seguinte: Cada vez que clicarmos no botão para fazer a separação (já vamos ver como criar o botão) ele limpa a planilha com os resultados antigos e coloca os novos e atualizados resultados. Por isso meu exemplo tem linhas a mais e todas editadas. Uma para cada planilha.

If Worksheets("base").Cells(I, 2) = "" Then Exit For

Faz o teste. Se encontra ruma linha vazia o processo é interrompido. Por isso você não pode deixar nenhuma linha em braço entre os dados.

f Worksheets("base").Cells(I, 6) = "Cartão" Then
Linha = Application.WorksheetFunction.CountA(Worksheets("Card").Range("B2:B2000"))
Linha = Linha + 2

Aqui vamos dizer onde queremos que ele comece a colocar os dados depois de copiados. No exemplo acima comecei a colocar em B2 e ele vai colocando abaixo disso.

Worksheets("Card").Cells(Linha, 1) = Worksheets("base").Cells(I, 2)
Worksheets("Card").Cells(Linha, 2) = Worksheets("base").Cells(I, 4)
Worksheets("Card").Cells(Linha, 3) = Worksheets("base").Cells(I, 6)

Essa parte faz uma comparação (veja entre aspas da primeira linha) e redireciona o valor para a planilha correspondente (ATENÇÃO: Aqui você também vai precisar editar os nomes correspondentes para tudo ir para o lugar certinho. Compare com o exemplo aqui do site caso precise editar uma planilha aí na sua casa).

É nesta parte também que vamos acertar a referência para a coluna. No exemplo inicial está 1, 2 e 3. Assim o Excel checa as colunas A, B e C. Como no caso do exemplo foram utilizadas as colunas B, D e F serão atualizados os valores para 2, 4 e 6, respectivamente.

Agora é só conferir o seu ponto inicial de busca. Veja que no exemplo original colocamos as referências como (1,1) através do código (I,1), onde o primeiro dígito é a LINHA e o segundo é a COLUNA.

For I = 5 To 10000

Repare que minha primeira célula com valor é B5. Dessa forma, meu "I" ficou definido como 5.
No final de tudo, o meu exemplo ficou assim:

Lembra que falamos em criar um botão? Ele é opcional e poderá ser necessário caso seu Excel não passe automaticamente os valores para a sua planilha correspondente. Insira-o se quiser e pronto.

Não sabe como criar um botão e atribuir uma macro? Clique aqui e aprenda =D

Abaixo segue o botão de download.

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.