AVERAGEIF

  • Thread starter Thread starter JimG
  • Start date Start date
J

JimG

I have an AVERAGE IF formula that works fine on a single worksheet for July
1st...
=AVERAGEIF('7-1'!N:N,">0",'7-1'!N:N)

I need it to work across 31 worksheets, so it will accurately calculate the
averages for all values greater than zero, and for the entire month.

Any ideas?
 
Conditional calculations across sheets isn't easy. Try this:

=SUMPRODUCT(SUMIF(INDIRECT("'7-"&ROW(INDIRECT("1:31"))&"'!N:N"),">0"))/SUMPRODUCT(COUNTIF(INDIRECT("'7-"&ROW(INDIRECT("1:31"))&"'!N:N"),">0"))
 
I have a worksheet like:
162-1
162-2
162-3
163-1
163-2
..........
I 'd like to average the group of cells with the same first three digit? I
am thinking about AVERAGEIF function but could not work out? Any help would
appreciate?
Thank you!
Tung
 
Hi,

Assuming that your data below is in range C6:C10, you can use the following
formula where B14 has 162.

=SUMPRODUCT((1*(LEFT(C6:C10,3))=B14)*(RIGHT(C6:C10,1)))/SUMPRODUCT(1*(1*(LEFT(C6:C10,3))=B14))

--
Regards,

Ashish Mathur
Microsoft Excel MVP
www.ashishmathur.com
 
Assuming that A2:A6 contains the data, C2 contains 162, and C3 contains
163, try...

D2, confirmed with CONTROL+SHIFT+ENTER, and copied down:

=AVERAGE(IF(LEFT($A$2:$A$6,LEN(C2))=C2,$A$2:$A$6))

Hope this helps!

http://www.xl-central.com
 
Misunderstood.... Maybe this is what you're looking for...

=AVERAGE(IF(LEFT($A$2:$A$6,LEN(C2))+0=C2,RIGHT($A$2:$A$6,1)+0))

or

=AVERAGE(IF($A$2:$A$6<>"",IF(LEFT($A$2:$A$6,LEN(C2))+0=C2,RIGHT($A$2:$A$6
,1)+0)))

The latter allows for empty/blank cells. Note that both formulas need
to be confirmed with CONTROL+SHIFT+ENTER.

Hope this helps!

http://www.xl-central.com
 
What if I have to take the average of the values located in the same cell
across 10 sheets (ignoring the value if it is <=0). For instance, the sheets
are labeled 'am peak_10' to 'am peak_100' and the cell location is C26. I
am not quite familiar with the 'indirect' function hence not able to
comprehend the above solution.
Any help would be appreciated. Thanks!
 
average ... the same cell across 10 sheets
sheets are labeled 'am peak_10' to 'am peak_100'
ignoring the value if it is <=0

If you have 10 sheets named "10" to "100" then I'm assuming the names
increment by 10?

'am peak_10'
'am peak_20'
'am peak_30'
'am peak_40'
etc
etc
'am peak_100'
 
Yes, that's right. I tried to work around with the solution previously
provided, for which i renamed the sheet as 'am peak_1', 'am peak_2' and so
on... as it seems to not recognize the increment of 10 (ie. 10, 20...). And
it worked (with one particular cell location though)! But as the cell
location is a text in the above stated formula, I am not sure how I can apply
that to a group of cells. As in my case, I am looking to apply the
conditional average to alternate columns.
In one of the other threads under the same topic, the suggestion was to use
the IF statement and create another table, replacing <0 values by "" and then
calculate average. Though the solution is pretty simple, I am hoping there
would be a 'one formula' solution to this problem, as I need to extract such
averages for 18 scenarios (ie. 18 different excel sheets)!

Thanks,
Som
 
I thought I should make myself more clear...

The values that I am looking to average out are across 10 sheets (and as
previously noted in the increments of 10 named 'am peak_10', 'am
peak_20'...so on...) in cell locations C26:C30, E26:E30,..., Y26:Y30 (ie.
alternate columns). I was looking for a formula which would give the
average of all values in 'am peak_*'!C26 excluding the cells which have '0'
value (for each of the above mentioned cell location).

I understand conditional statements do not work across sheets as the SUM,
COUNT and AVERAGE do. It would have been so much easier if it did. :)
 
I am looking to apply the conditional average
to alternate columns.

Hmmm...

That sounds like trouble!

This formula will average cell C26 across your 10 sheets excluding 0 and
negative values:

=SUMPRODUCT(SUMIF(INDIRECT("'am
peak_"&10*{1,2,3,4,5,6,7,8,10}&"'!C26"),">0"))/SUMPRODUCT(COUNTIF(INDIRECT("'am
peak_"&10*{1,2,3,4,5,6,7,8,9,10}&"'!C26"),">0"))

You can shorten the formula a little by using a defined name.

Insert>Name>Define
Name: Sheets
Refers to: =10*{1,2,3,4,5,6,7,8,9,10}

Then:

=SUMPRODUCT(SUMIF(INDIRECT("'am
peak_"&Sheets&"'!C26"),">0"))/SUMPRODUCT(COUNTIF(INDIRECT("'am
peak_"&Sheets&"'!C26"),">0"))
 
Wow...Thanks! That's really helpful and it surely works!
And I just changed the formula a little bit to save some labor instead of
changing the cell location in each and every formula. I created a separate
table which had 'C, blank, E, blank,..., Y' in the first row and
'26,27,28,29,30' in each column.
And the modified equation I used is:
=SUMPRODUCT(SUMIF(INDIRECT("'am
peak_"&10*{1,2,3,4,5,6,7,8,9,10}&"'!"&C$50&C51),">0"))/SUMPRODUCT(COUNTIF(INDIRECT("'am peak_"&10*{1,2,3,4,5,6,7,8,9,10}&"'!"&C$50&C51),">0"))

{for instance, here C50 has value 'C' and C51 has value '26'}
And this I could copy across the rows and columns.

Thanks a lot again for you help. Really appreciate it. All I had to do
was create one averaging sheet and copy that for the other 18 scenarios! It
made my job so much easier! :)

Som
 
Back
Top