Este tutorial demonstrará como excluir ou inserir linhas com base nos valores das células.
Excluir linha com base no valor da célula
Isso fará um loop por um intervalo e excluirá as linhas se a coluna A disser “excluir”.
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop Through Rows (de baixo para cima)Para Row = LastRow to FirstRow Passo -1If .Range ("A" & Row) .Value = "delete" Then.Range ("A" & Row) .EntireRow.DeleteFim sePróxima linhaTerminar comEnd Sub |
Devemos iniciar o loop com a linha inferior porque a exclusão de uma linha mudará os dados, pulando as linhas se você fizer um loop de cima para baixo.
Além disso, observe que em vez de inserir manualmente na última linha, calculamos a última linha usada.
Excluir linha - com base no filtro
No exemplo anterior, percorremos as linhas, excluindo cada linha que atende aos critérios. Como alternativa, podemos usar o AutoFiltro do Excel para filtrar linhas com base em alguns critérios e, em seguida, excluir as linhas visíveis:
12345678910111213141516171819202122232425 | Sub FilterAndDeleteRows ()'Declare a variável wsDim ws como planilhaDefinir ws = ActiveSheet'Redefinir Filtros ExistentesOn Error Resume Nextws.ShowAllDataNo erro GoTo 0'Aplicar filtrows.Range ("a1: d100"). Campo do filtro automático: = 1, Criteria1: = "excluir"'Excluir linhasApplication.DisplayAlerts = Falsews.Range ("a1: d100"). SpecialCells (xlCellTypeVisible) .DeleteApplication.DisplayAlerts = True'Filtro limpoOn Error Resume Nextws.ShowAllDataNo erro GoTo 0End Sub |
Excluir linha com base nos critérios da célula
Isso fará um loop em um intervalo, excluindo linhas se a célula na coluna A atender a certos critérios (<0):
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop Through Rows (de baixo para cima)Para Row = LastRow to FirstRow Passo -1If .Range ("A" & Row) .Value <0 Then.Range ("A" & Row) .EntireRow.DeleteFim sePróxima linhaTerminar comEnd Sub |
Programação VBA | O Code Generator funciona para você!
Excluir linha se a célula estiver em branco
Isso fará um loop em um intervalo, excluindo uma linha se uma célula na coluna A estiver em branco:
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop através das linhas (de baixo para cima)Para Row = LastRow to FirstRow Passo -1If .Range ("A" & Row) .Value = "" Then.Range ("A" & Row) .EntireRow.DeleteFim sePróxima linhaTerminar comEnd Sub |
Excluir linha em branco
Como alternativa, se você deseja excluir uma linha se toda a linha estiver em branco (clique no link para obter um método um pouco diferente), você pode usar este código:
1234567891011121314151617181920 | Sub DeleteBlankRows ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop através das linhas (de baixo para cima)Para Row = LastRow to FirstRow Passo -1Se WorksheetFunction.CountA (.Rows (Row)) = 0 Then.Rows (Row) .EntireRow.DeleteFim sePróxima linhaTerminar comEnd Sub |
Excluir linha se a célula contiver valor
Isso fará um loop em um intervalo, excluindo uma linha se a célula na coluna A não estiver em branco:
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop Through Rows (de baixo para cima)Para Row = LastRow to FirstRow Passo -1If .Range ("A" & Row) .Value "" Then.Range ("A" & Row) .EntireRow.DeleteFim sePróxima linhaTerminar comEnd Sub |
Cansado de procurar exemplos de código VBA? Experimente o AutoMacro!
Inserir linha com base no valor da célula
Isso fará um loop em um intervalo, inserindo linhas se uma determinada célula nessa linha disser “inserir”:
1234567891011121314151617181920 | Sub InsertRowsBasedonCellValue ()'Declarar VariáveisDim LastRow As Long, FirstRow As LongDim Row As LongCom ActiveSheet'Definir a primeira e a última linhaFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Loop Through Rows (de baixo para cima)Para Row = LastRow to FirstRow Passo -1If .Range ("A" & Row) .Value = "inserir" Then.Range ("A" & Row) .EntireRow.InsertFim sePróxima linhaTerminar comEnd Sub |