LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 10,124
Default Setting a Filtered Range

OR (Also gives the actual row)

Sub filterem()
Dim lr As Long
Dim mr, r As Range
lr = Cells(Rows.Count, "a").End(xlUp).Row
With Range(Cells(4, "a"), Cells(lr, 3))
.AutoFilter Field:=1, Criteria1:="red"
.AutoFilter Field:=2, Criteria1:="<5"
Set mr = .Offset(1).Columns(3). _
SpecialCells(xlCellTypeVisible)
For Each r In mr
If r < "" Then MsgBox "Row " & r.Row & " col C=" & r
Next
.AutoFilter
End With
End Sub

--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"Andy" wrote in message
...
Figured it out (assuming Column headings in row 4), code is :-

Dim FilterColC
Dim fc, ii, rn As Integer

ActiveSheet.Rows("4:4").AutoFilter
ActiveSheet.Rows("4:4").AutoFilter Field:=1, Criteria1:="red"
ActiveSheet.Rows("4:4").AutoFilter Field:=2, Criteria1:="<5",
Operator:=xlAnd

fc = ActiveSheet.AutoFilter.Range.Rows.Count
ii = 1
rn = 1
For Each rw In ActiveSheet.AutoFilter.Range.Rows.Offset(1) ' Offset skips
visible header
If rw.EntireRow.Hidden = False Then
If ii < fc Then
FilterColC = rw.Cells(1, 3).Value
MsgBox "Filtered Row" & rn & " ColC = " & FilterColC
rn = rn + 1
End If
End If
ii = ii + 1
Next

ActiveSheet.Rows("4:4").AutoFilter


Thanks anyway.

"Don Guillett" wrote:

Send me your file along with this and what you have done so I don't have
to
reconstruct
--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"Andy" wrote in message
...
Sorry for confusion

Take data set :-

ColA ColB ColC
blue 9 Tuesday
red 4 Friday
green 8 Monday
red 3 Saturday
red 7 Tuesday


Filter on ColA = "red" and ColB <5

We get

ColA ColB ColC
red 4 Friday
red 3 Saturday

If I get value in 2nd row, Col C of filtered range I would expect
"Saturday"
but I get "Monday". The reason, I think, is that Monday is the 2nd row
of
full set of data following the first row that meets criteria.

How do I get Saturday without copying data to another sheet? Your copy
method would work actually.

Hope this helps.

"Don Guillett" wrote:

Since you did NOT say what you wanted to do with the range I just
threw
that
in to show what COULD be done. You still don't say what you really
want.
If
desired, send your file to my address below along with a copy of this
msg
and a CLEAR explanation of what you do want.





--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"Andy" wrote in message
...
I will look at this properly tomorrow but it looks like you have
suggested
something that had also occurred to me. You have copied the filtered
range
to
another sheet so that the set of data can be worked on there. Fine.

Is it not possible though, to avoid copying to another sheet and
work
through the filtered range in the original sheet?

What I am really trying to understand is how to refer to the 1st,
2nd,
3rd
etc. rows in a filtered range when, in VBA, you do not know the
actuals
row
numbers for those cells which are SpecialCells(xlCellTypeVisible).

I basically want to loop through just those rows which satisfy the
filter
criteria. I thought that by using a pre-filter, it would be much
more
efficient than looping through all rows in the worksheet and
checking
each
row for the criteria values.

Thanks again.

"Don Guillett" wrote:

Modify to suit. Assumes 4 is your header row. The offset 1 is
omitting.

Sub filterem()
lr = Cells(Rows.Count, "a").End(xlUp).Row
With Range(cells(4,"a"),cells(lr,13))
Selection.AutoFilter
.AutoFilter Field:=2, Criteria1:="Fred""
.AutoFilter Field:=6, Criteria1:="Green"
.AutoFilter Field:=13 Criteria1:="<0"
Set mr = .Offset(1).SpecialCells(xlCellTypeVisible)
End With
mr.Copy Sheets("sheet3").Range("a1")
End Sub


--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"Andy" wrote in message
...
I am struggled to set a Filtered range.
First I set the Filter :-

objSht1.Rows("4:4").AutoFilter
objSht1.Rows("4:4").AutoFilter Field:=2, Criteria1:="Fred"
objSht1.Rows("4:4").AutoFilter Field:=6, Criteria1:="Green"
objSht1.Rows("4:4").AutoFilter Field:=13, Criteria1:="<0",
Operator:=xlAnd

Now I want to set a Range to be that Filtered set. I have tried

Set FilteredRge =
objSht1.AutoFilter.Range.Resize(objSht1.AutoFilter .Range.Rows.Count
-
1,
1).Offset(1, 0).Cells.SpecialCells(xlCellTypeVisible)

The idea was to omit the header from the filtered range.

This sort of works but if there are only 2 rows in my filtered
range,
say
row 45 and row 112, then I want to work through my filtered range
and
examine
cell values in that range. So, I want the 2nd row of my filted
range
to
be
row 112 in the spreadsheet. If I use FilteredRge(2, 4).Value I
get
Column
D
from row 46 not column D from row 112 as I want.

Can anyone help?











 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Sum a filtered range Peter Excel Discussion (Misc queries) 2 April 30th 09 07:57 AM
creating a filtered range/named range mark kubicki Excel Programming 1 November 4th 06 03:14 PM
setting range().hidden=True causes range error 1004 STEVE BELL Excel Programming 6 September 2nd 05 02:16 AM
traversing through a filtered range based on another filtered range zestpt[_4_] Excel Programming 4 July 12th 04 06:37 PM
filtered range MarkJ Excel Programming 7 June 26th 04 10:49 PM


All times are GMT +1. The time now is 12:30 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"