Custom filters that filter formula results?

C

cherman

I have a workbook with 3 sheets. The 1st sheet has my raw source data, dumped
from MS Access. The 2nd sheet has a table of averages dynamically set based
on the source data and the 3rd sheet has a chart based on my average data.

I would like to implement some way to have my average data change based on
filtering of my source data.

Currently, I am using the following 2 formulas in my average table.

=IF(SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2)),SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2),AAT_Raw_Data!$B$1:AAT_Raw_Data!$B$20000)/SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2)),0)

=IF(SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2),--(AAT_Raw_Data!C$1:AAT_Raw_Data!C$20000=1)),SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2),--(AAT_Raw_Data!C$1:AAT_Raw_Data!C$20000=1),AAT_Raw_Data!$B$1:AAT_Raw_Data!$B$20000)/SUMPRODUCT(--(AAT_Raw_Data!$A$1:AAT_Raw_Data!$A$20000=$A2),--(AAT_Raw_Data!C$1:AAT_Raw_Data!C$20000=1)),0)

Is there some way to have these formulas only "pick up" data from my source
sheet that is filtered with some sort of filtering?

I actually prefer to give my users the ability to only filter on certain
columns on my source data, so using a filtering option other than the auto
filter is better.

So I guess my question is two-fold. What options do I have to create filters
and how do I get the formulas above to only calculate on filtered data?

BTW, I tried to figure out a way to use a Pivot Chart, since it allows for
filtering, but I can't figure out a way to use my "AAT_Raw_Data" tab for only
filtering options and my "AAT_Avg_Data" tab for the series. BTW, I have 5
series on a combo line/column chart.

Thank you,
Clint
 
G

Gary''s Student

Here is a way to change an existing SUMPRODUCT() formula to work on filtered
data. For example in column A from A2 thru A100 we have animals - dogs,
cats, birds, snakes, etc. In column B we have either small medium or large.
If we want to count the number of large dogs, we might use:

=SUMPRODUCT((A2:A100="dog")*(B2:B100="large"))

If, however, the data is filtered (with AutoFilter), we can use:

=SUMPRODUCT((A2:A100="dog")*(B2:B100="large")*(visi(B2:B100))

visi is the following UDF:

Public Function visi(rr As Range) As Varian
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' rr must be a column or piece of a colum
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Application.Volatile
Dim r As Range
Dim v()
ReDim v(1 To rr.Count)
i = 1
For Each r In rr
If r.EntireRow.Hidden = False Then
v(i) = 1
Else
v(i) = 0
End If
i = i + 1
Next
visi = Application.Transpose(v)
End Function

This is an array function that returns 0 if the row is hidden.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top