[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『RANK関数で条件をつけて、いくつか除外したい』(ケーピー)Excel2003使用しています。
A B
_____ 1| 2 35 2| 45 3| 3 7 4| 3 5 5| 37
C1=RANK(B1,B1:B5)=3 となるのですが、
A列が空欄のB2とB5をランキングから除外したいのです。
C1=1 となるようにしたいのですが、
良い方法を教えてください。
C1:=IF($A1="","",SUMPRODUCT(($A$1:$A$100<>"")*($B$1:$B$100>B1))+1)
素晴らしいアイデアです。名前をお聞かせください。 (おいちゃん)
ありがとうございました。
助かります。
(ケーピー)
しかし、どうして出来るのかが、
私の頭では、さっぱり解りません。
さっぱり、、、、、。
解説でもいただければ、今後のために勉強になるのですが、
できれば、お願いします。
(ケーピー)
お邪魔しますb 名無しさんが戻られないので、こんな感じかな?って事を書き込んで見ます。 上記の数式の範囲は「1〜100」までの計算式となっていますので、解かり易く例題に合わせて考えてみましょう〜 =IF($A1="","",SUMPRODUCT(($A$1:$A$5<>"")*($B$1:$B$5>B1))+1) ~~~~~~~~~1~~2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3~4 1.IF関数です。 2.「真の場合」には、空欄を返しなさい。 3.「偽の場合」には、SUMPRODUCT関数を計算しなさい。 4.「3」で計算したものに、1を足しなさい。 こんな感じですね? では、SUMPRODUCT関数を紐解いてみましょうb SUMPRODUCT(($A$1:$A$5<>"")*($B$1:$B$5>B1)) ~~~~~~~~~~1 ~~~~~~~~~~~~~2~4~~~~~~~~~~~~3 1.SUMPRODUCT関数 ヘルプより抜粋 引数として指定した配列の対応する要素間の積をまず計算し、さらにその和を返します。 要するに、「配列間を掛け算して、最後に足す」ってイメージです。 今回の場合は、配列での計算をさせたいために、SUMPRODUCT関数を使用していますので 配列間の積は計算せずに、足すことを目的としているようです。 2.$A$1:$A$5<>"" 「A1〜A5」の範囲の中に「""(空欄)」以外のものを求める 結果 → {TRUE;FALSE;TRUE;TRUE;FALSE} 3.$B$1:$B$5>B1 「B1〜B5」の範囲の中に「B1」より大きいものを求める 結果 → {FALSE;TRUE;FALSE;FALSE;TRUE} 4.上記の「2」と「3」を掛ける {TRUE;FALSE;TRUE;TRUE;FALSE} × × × × × {FALSE;TRUE;FALSE;FALSE;TRUE} ↓ ↓ ↓ ↓ ↓ { 0 ; 0 ; 0 ; 0 ; 0 } ※エクセル君は、【FALSE】を「0」・【TRUE】を「1」と認識してくれます。 ここで戻って 1.SUMPRODUCT関数で「和」を求めています。 { 0 + 0 + 0 + 0 + 0 } → 0 最後に「+1」をしているので、C1 に返るのは「1」となります。 少し整理をしてみましょうb 2.$A$1:$A$5<>"" 「A1〜A5」の範囲の中に「""(空欄)」以外のものを求める 3.$B$1:$B$5>B1 「B1〜B5」の範囲の中に「B1」より大きいものを求める このような計算だったと思いますが、上記で何を行っているかというと、、、 A列の空欄以外で、B列のその行にあるものより大きいものの数を求める こんな感じになると思います。 「+1」は、順位を調節するために必要な調整役ですねb ※仮に、B列に重複がある場合には、計算式に調節が必要になってきます。 (キリキ)(〃⌒o⌒)b
本当にありがとうございます。
本当に勉強になります。
ありがとうございます。
感謝感謝です。
(ケーピー)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.