简体   繁体   中英

Deleting rows in Excel according to ID and cell value

I have an excel worksheet with a lot of data that needs pruning.

Data is a organized by ID number with multiple rows attached to a given ID. For each unique ID, I need to to keep all rows with certain codes (which are found in column B). I also need to keep the rows immediately above the rows with the "keeper codes," provided such a row exists. If no such row exists, then I need to insert a blank row.*

For a given ID, if no "keeper code" is present, then all rows associated with the ID should be deleted. All rows not associated with a "keeper code" or immediately above a row with a "keeper code" should be deleted.

Probably best explained by screenshot. Data will be sorted by ID number as pictured.

之前

后

*Inserting a blank row would be nice but if it makes the coding difficult then is not very necessary.

Thanks much!

Try this out,

Sub copyRows()
Dim i As Long, j As Long
Sheets.Add.Name = "newSheet"
Rows(1).Copy Sheets("newSheet").Cells(1, 1)
j = Sheets("newSheet").Cells(Rows.Count, 1).End(xlUp).Row + 1
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If InStr(Cells(i, 2), "Keep") > 0 And Cells(i, 1) = Cells(i - 1, 1) Then
        Rows(i - 1).Copy Sheets("newSheet").Cells(j, 1)
        Rows(i).Copy Sheets("newSheet").Cells(j + 1, 1)
    ElseIf InStr(Cells(i, 2), "Keep") > 0 Then
        Rows(i).Copy Sheets("newSheet").Cells(j, 1)
    End If
    j = Sheets("newSheet").Cells(Rows.Count, 1).End(xlUp).Row + 1
Next i
End Sub

If inserting empty rows is necessary you may have to work on that logic.

在此处输入图片说明

This macro creates a new sheet with the output.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM