Article ID: 184378
Article Last Modified on 6/17/2005
A1: a B1: 1 A2: b B2: 2 A3: x B3: 3 A4: x B4: 4 A5: c B5: 5 A6: x B6: 6 A7: d B7: 7 A8: x B8: 8 A9: x B9: 9 A10: e B10: 10
Sub DeleteCells()
'Loop through cells A1:A10 and delete cells that contain an "x."
For Each c in Range("A1:A10")
If c = "x" Then c.EntireRow.Delete
Next
End Sub
A1: a B1: 1 A2: b B2: 2 A3: x B3: 4 A4: c B4: 5 A5: d B5: 7 A6: x B6: 9 A7: e B7: 10When Microsoft Excel deletes row 3, all cells move up one row. For example, cell A3 assumes the contents of cell A4, cell A4 assumes the contents of cell A5, and so forth. After the For Each...Next loop evaluates a cell, it evaluates the next cell; therefore, when cells are shifted, they may be skipped by the loop.
A1: a B1: 1 A2: b B2: 2 A3: c B3: 5 A4: d B4: 7 A5: e B5: 10When row 3 is deleted, all cells move up one row; and cell A3 assumes the contents of cell A4, cell A4 assumes the contents of cell A5, and so forth. However, unlike the behavior of the loop in Microsoft Excel 98, when the For Each...Next loop evaluates a cell in Microsoft Excel 5.0, it reevaluates the cell if it is deleted in the loop; therefore, the cells are not skipped.
Sub DeleteCells2()
Dim rng As Range
Dim i As Integer, counter As Integer
'Set the range to evaluate to rng.
Set rng = Range("A1:A10")
'initialize i to 1
i = 1
'Loop for a count of 1 to the number of rows
'in the range that you want to evaluate.
For counter = 1 To rng.Rows.Count
'If cell i in the range contains an "x",
'delete the row.
'Else increment i
If rng.Cells(i) = "x" Then
rng.Cells(i).EntireRow.Delete
Else
i = i + 1
End If
Next
End Sub
The results of this macro in Microsoft Excel 98 and earlier versions are as
follows:
A1: a B1: 1 A2: b B2: 2 A3: c B3: 5 A4: d B4: 7 A5: e B5: 10
Sub DeleteCells3()
Dim rng As Range, i As Integer
'Set the range to evaluate to rng.
Set rng = Range("A1:A10")
'Loop backwards through the rows
'in the range that you want to evaluate.
For i = rng.Rows.Count To 1 Step -1
'If cell i in the range contains an "x", delete the entire row.
If rng.Cells(i).Value = "x" Then rng.Cells(i).EntireRow.Delete
Next
End Sub
176476 OFF: Office Assistant Not Answering Visual Basic Questions
Additional query words: 8.0 8.00 XL98
Keywords: kbconversion kbprogramming kbprb KB184378