Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
loop to delete rows...
here's the issue: I'm trying to delete all the rows which
start with "total:" and "subtotal:" in column A. I had to use 2 loops because when there is a subtotal row directly followed by a total row, the total row is "skipped". I'm not sure that I'm making myself very clear but any help would be appreciated... Ideally I'd like to replace the 2 loops by 1. Here's what I have so far: sub delRows() Dim c As Range For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "SubTotal*" Then c.EntireRow.Delete End If Next c For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "Total*" Then c.EntireRow.Delete End If Next c end sub |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
loop to delete rows...
Hi
the problem for this kind of operation is that you have to work from the bottom to the top (not vice versa). e.g. try Sub delete_rows() Dim lastrow As Long Dim row_index As Long Application.ScreenUpdating = False lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row For row_index = lastrow To 1 Step -1 If instr(cells(row_index,1).value, "Total")0 " then Rows(row_index).delete End If Next Application.ScreenUpdating = True End Sub -- Regards Frank Kabel Frankfurt, Germany Froglegz wrote: here's the issue: I'm trying to delete all the rows which start with "total:" and "subtotal:" in column A. I had to use 2 loops because when there is a subtotal row directly followed by a total row, the total row is "skipped". I'm not sure that I'm making myself very clear but any help would be appreciated... Ideally I'd like to replace the 2 loops by 1. Here's what I have so far: sub delRows() Dim c As Range For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "SubTotal*" Then c.EntireRow.Delete End If Next c For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "Total*" Then c.EntireRow.Delete End If Next c end sub |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
loop to delete rows...
Dim lrow as Long, i as Long
lrow = Cells(rows.count,1).End(xlUp).row for i = lrow to 1 step -1 If instr(1,cells(i,1).Text,"total",vbTextCompare) Then cells(i,1).EntireRow.Delete End If Next i -- Regards, Tom Ogilvy "Froglegz" wrote in message ... here's the issue: I'm trying to delete all the rows which start with "total:" and "subtotal:" in column A. I had to use 2 loops because when there is a subtotal row directly followed by a total row, the total row is "skipped". I'm not sure that I'm making myself very clear but any help would be appreciated... Ideally I'd like to replace the 2 loops by 1. Here's what I have so far: sub delRows() Dim c As Range For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "SubTotal*" Then c.EntireRow.Delete End If Next c For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "Total*" Then c.EntireRow.Delete End If Next c end sub |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
loop to delete rows...
The Total row is skipped because deleting a row renumbers the rows, but
not the loop variable. You can reduce it to one loop by looping "backwards" (from highest row to lowest row), or do something like this: Public Sub DelRows() Dim rCell As Range Dim rDelete As Range For Each rCell in Range("A1:A" & _ Range("A" & Rows.Count).End(xlUp).Row) If rCell.Text like "Total*" Then If rDelete Is Nothing Then Set rDelete = rCell Else Set rDelete = Union(rDelete, rCell) End If End If Next rCell If Not rDelete Is Nothing Then _ rDelete.EntireRow.Delete End Sub In article , "Froglegz" wrote: here's the issue: I'm trying to delete all the rows which start with "total:" and "subtotal:" in column A. I had to use 2 loops because when there is a subtotal row directly followed by a total row, the total row is "skipped". I'm not sure that I'm making myself very clear but any help would be appreciated... Ideally I'd like to replace the 2 loops by 1. Here's what I have so far: sub delRows() Dim c As Range For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "SubTotal*" Then c.EntireRow.Delete End If Next c For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "Total*" Then c.EntireRow.Delete End If Next c end sub |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
loop to delete rows...
One option:
Sub delRows() Dim i As Long Dim LR As Long LR = Cells(1).End(xlDown).Row For i = LR To 2 Step -1 If InStr(1, Cells(i, 1), "Total", vbTextCompare) 0 Then If Left(Cells(i, 1), 5) = "Total" Then If Not Left(Cells(i - 1, 1), 8) = "SubTotal" Then Rows(i).Delete End If Else Rows(i).Delete End If End If Next End Sub RBS "Froglegz" wrote in message ... here's the issue: I'm trying to delete all the rows which start with "total:" and "subtotal:" in column A. I had to use 2 loops because when there is a subtotal row directly followed by a total row, the total row is "skipped". I'm not sure that I'm making myself very clear but any help would be appreciated... Ideally I'd like to replace the 2 loops by 1. Here's what I have so far: sub delRows() Dim c As Range For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "SubTotal*" Then c.EntireRow.Delete End If Next c For Each c In Range(Range("a1"), Range("a1").End (xlDown)).Cells If c.Text Like "Total*" Then c.EntireRow.Delete End If Next c end sub |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Loop & Delete | Excel Discussion (Misc queries) | |||
How to Delete Rows in Excel In a Do Loop | Excel Worksheet Functions | |||
Adding a loop to conditional delete code | New Users to Excel | |||
Excel VBA - Help with a loop, compare, delete problem | Excel Programming | |||
How do I delete rows and columns in With With End Loop? | Excel Programming |