- ベストアンサー
Excel 関数 ランク比較
A列 B列 C列 今週 前週 ↑↓ X X E1 D ↑ E1 B ↑ A B ↓ 今週の状態(A列)と前週の状態(B列)を格納した列があります。 2つの状態を比較し、状態がよくなってれば「↑」、反対に悪くなってれば「↓」、変わらなければ何も表示しない ということを、C列に関数式を入れて、上記のように表示させたいです。 IF関数で作成しようとして考えていたのですが、うまく考えが纏まらず悩んでいます。 ランクは (良)X、A、B、C、D、E1、E2、S(悪)の順になります。 どうか教えて頂けますと幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
たとえば、G2からG9にX、A、B、C、D、E1、E2、Sの文字だけのリストがあるとします。 A2、B2以降にデータが入るとすると、C2に以下の計算式を入力して、下にコピーします。一応A列、B列には半角の英数字が入力されると想定しています。全角の文字を入力するときは、G2からG9に全角の文字を入力しておけばよいです。 =IF(OR(ISBLANK(A2),ISBLANK(B2)),"",IF(MATCH(A2,$G$2:$G$9,0)=MATCH(B2,$G$2:$G$9,0),"",IF(MATCH(A2,$G$2:$G$9,0)>MATCH(B2,$G$2:$G$9,0),"↑","↓"))) MATCH関数のところの等号が逆にみえるかもしれませんが、MATCH関数でG2からG9の値を検索すると、いいランクのほうが値が小さくなりますので、統合の向きを逆にしています。
その他の回答 (3)
- sige1701
- ベストアンサー率28% (74/260)
No2さんの回答と同じですが =TEXT(SUMPRODUCT(FIND(A4:B4,"XABCDE1E2S")*{1,-1}),"↑;↓;")
お礼
回答有難うございます。 TEXT関数の表示形式を使用すると、こんなにスマートになるのですね。なんか感動しました。有難うございます!
- maron--5
- ベストアンサー率36% (321/877)
◆こんな方法もありますよ =IF(SUBSTITUTE(A2,"X",1)>SUBSTITUTE(B2,"X",1),"↑",IF(SUBSTITUTE(A2,"X",1)<SUBSTITUTE(B2,"X",1),"↓",""))
お礼
回答有難うございます。 初めてみる関数でもあったり、このような使用の仕方もできるのだと、すごく為になりました。
●甲案:IFで地道にやる場合。 =IF(MATCH(A1,{"X","A","B","C","D","E1","E2","S"},0)<MATCH(B1,{"X","A","B","C","D","E1","E2","S"},0),"↓",IF(MATCH(A1,{"X","A","B","C","D","E1","E2","S"},0)=MATCH(B1,{"X","A","B","C","D","E1","E2","S"},0),"","↑")) ●乙案:3択なので、IFの代わりにSIGNで符号を見てCHOOSEを使えば少し楽です。 =CHOOSE(SIGN(MATCH(A1,{"X","A","B","C","D","E1","E2","S"},0)-MATCH(B1,{"X","A","B","C","D","E1","E2","S"},0))+2,"↓","","↑") ●丙案:配列処理すればそれぞれ別個にMATCHする必要はありません。 =CHOOSE(SIGN(SUMPRODUCT(MATCH(A1:B1,{"X","A","B","C","D","E1","E2","S"},0)*{1,-1}))+2,"↓","","↑") ●丁案 ご質問のケースではMATCH関数の代わりにFIND関数でもやれます。 =CHOOSE(SIGN(SUMPRODUCT(FIND(A4:B4,"XABCDE1E2S")*{1,-1}))+2,"↓","","↑") ------------------------------------------------ ※ランク記号については質問文に合わせて全角で表記しています。 ※MATCHを使う場合は、#1さんのようにセルにリストを書き出しておくと、式が短くなりますし保守が楽です。 以上ご参考まで。
お礼
4パターンも有難うございます。そして、補足も有難うございます。 保守の面も考えて式を作るのも大事だということに気づきました。 自分がやろうと思っていたのが甲案だったので、やろうとしたことまで解決でき嬉しいです。 また、他の関数を採用すると、同じことを表現するのにこんなに式が短くなることがよく分り、先生に教えて頂けているよう嬉しいです。 はじめて触れる関数が多くて、大変勉強になりました。
お礼
丁寧なアドバイス有難うございます。 MATCH関数の補足説明まで有難うございます。しっかりと関数式が理解でき、今の自分でも使えると思い、早速使わせて頂きました。