View Single Post
  #5   Report Post  
Posted to microsoft.public.excel.programming
Gary Keramidas Gary Keramidas is offline
external usenet poster
 
Posts: 2,494
Default 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