
複数範囲のtrimmeanを計算するのに下記のような関数式を使っていますが、
CHOOSE関数を通すと空白セルがあると0で集計されてしまい、正しい値が出ません。
どのようにしたらよいでしょうか?
=TRIMMEAN(CHOOSE({1,2,3},Sheet1!A1:A3,Sheet2!A1:A3,Sheet3!A1:A3),0.1)
たとえばシートの内容が下記のようになっていたとすると、
CHOOSE関数を通すと空欄""が0で置き換えられてしまい、
[欲しい結果]=trimmean([1,1,"",1,1,"",1,1,""],0.1)=trimmean([1,1,1,1,1,1], 0.1)
[計算結果]=trimmean([1,1,0,1,1,0,1,1,0], 0.1)
になってしまい、正しく計算されません。
■セルの値■
[Sheet1]
A1 : 1
A2 : 1
A3 : ""
[Sheet2]
A1 : 1
A2 : 1
A3 : ""
[Sheet2]
A1 : 1
A2 : 1
A3 : ""
No.6ベストアンサー
- 回答日時:
例題ならAVERAGEで終わり
たぶん、もっと計算対象があるのでしょう
最低でも20以上の対象があるでしょうから 7行*3列として
=TRIMMEAN(CHOOSE({1,2,3},IF(A1:A7<>"",A1:A7),IF(Sheet2!A1:A7<>"",Sheet2!A1:A7),IF(Sheet3!A1:A7<>"",Sheet3!A1:A7)),0.1)
[Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる)
ありがとうございました。
ご指摘のとおり、実際のデータ数はもっとたくさんあります。
説明不足で申し訳ありません。
回答いただいたように、配列数式を使う方法で解決できそうです。
No.7
- 回答日時:
回答1,2ですがそれぞれのシートでTRIMMEAN関数を使っているのと同じことを回答2では行っているのですがそれは違っているという
ことですか1のデータを並べるのではなくもっと違うデータを使って正しい答えはいくつかを示していただけませんか?この回答への補足
説明不足で申し訳ありません。
極端な例として、下記データ(10ヶ X 3シート)で説明します。
(計算の概念の説明ですので、質問で問題としている空欄セルは入れていません。)
[元データ]
シート1 : 0,0,0,0,0,0,0,0,0,0
シート2 : 1,1,1,1,1,1,1,1,1,1
シート3 : 3,3,3,3,3,3,3,3,3,3
この30個のデータからTRIMMEAN(上記データ,0.2)計算する場合、
結果は上下10%ずつデータを除外したもののAVERAGEになります。
(上3ヶと下3ヶが除外)
欲しい結果と回答いただいた方法での計算結果を記載しますが、
結果が一致していないのが分かると思います。
[欲しい結果]
シート1 : 0,0,0,0,0,0,0 (0を3ヶ除外)
シート2 : 1,1,1,1,1,1,1,1,1,1 (除外なし)
シート3 : 3,3,3,3,3,3,3 (3を3ヶ除外)
この24ヶのデータのAVERAGE=1.2917
[回答いただいた方法]
シート1 : 0,0,0,0,0,0,0,0 (0を2ヶ除外、各シートの上下1ヶずつ除外)
シート2 : 1,1,1,1,1,1,1,1 (1を2ヶ除外、各シートの上下1ヶずつ除外)
シート3 : 3,3,3,3,3,3,3,3 (3を2ヶ除外、各シートの上下1ヶずつ除外)
この24ヶのデータのAVERAGE=1.3333
また、回答2の方法では、下側10%のデータしか除外されていないと思います。
元々の質問に記載したTRIMEMEANの計算式ですと、上5%、下5%のデータ除外が必要です。
No.5
- 回答日時:
とりあえず単純なチカラワザで
=TRIMMEAN(IF(CHOOSE({1,2,3},ISBLANK(Sheet1!A1:A3),ISBLANK(Sheet2!A1:A3),ISBLANK(Sheet3!A1:A3)),"",CHOOSE({1,2,3},Sheet1!A1:A3,Sheet2!A1:A3,Sheet3!A1:A3)),0.1)
をCtrl+Shift+Enterしてみるなど。
No.4
- 回答日時:
各シートのA3を、書かれているように""(""だと文字列「""」になるので=””とする)にしたら、問題なく正解が得られました。
要は、上記は""はただの空白を意味しているのですね。エクセルの仕様として、明示的に文字長0の文字列である""と入力されていない空白は、数値のゼロとみなすようですね。確かに何も入力しなければおっしゃる通りの結論、前述の通り各シートのA3に全て=""と打ち込むと、求めていた数値が得られています。VBAで対象となるエリアの空白を、全て=""で埋めるのが一番手間がなく簡単な方法だと思います。私ならシートモジュールのイベントプロシージャに仕込んで、データが入力されると即そのように空白が=""に変換されるようにします。Private Sub Worksheet.Changeならあらゆる変更に対して処理を行うので、万が一のミスも起こりえません。
もともとChooseが配列ですから、配列の中の配列でSubstitute使うとか出来るのかどうかもわかりませんしね。もし、VBA禁止の環境なら改めて別の方法を考えます。
""はただの空白を意味しています。
説明不足で申し訳ありません。
空白を数値のゼロとみなす仕様が正直邪魔です。
私の行いたいことの概要としては、一般的なデータに対してVBAから必要な計算式(TRIMMEANなど)をセルに書き込んで様々な統計値を計算することです。例ではデータ数は少ないですが、実際には膨大です(数千行~数万行 X 256列 X複数シート)
元データは決まったファイル/シートに入力されている訳ではないので、イベントプロシージャを使うためにはVBAからVBAを書き込めむ必要がありますが、やったことが無いので可能かどうか調べて見ます。
処理は速いほうがいいので、イベントプロシージャで膨大な数のセルを操作するのが効率的かどうかというのもあります。
質問した時点では、関数のみで解決する方法を想定していました。
No.2
- 回答日時:
TRIMMEAN関数を基本に返って解釈すれば次のような式で表すことができますね。
=(SUMIF(Sheet1!A1:A3,">="&MAX(A1:A3)*0.1)+SUMIF(Sheet2!A1:A3,">="&MAX(A1:A3)*0.1)+SUMIF(Sheet3!A1:A3,">="&MAX(A1:A3)*0.1))/(COUNTIF(Sheet1!A1:A3,">"&MAX(A1:A3)*0.1)+COUNTIF(Sheet2!A1:A3,">"&MAX(A1:A3)*0.1)+COUNTIF(Sheet3!A1:A3,">"&MAX(A1:A3)*0.1))
これで正しい答えが得られるでしょう。
ありがとうございます。
ですが、この式では一般的に正しい結果は得られません。
"各シートのデータを上下5%カット"と"データ全体の上下5%カット"は同じではありません。
TRIMMEAN関数の計算の解釈が間違っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) エクセル・セルに数式を入力してセル指定計算 2 2023/04/21 12:46
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
- Excel(エクセル) マクロでコピーすると数式が表示される 1 2022/09/09 20:21
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelにて、ユーザーフォームで...
-
indirect 関数を使った複数シー...
-
エクセルで円グラフに引き出し...
-
エクセルの主軸と第2軸の0を合...
-
エクセルで長い行を5行ごとに1...
-
エクセルで文字が白くなる
-
エクセルで、時間 0:00を表示...
-
同一セルに日時があるものを日...
-
Excelマクロのエラーを解決した...
-
excelグラフでデータテーブルを...
-
Excelで、空白を表示したい
-
【エクセル】区切り文字が含ま...
-
Excelで小数点以下1桁の年数を...
-
エクセルで文字を含む式に、カ...
-
アクセスで#エラーを表示させ...
-
【エクセル】オートフィルタで...
-
エクセル条件付書式で指定の時...
-
DATEDIFでマイナス表示をさせたい
-
EXCELでCSVファイル保存すると...
-
Excel 書式の一致を調べる関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelにて、ユーザーフォームで...
-
Excel、複数シート同セルを別シ...
-
indirect 関数を使った複数シー...
-
【再質問】【マクロ】複数シー...
-
別シートに毎回異なるデータを...
-
エクセルの関数について : CHOO...
-
Openoffice calc で複雑な入力...
-
Excelの操作方法
-
9枚のシート上の同形式の表を...
-
ABC DEF GHI の3個の会社を[...
-
エクセル 不特定数シートのく...
-
excel マクロで数字を入れると...
-
エクセル VBA ユーザフォーム ...
-
excelの表を複数条件でカウント...
-
オートフィルタでデータを抽出...
-
vba SUMIF関数で合計を出す
-
エクセルで三つの条件での参照...
-
エクセルで文字が白くなる
-
エクセルで文字を含む式に、カ...
-
エクセル条件付書式で指定の時...
おすすめ情報