Vba: copie linhas para outra planilha com base em critérios
Você pode usar a seguinte sintaxe no VBA para copiar cada linha de uma planilha que atenda a critérios específicos para outra planilha:
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets(" Sheet1 ")
LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets(" Sheet2 ")
j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 TB LastRow
With Worksheets(" Sheet1 ")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
j = j + 1
End If
End With
Next i
End Sub
Esta macro específica copiará cada linha de Sheet1 onde a coluna A é igual a “Mavs” e colará cada uma dessas linhas nas próximas linhas disponíveis de Sheet2 .
O exemplo a seguir mostra como usar essa sintaxe na prática.
Exemplo: copiar linhas para outra planilha com base em critérios usando VBA
Suponha que temos o seguinte conjunto de dados na Planilha 1 , que contém informações sobre vários jogadores de basquete:
E suponha que temos o seguinte conjunto de dados em Sheet2 :
Observe que a Planilha2 contém apenas dados dos jogadores do time Warriors.
Digamos que queremos copiar cada linha de Sheet1 onde a coluna Team é igual a Mavs e colar cada uma dessas linhas nas próximas linhas disponíveis de Sheet2 .
Podemos criar a seguinte macro para fazer isso:
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets(" Sheet1 ")
LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets(" Sheet2 ")
j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 TB LastRow
With Worksheets(" Sheet1 ")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
j = j + 1
End If
End With
Next i
End Sub
Quando executamos esta macro, recebemos a seguinte saída em Sheet2 :
Observe que cada linha em Sheet1 onde o nome da equipe era igual a Mavs foi colada nas próximas linhas disponíveis em Sheet2 .
Nota : Você pode encontrar a documentação completa do método VBA Copy aqui .
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em VBA:
VBA: Como encontrar a última linha usada
VBA: Como contar o número de linhas no intervalo
VBA: Como contar o número de colunas usadas