Average of difference between dates greater than zero

J

juneturtle

I'm having an issue trying to get this formula to work. I have a due date
which is when documents are supposed to be turned in and then their actual
dates - when the docs were actually turned in.

I need to know the difference between these two dates and if the difference
is greater than zero (meaning they turned it in prior to the due date or it
still hasn't been turned in - the cell is blank), the average of those
differences.

The current formula I'm using is
=AVERAGE(IF((O12-O9)>0,(O12-O9)),IF((O14-O9)>0,(O14-O9)),IF((O16-O9)>0,(O16-O9)),IF((O18-O9)>0,(O18-O9)),IF((O20-O9)>0,(O20-O9)))

It returns the average of all difference in dates, including the zeros. I
tried making it an array formula like the following one, so the zeros could
actually be null and then they wouldn't be averaged but that doesn't work
either:

{=AVERAGE(IF((N12-N9)>0,(N12-N9),""),IF((N14-N9)>0,(N14-N9),""),IF((N16-N9)>0,(N16-N9),""),IF((N18-N9)>0,(N18-N9),""),IF((N20-N9)>0,(N20-N9),""))}

Could someone please help me out with this, I'd greatly appreciate it

=)
 
L

Luke M

Because your breaking the numbers up, the Average function is treating the
FALSE values as 0. Can you simply combine the functions into:
{=AVERAGE(IF(O12:O20-O9>0,O12:O20-O9,FALSE))}

If you have text values or something in between that you were trying to
ignore, you might be able to just eliminate them within the IF function like
so:
{=AVERAGE(IF(AND(ISNUMBER(O12:O20),O12:O20-O9>0),O12:O20-O9,FALSE))}

This would ignore all text values on rows 13, 15, 17, 19.

Also, I presume you know these are array functions, but for future readers,
these formulas should be entered without the curly brackets, and confirmed
using Ctrl+Shift+Enter.
 
L

Luke M

My apologies, change second formula to:
{=AVERAGE(IF(ISNUMBER(O12:O20)*(O12:O20-O9>0),O12:O20-O9,FALSE))}

Because its an array, need to multiple criteria, not evaluate independently.
 
J

juneturtle

Luke, thanks for your swift response. It seems like your formulas could work
but I wasn't using a range before because there are different dates in the
odd numbered cells. Do you have any other suggestions?
 
L

Luke M

Try this:

=AVERAGE(IF({TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE}*(O12:O20-O9>0),O12:O20-O9,FALSE))

We'll just have to manually FORCE the formula to ignore those rows!!
 
T

T. Valko

=AVERAGE(IF({TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE}*(O12:O20-O9>0),O12:O20-O9,FALSE))

Are you sure that's doing what you think it's doing? The array of Booleans
should be a *vertical* array. As you have it, it's a horizontal array and is
not calculating the way you think.

A vertical array is delimited by semi-colons:

{TRUE;FALSE;TRUE}

Try it like this:

=AVERAGE(IF((MOD(ROW(O12:O20),2)=0)*(O12:O20-O9>0),O12:O20-O9))

If you want it to be more robust against row insertions:

=AVERAGE(IF((MOD(ROW(O12:O20)-ROW(O12),2)=0)*(O12:O20-O9>0),O12:O20-O9))

All formulas are array formulas.
 
B

Bernd P

Hello Biff,
...
If you want it to be more robust against row insertions:

=AVERAGE(IF((MOD(ROW(O12:O20)-ROW(O12),2)=0)*(O12:O20-O9>0),O12:O20-O9))
...

Insert a row after row 12 or before 20 :)

SCNR,
Bernd
 
T

T. Valko

Insert a row after row 12 or before 20 :)

Yeah, I said "more robust" not bulletproof robust! <g>
 

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