• ベストアンサー

Excel関数:Excel関数:0を除いたデータから最高値をカウントして優勢率を求める計算方法

例えば、以下のようなデータがあったとします。   A   B   C 1 50  50  25 2 80  80  80 3 45  50  60 4 35  70  45 5  0   0   0 このデータから1から5行目まで見て、「A」「B」「C」の中で最高値をカウントします。 「1」の場合、最高値は「A」と「B」になります。 「2」の場合、最高値は「A」「B」「C」全てになります。 「3」の場合、最高値は「C」になります。 「5」の場合、データ「0」なので除きます これをカウント数にすると、   A   B   C 1  1   1   0 2  1   1   1 3  0   0   1 4  0   1   0 となり、カウントの総数は「7」となります。 優勢率を求めるのに「Aの優勢率=Aのカウント数/カウントの総数」で、3/7となります。 結果、見た目では、   A     B     C 1 50    50    25 2 80    80    80 3 45    50    60 4 35    70    45 5  0     0     0 6 42.8%   42.8%  28.5% このようになります。このような見た目にしたいのですが、 条件は、 ・0を除いたデータ ・「A6」「B6」「C6」以外は計算式や関数を使わない ・1から5は実際のデータでは1から1000以上になることもある ということです。 関数は詳しくないのでまた質問するかもしれませんが、解説もよろしくお願いします。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

>「A6」「B6」「C6」以外は計算式や関数を使わない ◆ご希望のとおりではありませんが、作業列による方法です ★6行目に作業列 A6=SUMPRODUCT((COUNTIF(OFFSET($A1,ROW(1:5)-1,,,3),">"&A1:A5)=0)*(A1:A5<>0)) ★右にコピー ★7行目にご希望の数値 A7=A6/SUM($A$6:$C$6) ★右にコピー

miya_HN
質問者

お礼

なるほど。 それぞれのカウント数を計算して合計するんですね。 ありがとうございました。

その他の回答 (1)

  • robbie21
  • ベストアンサー率55% (5/9)
回答No.2

配列数式を利用した回答です。 以下の数式をA6セルに入力してCtrl+Shift+Enterを押して配列数式として入力 =SUM(((A1:A5>=$A1:$A5)*(A1:A5>=$B1:$B5)*(A1:A5>=$C1:$C5)*($A1:$A5>0)))/SUM((($A1:$C5>=$A1:$A5)*($A1:$C5>=$B1:$B5)*($A1:$C5>=$C1:$C5)*($A1:$C5>0)) でもきっと作業用のセルを使って計算をしたほうが簡単でメンテナンスもしやすいです。 上記回答も以下のように作業用のセルを使って一旦作った数式を配列数式に変換したものです。 ====作業列を使った方法 D1に =AND(A1>0,A1=MAX($A1:$C1))*1 と入力、F5までコピー A6に =SUM(D1:D5)/SUM($D$1:$F$5) と入力 C6までコピー =========== ちなみに、こうした作業用の列は 列のグループ化の機能で印刷時などには隠しておくことが出来ます。 参考URL: http://shortcuts.cc/2007/02/post_41.html

miya_HN
質問者

お礼

なるほど。「Ctrl+Shift+Enter」は配列数式と呼ぶんですね。 ありがとうございました。

関連するQ&A