TerrorJapones
TerrorJapones

Reputation: 1

Macro that Delete a Row on a Sheet based on another Sheet

I have a macro that consolidate the values on another sheet, and based on these values, it´s has to go back on the first sheet and delete.

The sheet it´s like this, if the value on the G2 it´s (Manter a linha), it´s get the number of the row on the F2, and goes to delete the previews of the row. Else, goes to I2, and do the same. Thank you for your help and time.

Sheet

I have this so far:

Sub Delete() 

    Range("G2").Select
    Do Until IsEmpty(ActiveCell)
    Range("G" & Rows.Count).Select
    If Range("G" & 2).Value = ("<<<Manter a linha") Then
    Sheets("Controle Estoque Fixo").Select
    Rows("2:5").Select
    Selection.EntireRow.Delete
    End If
    Loop

EDIT:

Dim r1 As Range, c As Range
    Dim s As String
    Dim v As String
    Dim k As String
    Dim t As String
    k = "1"
    Set r1 = Range(Cells(2, "H"), Cells(Rows.Count, "H").End(xlUp))
    v = Sheets("Analise de Estoque").Cells(2, "G").Value
    For Each c In r1
        If c.Text = ("<<<Manter a linha") Then
        Sheets("Controle Estoque Fixo").Select
        t = (v - 1)

       Rows(t).Select.Clear


        End If
    Next
End Sub

Now I can go back and select the value of the cell that contains the row, that I want to keep, so I add a "- 1" to select before that, but I tried to add the begging and won´t work(tried to add T as a string and put = 1)

Upvotes: 0

Views: 911

Answers (1)

user6432984
user6432984

Reputation:

You need to build your range and delete all the rows at once.

Sub DeleteMatches()
    Dim r1 As Range, c As Range
    Dim s As String

    Set r1 = Range(Cells(2, "G"), Cells(Rows.Count, "G").End(xlUp))

    For Each c In r1
        If c = "<<<Manter a linha" Then
            If Len(s) Then s = s & ","
            s = s & "A" & c.Offset(0, -1)
        End If
    Next

    If Len(s) Then
        s = Left(s, Len(s) - 1)
        Sheets("Controle Estoque Fixo").Range(s).EntireRow.Delete
    End If

End Sub

If you only want to clear the rows and not delete then them then you can do it your way.

Sub DeleteMatches2()
    Dim r1 As Range, c As Range
    Dim t As String

    With Sheets("Analise de Estoque")
        Set r1 = .Range(.Cells(2, "H"), .Cells(Rows.Count, "H").End(xlUp))
    End With

    For Each c In r1
        If c.Text = "<<<Manter a linha" Then
            Sheets("Controle Estoque Fixo").Select
            t = c.Offset(0, -1)
            Rows(t).ClearContents
        End If
    Next
End Sub

Sub DeleteMatches3()
    Dim r1 As Range, c As Range
    Dim i As Long, LastRow As Long
    Dim t As String

    With Sheets("Analise de Estoque")
        LastRow = .Cells(Rows.Count, "H").End(xlUp)
        For i = 2 To LastRow
            If .Cells(i, "G").Text = "<<<Manter a linha" Then
                t = .Cells(i, "F").Text
                Sheets("Controle Estoque Fixo").Rows(t).ClearContents
            End If
        Next

    End With
End Sub

Just remember that when you delete rows you have to go from the last row to the first

    For i = LastRow To 2 Step - 1

    Next

Upvotes: 1

Related Questions