Pam,
There's yet another way than what Dan and Aladin suggested, namely
=SUM(rng)/COUNTIF(rng,"<>0"). It doesn't need to be specified as an array
formula, which might make it more robust to later worksheet editing.
If you want the fastest-executing statement, though (valuable in
simulations), then Aladin's suggestion is the way to go (btw, Dan's only
includes *positive* valies in the average; Aladin's get's at the non-zeroes
in an efficient way).
One caveat: You might have cells that *display* 0, but aren't; they are
instead mighty small values. To exclude values from the average whose
magnitude is <= some nonnegative epsilon, you can use
=AVERAGE(IF(ABS(rng)>epsilon,rng))
ctrl-shift-entered, meaning hold the ctrl and shift keys down at the same
time while pressing Enter.
More generally, to exclude values within epsilon of some particular x, you
can use
=AVERAGE(IF(ABS(rng-x)>epsilon,rng))
And still more generally <g>, as long as the function f() you are using in
Excel can handle array arguments, *and it skips over non-numeric data*,
then f(IF(ABS(rng-x)>epsilon,rng)) does the trick; you could use this with,
say, STDEV or an apropriately written custom function.
HTH
Dave Braden