question on hiding rows
thanks bob, i'll give those a try.
--
Gary
"Bob Phillips" wrote in message
...
Why don't you build up a range of the rows as you find a match, and the hide
the range at the end
With ws
For x = 5 To lastrow
If cell_meets_condition Then
If rng Is Nothing Then
Set rng = Rows(x)
Else
Set rng = Union(rng, Rows(x))
End If
End If
Nex t
If Not rng Is Nothing Then rng.Hidden = True
End With
or better, filter by your condition anhd delete visible rows.
--
HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my addy)
"Gary Keramidas" <GKeramidasATmsn.com wrote in message
...
that's not the problem, those are already off.
--
Gary
"Franz Erhart" wrote in message
...
Switch off ScreenUpdating and AutoCalculation to make it much faster.
I was able to hide 500 rows in no time - try it this way:
Sub HideRows()
Dim j As Integer
Application.ScreenUpdating = False ' makes it much faster
Application.Calculation = xlManual
For j = 6 To 510
Worksheets("ListX").Range("A" & j).EntireRow.Hidden = True
Next j
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub
"Gary Keramidas" wrote:
i have to loop through some rows and test to see which rows to hide. if i
hide
the rows as i loop it takes 2 to 3 seconds to hide them. so i looked for a
better way.
as i loop, i create and array with a cell address of which rows i want to
hide.
the only problem is, if the string is more than 256 characters, it won't
work:
if this range contained more than 256 characters it wouldn't work
range("A6,A9,A12,A15").entirerow.hidden = true
so i wrote the code below and was wondering if there was a better way. this
code
runs instantaneously, as opposed to 2 or 3 seconds to loop and hide each
row 1
at a time.
it basically adds the cell address to a string until there are 50 address,
then
it hides 50 rows at a time and resets the array. then what's less than 50
at the
end gets hidden when the loop exits.
data starts at row 5:
With ws
For x = 5 To lastrow
If .Range("G" & x).Value < 0 Or .Range("H" & x).Value <
0 _
Then
'do nothing
Else
ReDim Preserve arr(1 To x - 5)
arr(x - 5) = .Range("A" & x).Address(0, 0)
If cAddr = "" Then
cAddr = arr(x - 5)
Else
cAddr = cAddr & "," & arr(x - 5)
End If
If UBound(arr) Mod 50 = 0 Then
.Range(cAddr).EntireRow.Hidden = True
cAddr = ""
ReDim arr(1 To 1)
End If
End If
Next
ws.Range(cAddr).EntireRow.Hidden = True
End With
--
Gary
|