[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.