- ベストアンサー
EXCEL2010のAVERAGE関数とVBAでの平均値の違い
- EXCEL2010のAVERAGE関数とVBAのApplication.Averageを使って算出した平均値が異なる現象について説明します。
- データは小数点以下20桁の数値で、小数点第8位までは一致していますが、以降の桁で値が異なります。
- 平均値の差が誤差範囲内であるかどうか、真の値はどちらかについて教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
誤差でもバグでもなく、人為的なミスでしょう。 例えば A1:0.00000138786111098443 A2:0.00000137878257235606 A3:0.00000138192909756498 とデータがあるとして、これらの平均を「Application.Average」で求めるなら Range("B1") = Application.Average(Range("A1:A3")) Range("B1") = Application.Average(Range("A1", "A3")) と書くか、もしくは Range("B1") = Application.Average(Range("A1"), Range("A2"), Range("A3")) くらいで書いてやるのが通例です。 ちなみに、上記3通りのどれでもB1セルに「0.00000138285759363516」が返ってきます。 #1さんのご指摘通り、上記の例で言うとA1セルとA3セルの平均は 「0.00000138489510427470」が返ってきますから、 Range("B2") = Application.Average(Range("A1"), Range("A3")) のような書き方をしているんじゃないかなぁと「推測」できます。 と言うことで。 ご自身で書いたコードを冷静に読み返してみてくださいませ。
その他の回答 (1)
- ny123456789
- ベストアンサー率27% (6/22)
VBA側のなんらかのバグではないでしょうか? 0.00000138786111098443 0.00000137878257235606 0.00000138192909756498 上記の平均値は、セル上、VBA上共に、 0.00000138285759363516 になります。 ちなみに、最初と最後の値の平均値は 0.00000138489510427470 になりました。 質問にあるVBAで出した答え 0.00000138489510427471 とほぼ同じ値です。
お礼
ny123456789様 ご回答ありがとうございます。 ご指摘の通りVBAでAVERAGE関数を使う際に構文の使い方が間違っていました。 修正したところ、同じ結果になりました。 何とも恥ずかしいミスでした。 ご指摘ありがとうございました!
お礼
tsubuyuki様 ご回答ありがとうございます。 ご指摘の通り、私のミスでした。(恥ずかしいです。。。) おっしゃる通り、 Range("B2") = Application.Average(Range("A1"), Range("A3")) で、作っていました。 ご教授頂いた通り、 Range("B1") = Application.Average(Range("A1", "A3")) で、同じ結果になりました。 ご指摘ありがとうございました!