- ベストアンサー
EXCELLで3つの値から跳び抜けた値1つを除外して平均するには。
A1,A2,A4 とセルがあったとして、これらの数値の中で近い値2つの平均を求めるにはどうすればよいのでしょうか? 例えば、58,60,26だった場合、58と60の平均を求めたいわけです。 TRIMMEAN関数でできるかとも思いましたが、この関数は隅っこの偶数個の数値を除外する仕様のようで、跳び抜けた値「1つだけ」を除外することはできませんでした。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>その辺はどうなってもいいと思っています。 のであれば、以下ようでイイと思う 使い方:=trimAve(A1,A2,A4) Public Function trimAve(a As Double, b As Double, c As Double) As Double Dim data(3) As Double Dim ave As Double, hensa As Double Dim i As Integer, maxV As Double, maxI As Integer data(0) = 0 data(1) = a data(2) = b data(3) = c ave = Application.WorksheetFunction.Average(a, b, c) maxV = 0 maxI = 0 For i = 1 To 3 hensa = Abs(data(i) - ave) If hensa > maxV Then maxV = hensa maxI = i End If Next trimAve = (a + b + c - data(maxI)) / IIf(maxI = 0, 3, 2) End Function
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
A1:A3が、数値だけで 12 34 56 とします たとえばA5に式 =SUM(IF(A1:A3=MIN(A1:A3),0,A1:A3))/(COUNT(A1:A3)-1) と入れて、SHIFT+CTRL+ENTERを同時に押します。 式が{と}で囲まれ、結果は 45 となりました。配列数式の応用です。 間に空白セルがあった場合など、朝時間がなくて、テストできてないのですが、すみません。
お礼
シンプルで助かります。 お忙しいところをありがとうございました。
- onntao
- ベストアンサー率32% (108/332)
も一つ 58,59,60という例もあるのでしょうか そのときはどのように?
補足
そうですね(^^; こういう場合には、エラーになるか、三つの平均=59が返ってくるといいのですが、その辺はどうなってもいいと思っています。 例えば、58と59の平均で58.5になってしまってもいいと考えています。
- deepimpact7110
- ベストアンサー率29% (108/365)
先ずは、跳びぬけた値の定義を明確にする必要があるのではないんでしょうか? 複数の値の中で どの程度、跳びぬけていた場合について、それを跳びぬけた値と判断するのか、そこの定義が必要に思います。 それとも 値の数は、常に3つと固定されていて、とにかく、跳び抜け方が少ない場合でも、跳びぬけさせるということでしょうか?例えば 58、60、55であったも55を除外するという判断をさせたいのでしょうか?
補足
説明が不十分でした。 deepimpact7110さんのご説明の後者のケースに当たります。 どの程度伸びぬけているかは考慮せず、値は3つ固定です。
お礼
ありがとうございます。 VBAだと応用が利きそうなのでありがたいです。