Copiar para a próxima linha em branco - Dicas do Excel

Índice

NYARCH escreve

Eu quero que o Excel copie uma linha inteira para uma nova planilha do Excel com base em uma entrada de célula. Por exemplo, tenho dados nas células A8: AG8, quero que o Excel copie a linha inteira para a planilha "a" se o valor em H8 for "ir" e para a planilha "b" se o valor em H8 for "RR". A parte mais complicada e não apenas copiada, preciso copiá-la para a próxima linha em branco da planilha. Das 150 linhas ou mais, apenas cerca de 15 de cada tipo serão realmente copiados para uma nova folha.

MrExcel concederá 50 pontos de bônus a qualquer leitor que se lembre do artigo da Lotus Magazine oferecendo 10 ótimas dicas, onde a dica nº 4 era "Use a tecla End para ir para o fim de um intervalo". Voltando aos dias da Lotus, você poderia colocar o ponteiro de célula em qualquer lugar em um bloco de dados, apertar END e então para baixo, e o ponteiro de célula iria cavalgar até o fim do intervalo. O Excel tem funcionalidade semelhante, o VBA tem funcionalidade semelhante e esta é a chave para localizar a última linha de dados em uma planilha.

A técnica VBA é usar End (xlDown) para simular a tecla End + Down ou End (xlUp) para simular a tecla End + Up. Pressionar esta sequência de teclas moverá o ponteiro da célula para a próxima borda de um intervalo contíguo de dados. Imagine que existem valores em A1: A10 e A20: A30. Comece em A1. Pressione End + Down e o ponteiro da célula se moverá para A10. Pressione End + Down e você vai para A20, que é a borda superior do próximo intervalo contíguo de dados. Aperte End + Down e você irá para A30. Na verdade, não sei como explicar esse comportamento em um inglês simples. Experimente e verá como funciona.

O truque que uso é começar na Coluna A, na última linha da planilha, e então clicar em Fim + Acima. Isso me levará para a linha final com dados. Então, sei que devo usar a próxima linha para baixo como uma linha em branco.

Aqui está uma macro de força bruta para resolver o problema desta semana. Sim, você certamente poderia fazer isso de forma mais elegante com um AutoFiltro. Os dados estão atualmente na Folha1, com títulos na linha 2.

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Range("A65536").End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Range("H" & x).Value If ThisValue = "ir" Then Range("A" & x & ":AG" & x).Copy Sheets("a").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Range("A" & x & ":AG" & x).Copy Sheets("b").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Visto que o Excel 2007 tem mais de 65.536 linhas, você pode usar essa macro para que seja compatível com versões futuras. Observe que eu uso CELLS (Row, Column) em vez de RANGE aqui:

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Cells(x, 8).Value If ThisValue = "ir" Then Cells(x, 1).Resize(1, 33).Copy Sheets("a").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Cells(x, 1).Resize(1, 33).Copy Sheets("b").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Para obter dicas sobre como usar uma macro, consulte Apresentando o Editor VBA do Excel.

Artigos interessantes...