[[20031215123404]] 『IF関数をSUMPRODUCTで可能ですか』(kobi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『IF関数をSUMPRODUCTで可能ですか』(kobi)
 お世話になっています。『数式内の配列』での質問を整理しましたので、新規で質問させてください。
=SUMPRODUCT((a1={"A","B","C","D","E","F","G","H","I","J"})*{1,2,3,4,5,6,7,8,9,10})
上記式で、
=IF(a1="A",1,IF(a1="B",2,IF(a1="C",3,… のような処理が可能な上、
IF関数のネスト数の制限にも関係なく出来ることを先レスで学びました。
それで、例えば
   A   B    C   D    E   F    G    H   I  
1 100以下 90以下 80以下 70以下 60以下 50以下 40以下 30以下 20以下
2  Aランク  Bランク  Cランク  Eランク  Dランク  Fランク  Gランク  Hランク  Iランク    
というような表でランクわけをし、
A4に得点、A5にランクを求めるとして、本来VLOOKUP(HLOOKUP)でやるのが本筋でしょうが、
A5に =IF(a4<=100,"A",IF(a4<=90,"B",IF(a4<=80,"C",…
の代わりに =SUMPRODUCT で可能かどうかお聞きします。
        自分じゃ出来なかった (kobi) です

 こんにちは。
SUMPRODUCT単体では"A"のような文字列は返せないので、
INDEXなどと組み合わせて使用する事になると思います。(Yosh!)

=INDEX({"Aランク","Bランク","Cランク","Dランク","Eランク","Fランク","Gランク","Hランク","Iランク"},1,SUMPRODUCT(N({100,90,80,70,60,50,40,30,20}>=A4)))


 そういう規則的な計算でしたら、
 =CHAR(9-INT((A2-(A2>0))/10)-(A2<11)+65)&" ランク"
 などと、計算でもできますよ。(通りすがりの者)

 Yosh!さん、こんにちは。出来ましたっ!つきあって頂いてすみません。
INDEX関数のヘルプを見ながらうーうー言ってます。
上記式=INDEX(配列、行番号、列番号)という理解でいいですよね。
しかしこれで、IFのネスト数にも負けず、VLOOKUPの表も作らず、数式で解決が出来る!嬉しいっす! 
     (自力じゃないけど…、しかし皆さんすごいですよね、思考能力が)
そこで、付き合いついでにと言っては何なんですが、
SUMPRODUCT(N({100,90,80,70,60,50,40,30,20}>=A4)) の N ッて?変数なんですか?
解説をお願いできれば、なお嬉しいです。

 通りすがりの者さん、多分衝突というものに遭遇しました。
いろいろな角度から解決できる方法が出てくるんですね。保存してから後で見てみます。
     (理解できるかどうかは別な話・・・)
                    思考回路が多分寸断されている (kobi)

 配列を使うのでしたら、こういうのも可能ですね。

 =CHAR(9-MATCH(A2,{-1000,21,31,41,51,61,71,81,91,101})+65) & "ランク"

 勝手にあそんでいるので、忙しい中、適当に無視して下さい。(通りすがりの者)

 kobiさん、Nは引数の値を数値に変換する関数です。
 TRUE,FALSEを集計できるように 1,0 に変換しています。
 SUMPRODUCT(({100,90,80,70,60,50,40,30,20}>=A4)*1) のように
 *1したりするのと同じ事です。

 通りすがりの者さん、こんな面白い方法を無視なんて出来ませんよ^^
 CHARを使うなんて私には思いつく事も出来ませんでした。
 今後の参考にさせて頂きたいと思います。(Yosh!)

 面白そうだったので、ひっくり返してみますた。

 =CHAR(MATCH(A2,{1E10,90,80,70,60,50,40,30,20},-1)+64) & "ランク"

 (ramrun)中休み〜

 なるほど! ひつ繰り返した方がよくなつた! (通りすがりの者)

 Yosh!氏の着想の素晴らしさには、いつも驚かされています。

 それから、お名前は、やはり、「よっしゃ!」と関係があるのでしょうか?(通りすがりの者)

皆さん、やっぱりすごいですね!
 精進して早くken!にならなくては・・・(ケン)

 いえいえ「配列のケン」の名は、今では世間に知れ渡っておりますよ。(通りすがりの者)

 ビリ....も
    (すが弥太)

 ビリken!(パイレーツケン)古っ!

 回答の素早さから、ビリーザ.キッドのつもりやったのに...。変な人?
      (すが弥太)

 >ビリ....も
拡大しても、そうは見えん・・・(ケン)

 えっと、留守にしている間に書き込み見れませんで、
しかも娘が早く終われというし、いろいろありがとうございます。
とりあえず引き出しに入れてから、あとで検証させていただきます。
達人の道は険しいですが、少しでも近づくために精進いたします。
        代筆by娘 ほろ酔い (kobi) でした。

 「よっしゃ!」とは関係ございません^^
 Yosh!は「よし」と読んで下さればと思います。

 最後が!なのはたいした理由ではなく、YoshiよりHNがかぶりにくそう
 なので、iを!に置き換えてニックネームとして使用させて頂いてます。(Yosh!)

 Yosh!の!には「これでどやっ、つべこべ言わずにこの式でやったらええんじゃっ!」
 っちゅう迫力がありまんなぁ。
    チョット真似して(弥太郎!)...アカン、迫力無〜い!

 それ位の自信を持てる書き込みが出来るようになれれば良いんですけど^^;(Yosh!)

 解決しました!といいながら、再びお聞きします。(ひつこい)
Yosh!さん、通りすがりの者さん、ramrunさんの関数式をいちいち分解しながら、
ついでにKenさんから教わった範囲の変更もやっと理解したつもりになってました。
しかーし、上記のスレの数式で正確に答えが出ません。
上に表があるので省略しますが、
得点が51点から70点までで、すべてEランクとなってしまいます。
なんも問題ないですよね?何でかな?
   ひょっとして飲みながらの操作をエクセルの神様が怒っている?(kobi)

 問題ないはずですけど?何ででしょう?
とりあえず、{}の中などの入力を間違えていないか確認してみて下さい。(Yosh!)

 遅くなってすみません。原因判明!
なんと最初の表で
>それで、例えば・・・   の下の表でランクの順番がおかしいまま、(ABCEDランクだって)
行列を逆でコピペし、その表を元に確認作業をしていました。おかしい訳だ。
Yosh!さん、お騒がせしました。えへえへ
  ああ、赤っ恥  (kobi)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.