Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I've read (in the forums) that it is best to delete from
bottom up and I use this technique, however I'm having a bit of trouble setting up a for loop for one of my lists. I have a filtered list and have been looping through the code (from top to bottom) by the following. 'Row one is the header row intFrstRow = Range("A1").End(xlDown).Row intLastRow = Range("A" & intFrstRow).End(xlDown).Row 'Create range Range("A" & intFrstRow &, "A" & intLastRow).SpecialCells (xlCellTypeVisible).Select I tried setting the range the other way (intLastRow, intFirstRow) but that didn't help. The only method I can think of (one given by a helpful MVP) is using a do loop to start at the end and count backwards until hits a visible row. Is there a faster method than this? Thanks Hafeez Esmail |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
One way:
This sets up a range of rows to delete, then deletes all the unwanted lines at once: Dim rDelete As Range Dim rCell As Range On Error Resume Next 'in case no visible cells For Each rCell In Range("A2:A" & Range("A" & _ Rows.Count).End(xlUp).Row).SpecialCells(xlCellType Visible) If rCell.Value = 1 Then 'or whatever criteria you use If rDelete Is Nothing Then Set rDelete = rCell Else Set rDelete = Union(rDelete, rCell) End If End If Next rCell On Error GoTo 0 If Not rDelete Is Nothing Then rDelete.EntireRow.Delete In article , "Hafeez Esmail" wrote: I've read (in the forums) that it is best to delete from bottom up and I use this technique, however I'm having a bit of trouble setting up a for loop for one of my lists. I have a filtered list and have been looping through the code (from top to bottom) by the following. 'Row one is the header row intFrstRow = Range("A1").End(xlDown).Row intLastRow = Range("A" & intFrstRow).End(xlDown).Row 'Create range Range("A" & intFrstRow &, "A" & intLastRow).SpecialCells (xlCellTypeVisible).Select I tried setting the range the other way (intLastRow, intFirstRow) but that didn't help. The only method I can think of (one given by a helpful MVP) is using a do loop to start at the end and count backwards until hits a visible row. Is there a faster method than this? Thanks Hafeez Esmail |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dim rng as Range
set rng = ActiveSheet.Autofilter.Range.Columns(1) ' exclude the header row set rng = rng.offset(1,0).Resize(rng.rows.count-1) rng.SpecialCells(xlvisible).Select -- Regards, Tom Ogilvy "Hafeez Esmail" wrote in message ... I've read (in the forums) that it is best to delete from bottom up and I use this technique, however I'm having a bit of trouble setting up a for loop for one of my lists. I have a filtered list and have been looping through the code (from top to bottom) by the following. 'Row one is the header row intFrstRow = Range("A1").End(xlDown).Row intLastRow = Range("A" & intFrstRow).End(xlDown).Row 'Create range Range("A" & intFrstRow &, "A" & intLastRow).SpecialCells (xlCellTypeVisible).Select I tried setting the range the other way (intLastRow, intFirstRow) but that didn't help. The only method I can think of (one given by a helpful MVP) is using a do loop to start at the end and count backwards until hits a visible row. Is there a faster method than this? Thanks Hafeez Esmail |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks guys :-)
You're the best! -----Original Message----- Dim rng as Range set rng = ActiveSheet.Autofilter.Range.Columns(1) ' exclude the header row set rng = rng.offset(1,0).Resize(rng.rows.count-1) rng.SpecialCells(xlvisible).Select -- Regards, Tom Ogilvy "Hafeez Esmail" wrote in message ... I've read (in the forums) that it is best to delete from bottom up and I use this technique, however I'm having a bit of trouble setting up a for loop for one of my lists. I have a filtered list and have been looping through the code (from top to bottom) by the following. 'Row one is the header row intFrstRow = Range("A1").End(xlDown).Row intLastRow = Range("A" & intFrstRow).End(xlDown).Row 'Create range Range("A" & intFrstRow &, "A" & intLastRow).SpecialCells (xlCellTypeVisible).Select I tried setting the range the other way (intLastRow, intFirstRow) but that didn't help. The only method I can think of (one given by a helpful MVP) is using a do loop to start at the end and count backwards until hits a visible row. Is there a faster method than this? Thanks Hafeez Esmail . |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
compare cells, copy, loop | Excel Worksheet Functions | |||
How do I loop a range of cells until I get a numeric value? | New Users to Excel | |||
HOW-TO? Loop through cells in a column | Excel Programming | |||
VBA loop cells | Excel Programming | |||
How to loop through cells in macro | Excel Programming |