• ベストアンサー

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(悪)の順になります。 どうか教えて頂けますと幸いです。

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

  • ベストアンサー
  • dghjty145
  • ベストアンサー率46% (42/90)
回答No.1

たとえば、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の値を検索すると、いいランクのほうが値が小さくなりますので、統合の向きを逆にしています。

heliopsis
質問者

お礼

丁寧なアドバイス有難うございます。 MATCH関数の補足説明まで有難うございます。しっかりと関数式が理解でき、今の自分でも使えると思い、早速使わせて頂きました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.4

No2さんの回答と同じですが =TEXT(SUMPRODUCT(FIND(A4:B4,"XABCDE1E2S")*{1,-1}),"↑;↓;")

heliopsis
質問者

お礼

回答有難うございます。 TEXT関数の表示形式を使用すると、こんなにスマートになるのですね。なんか感動しました。有難うございます!

全文を見る
すると、全ての回答が全文表示されます。
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆こんな方法もありますよ =IF(SUBSTITUTE(A2,"X",1)>SUBSTITUTE(B2,"X",1),"↑",IF(SUBSTITUTE(A2,"X",1)<SUBSTITUTE(B2,"X",1),"↓",""))

heliopsis
質問者

お礼

回答有難うございます。 初めてみる関数でもあったり、このような使用の仕方もできるのだと、すごく為になりました。

全文を見る
すると、全ての回答が全文表示されます。
noname#70958
noname#70958
回答No.2

●甲案: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さんのようにセルにリストを書き出しておくと、式が短くなりますし保守が楽です。 以上ご参考まで。

heliopsis
質問者

お礼

4パターンも有難うございます。そして、補足も有難うございます。 保守の面も考えて式を作るのも大事だということに気づきました。 自分がやろうと思っていたのが甲案だったので、やろうとしたことまで解決でき嬉しいです。 また、他の関数を採用すると、同じことを表現するのにこんなに式が短くなることがよく分り、先生に教えて頂けているよう嬉しいです。 はじめて触れる関数が多くて、大変勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2007関数

         A   B    C     D E 1   15  20  300 2   21  22  400 3   34  31  452 D1に、A列の数字のいずれかを入力すると、 E1に、A列のいずれかの数字を入力した行のC列の数字を表示させたい。 たとえば、 D1に、21と入れると、E1に400と D1に、34と入れると、E1に452と 表示させたいのですが、 関数は、ありますでしょうか?

  • エクセルでのランクの出し方

    以下のような表でランク関数を使うと、空白(計算式は入っています)を0と計算して順位をだしてしまいます。    A   B   C   D  E 1 山田  50   40  90  1 2 加藤 -75   20  -55  4 3 田中  25  -60  -45  3 4                  2 D列にB,Cの合計を求める式として、=IF(A1="","",SUM(B1:B2)という数式を入れています。この表のデータは2人~4人になる可能性があります。 E列には、=RANK(D1,D1:D4)という数式が入っています。 そうしますと、セルD4を0とみなすのか、E4に順位2が入ってしまいます。 このD4を空白とみなし、1位から3位までで表示する方法はありますでしょうか?

  • エクセル 関数を教えて下さい。

    ちょっと複雑なのですが、こういう場合の関数の式はどうすれば良いか解る方がおりましたら教えて頂きたいのですが、宜しくお願い致します。 列AではAまたはBを選択し、列Bでは列AのA,Bそれぞれにa,b,c,d,eのいずれかを選択したときに、列Cに列A・列Bで選択したのもに当てはまる記号・数字を表示させるといった関数なのですが、何度挑戦しても引数が限界を超えている等になり出来ません。 もしかすると、根本的に間違っているかもしれません。ちなみにIFを使っていました。 列A  列B  列C A     a     × A     b     2.3.4 A     c     2.3.4 A     d     1.3.4 A     e     2.3.4 B     a     × B     b     2.3.4.10.11.12 B     c     2.3.4.10.11.12 B     d     1.3.4.9.11.12 B     e     2.3.4 列A・列Bを選択すると、列Cに上記の記号・数字を自動表示させたいです。 以上、宜しくお願い致します。

  • Excel比較関数について教えてください。2

    下記のようにA列とC列を比較して、 一致した値が存在する場合、B列とC列を比較して、 E列に全て一致した場合は○、一致しない場合は×にしたいのですが教えてください。 また、A列にあってC列にない場合は、×を表示したいです。 A列 B列 C列 D列 E列 1 12345 aaa 12389 aaa A1とA3が一致&B1とD3が一致したので○ 2 12389 bbb 22222 bbb A2とC1が一致したが、B2とD1が一致しないので× 3 33333 bbb 12345 aaa A3の値がC列にないので空欄 教えてください。

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • エクセル IF関数 初心者です。。

    A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 2  9:30 Cさん 11:00 3  10:00 Dさん 12:00 4  10:30 Eさん 9:00  1  9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 3  10:00 Cさん 11:00 4  10:30 Dさん 12:00 5  11:00 Eさん 9:00  2  9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。

  • エクセル関数について教えてください!!

    エクセル関数について教えてください!! エクセルファイルに以下のようなデータがあります。 A列 B列 C列 あ  A10 100  あ  A10 110 あ  B10 120 い  C10 100 い  D10 100 う  E10 100 あ  B10 120 い  C10 100 A列:販売店 B列:コード C列:売り上げ金額 (合計8000件程度) 販売店毎での売り上げ金額を求めたいのですが、B列のコードが重複しています。 販売店+重複コードは1つに纏めての金額を求める関数を教えていただけますでしょうか。 イメージ あ  A10 210 あ  B10 240 い  C10 200 い  D10 100 う  E10 100 よろしくお願いしますm(_ _)m

  • エクセル関数(シートの比較)を教えて下さい

    A列にある部品の型番が入っており、同じ行のB列以降に詳細内容が入っています。 B列以降の数は型番によってバラバラです。 Sheet1,2で同じ型番同士で比較し、B列以降の詳細内容が異なるものを Sheet3に書き出したいのです。 たとえば、 Sheet1の内容が、 A列  B列   C列   D列   E列 5001  A1   B5    F3   Z4 5002  E6   C2    A7 5003  B9   M8 Sheet2の内容が、 5001  A1   B5     5002  E6   C1    A6 5004  B9   M8 結果として、 5001  F3   Z4     5002  C1   A6 5003  B9   M8 5004  B9   M8 このような場合、どうすればいいのでしょうか。 なるべくなら関数がいいのですが、無理ならばVBAでもかまいません。 Excel2000です。 よろしくお願いいたします。

  • エクセルの関数について教えてください

    こんにちは。 エクセル関数について教えてください。 (OS:WIN2000、エクセル2003) こんな表があって、別のシートの A1=200 A2=D A3=2・・・1行目D列の項目 と入力したときに A4に「はな」と表示させたいのですが Index関数とMatch関数の組み合わせだと思うんですが どうしたらいいですか? A列 B列 C列 D列 E列 1行 --- --- 1 2 3 2行 100 A いぬ くり 赤 3行 200 B ねこ いも 青 4行 300 C ぞう ねぎ 緑 5行 200 D とら はな 黄 6行 100 E うし みそ 朱 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・

  • エクセルの関数での質問です

    エクセルの関数での質問です sheet1に A B  C  D  E 1 ○ ○ ○ 1 2 ○ ○ ○ 3 ○ ○ ○ 2 4 ○ ○ ○ みたいな状態からsheet2に A B  C  D  E 1 ○ ○ ○ 1 3 ○ ○ ○ 2 のようにE列の数値順に行を並べることはできますか? エクセル初心者なのでわかりやすく教えていただけると助かります。

専門家に質問してみよう