エクセル 順位表を追加する方法

このQ&Aのポイント
  • 売上実績表に順位表を追加する方法について困っています。同一の実績の営業所がすべて同じ営業所になってしまっています。
  • 順位3、4、5位に対応する営業所コードを表示する方法がわかりません。
  • ピボットテーブルを使用せずに営業所数が100程ある順位表を作成したいです。
回答を見る
  • ベストアンサー

エクセル 順位表

エクセル 順位表 いつもお世話になります。 売上実績表の中に、順位表を追加したいのですが、実績表から抽出すると、同一の実績の営業所は、すべて同じ営業所になってしまい困っています。 A    B    C   D    E   F 営コード 実績      順位  営コード  実績 2     200   1   5  500 3   400   2   3  400 4   300   3   4  300 5   500   4   4  300 6   300   5   4  300 7    300 順位3、4、5位は、それぞれ4,6,7の営業所コードを表示したいのですが、どうしたらいいでしょうか。 F列には、F2=LARGE(B:B,ROW(A1)) E列には、E2=INDEX(A:A,MATCH(F2,B:B,0)) 営業所数は100程あり、ピボットテーブルを使用せずに作成したいです。 色々条件がついてますが、よろしくお願い致します。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.2

式を複雑にしないための別解です。 添付図参照 C2: =B2-ROW()/10000 E2: =INDEX($A:$C,MATCH(LARGE($C:$C,$D2),$C:$C,0),COLUMN(A1)) F2: セル E2 をドラッグ&ペースト

WindsorAvenue
質問者

お礼

シンプルでとてもわかりやすいです。 ありがとうございます。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答番号ANo.4です。  先程の回答における、D2セルに入力する数式に関してですが、そのままでも特に問題はありませんが、 =IF(ROWS($2:2)>COUNT($B:$B),"",ROWS($2:2)) とした方が、若干、数式が短くなります。  又、E2セルに入力する数式を、次の様な数式に変えれば、作業列を設けずとも(Sheet2のA列に数式を入力しなくても)、関数のみで抽出する事が出来ます。(但し、表の行数が増えると、計算処理の際の負荷が大きくなります) =IF(ISNUMBER($D2),INDEX($A:$A,SUMPRODUCT(ROW(OFFSET($B$1,1,):INDEX($B:$B,MATCH(9E+99,$B:$B)))*(OFFSET($B$1,1,):INDEX($B:$B,MATCH(9E+99,$B:$B))=$F2)*(COUNTIF(OFFSET($B$1,,,ROW(OFFSET($B$1,1,):INDEX($B:$B,MATCH(9E+99,$B:$B)))-ROW($B$1)+1),$F2)=COUNTIF($F$1:$F2,$F2)))),"")

WindsorAvenue
質問者

お礼

今回は営業所の順位表なので、100前後程です。 営業担当者の順位表が、もし今後必要な場合は、 SHeet2を使用した方が速そうですね! ありがとうございます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 配列数式を使わずに1000行以上ある場合にも対応する方法です。  今仮に、売上実績表や順位表が存在しているシートがSheet1で、Sheet2のA列を作業列として使用するものとします。  まず、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet1!$B:$B,ROW())),RANK(INDEX(Sheet1!$B:$B,ROW()),Sheet1!$B:$B)+COUNTIF(Sheet1!$B$1:INDEX(Sheet1!$B:$B,ROW()),INDEX(Sheet1!$B:$B,ROW()))/COUNTIF(Sheet1!$B:$B,INDEX(Sheet1!$B:$B,ROW())),"")  次に、Sheet2のA1セルをコピーして、Sheet2のA2以下に貼り付けて下さい。  次に、Sheet1の D1セルに  順位 E1セルに  営業所コード F1セルに  実績 と入力して下さい。  次に、Sheet1のD2セルに次の数式を入力して下さい。 =IF(ROWS($D$2:$D2)>COUNT($B:$B),"",ROWS($D$2:$D2))  次に、Sheet1のE2セルに次の数式を入力して下さい。 =IF(ISNUMBER($D2),INDEX($A:$A,MATCH(SMALL(Sheet2!$A:$A,$D2),Sheet2!$A:$A,0)),"")  次に、Sheet1のF2セルに次の数式を入力して下さい。 =IF(ISNUMBER($D2),LARGE($B:$B,$D2),"")  次に、Sheet1のD2~F2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。

WindsorAvenue
質問者

お礼

kagakusukiさん ありがとうございます。 いろいろな方法があるんですね! 私ももっと勉強しようと思いました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

配列数式を使わないために作業列を使うと 例データ C列は作業列 式  =RANK(I2,$I$2:$I$100) 営コード 実績 順位 2 200 11 3 400 2 4 300 3 5 500 1 6 300 4 7 300 5 8 300 6 9 300 7 10 300 8 11 300 9 12 300 10 I列に =(B2&(1000-COUNTIF($B$2:B2,B2)))*1 を入れて下方向に式複写(下記I列) E列は連続データで作成 F列は =INT(LARGE(I:I,ROW(A2)-1)/1000) または =INDEX(B:B,MATCH(LARGE(I:I,E2),I:I,0),1) G列は =INDEX(A:A,MATCH(LARGE(I:I,E2),I:I,0),1) それぞれ下方向に式を複写する。 E列ーI列 順位 実績 営コード 作業列 1 500 5 200999 2 400 3 400999 3 300 4 300999 4 300 6 500999 5 300 7 300998 6 300 8 300997 7 300 9 300996 8 300 10 300995 9 300 11 300994 10 300 12 300993 11 200 2 300992

WindsorAvenue
質問者

お礼

配列関数を使わなくてもできるんですね! ありがとうございます。 とても勉強になりました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

F2は今のまま E2: =IF(F2="","",INDEX(A:A,SMALL(IF($B$2:$B$200=F2,ROW($B$2:$B$200)),COUNTIF($F$2:F2,F2)))) と記入し,コントロールキーとシフトキーを押しながらEnterで入力,以下コピー。

WindsorAvenue
質問者

お礼

keithinさん 早速の回答ありがとうございます。 期待通りの順位表ができました。 本当にありがとうございます。

関連するQ&A

  • エクセルで順位表

    エクセルをつかった成績の順位表の関数についておしえてください   数学(点)   英語(点)   合計(点)   順位 Aさん   1      2      3       6 Bさん   2      4      6       4 Cさん   5      5       10      2 Dさん   6       7      13      1 Eさん   4      0      4      5 Fさん   6      4      10      2 ひとまず上記のような表をつくったのですが、さらに下記のような順位表をつくりたいのです。 1位 Dさん 2位 Cさん    Fさん 4位 Bさん 5位 Eさん 6位 Aさん ここで問題なのが同じ点数がある場合が多いので、どう表示させるべきかもよくわかりません。よろしくおねがいします

  • 同順の場合の順位について(2回目)

        A    B    C    D   E    F    G 1   社長   2    60(点) -   1(位)次長   75(点) 2   次長   1    75    -   2   社長   60 3   部長   2    60    -   2   部長   60  4   係長   4    55    -   4   係長   55 5    -    -     -     -    -     -    - 6    1 (位) エラー   75(点)-   -    -     - 7    2    エラー    60   -   -    -    - 8    2    エラー    60   -   -    -    - 9    4    エラー    55   -   -    -    - E1=RANK(LARGE($C$1:$C$4,ROW(A1)),$C$1:$C$4) G1=LARGE($C$1:$C$4,ROW(A1)) F1=IF(E1="","",INDEX($A$1:$A$4,LARGE(INDEX((C$1:C$4=G1)*ROW($A$1:$A$4),),COUNTIF($E$1:$E$4,E1)-COUNTIF($E$1:E1,E1)+1))) 上記なら、きちんと順位、順位の名前、点数が入ります。 A1=RANK(LARGE($C$1:$C$4,ROW(A1)),$C$1:$C$4) C1=LARGE($C$1:$C$4,ROW(A1)) B6、B7、B8にどういう関数が入りますか? 教えて頂けますか。 他にも何か良い方法がないでしょうか。 1位から100位までありますので、やり方が分からず焦ってます。

  • LARGEで同じ値の時の順位

    いつもお世話になります。 WINDOWS7 EXCELL2010です。 添付図で説明しますと、 順位(F列)が 3位と4位の E3(2.000) E4(2,000)が偶然に同一金額の時 会社名(B)も同一になる数式です。 この同一の金額の時、 H列で言うと 「A F B C D」もしくは「A F C B D」 とするには何かいい方法ってないでしょうか。 是非ともご指導を仰ぎたいです。 数式は次のようでご参考に F1~F5 はただの数値 G1 =LARGE($E$2:$E$11,F2) H2 =INDEX($A$2:$A11,MATCH(MAX($E$2:$E$11),$E$2:$E$11,0))

  • excel 2つの条件(第三弾)

    http://okwave.jp/qa5057168.html の更に続きですが、    A   B   C  D  E   F  G 1  あ   3  22    4  15  ? 2  い   4  15    4  15  ? 3  う   2  10    4  10  ? 4  え   4  10 5  お   4  15 想定していなかった5行目を追加しました。 E1に=LARGE(B1:B5,1) E2に=LARGE(B1:B5,2) E3に=LARGE(B1:B5,3) F1とF2とF3に{=MOD(LARGE(B1:B5*(MAX(C1:C5)+1)+C1:C5,ROW(B1:B5)),MAX(C1:C5)+1)} G1に=INDEX($A$1:$A$5,SUMPRODUCT((B$1:B$5=E1)*(C$1:C$5=F1)*ROW(A$1:A$5)))を入れましたがB列とC列が同じ組み合わせがある場合ではエラーが出てしまいます。 G1に『い』、G2に『お』を表示させる事は可能でしょうか? 重ね重ね申し訳有りませんがわかる方おりましたらよろしくお願いします。

  • エクセル クラス別に各教科の順位と名前を抽出

    こんにちは いつもお世話になっています 参照先を見ていただくと助かるんですが、御面倒をおかけします。 http://oshiete.homes.jp/qa6551932.html 質問内容はこちらと同じですが こちらの関数を使わせてもらおうとしたところ失敗しています。 J2セルに =IF(OFFSET(E2,0,MATCH(成績順位!C$1,C$1:E$1,FALSE))=成績順位!C$2,OFFSET(B2,0,MATCH(成績順位!C$1,C$1:E$1,FALSE))-A2/1000,"") と入力した時点でエラーが出ました。 他の関数でも構いません。マクロでは複雑で応用が難しいと思っています。 クラス別に各教科の順位と名前を抽出する方法を教えてください。 ピボットテーブルでもできるでしょうか? 初心者用のものだと助かります。 エクセル2007

  • エクセルで同順位がある場合

    エクセル2003を使用しています。下記のようなデータで数値の大きいものから順に順位をつけています。ところが同じ数値があった場合、一番左の項目しか表示されません。左から順番に表示させるにはどうしたらよいでしょうか?よろしくお願いいたします。    A   B    C     D     E    F    G   H   1     みかんりんごばなな  2  あ社 15  15  10  みかん 15  みかん 15  3  い社  20   30   30   りんご 20  りんご 20 E2=index($b$1:$d$1,1,match(large($b$2:$d$2,1),b2:d2,0) F2=large($b2:$d2,1) 上のような式だと、1位が同数値だった場合、左端のみかんだけが表示されてしまいます。G2はりんご、G3にはばななが表示されるようにしたいのです。 わかる方、よろしくお願いします!

  • excel 2つの条件(続き)

    ​http://okwave.jp/qa5054165.html​ の続きですが、    A   B  C  D  E  F   G 1  あ   3  22    4  15  ? 2  い   4  15    4  10  ? 3  う   2  10 4  え   4  10 E1に=LARGE(B1:B4,1) E2に=LARGE(B1:B4,2) F1とF2に{=MOD(LARGE(B1:B4*(MAX(C1:C4)+1)+C1:C4,ROW(B1:B4)),MAX(C1:C4)+1)} をいれました、画像のようにG1とG2に対応したA列を表示させるにはどうすれば良いでしょうか? よろしくお願いします。 

  • エクセルの順位抽出について

    Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。

  • Excel2010 ワーストランキングの作り方

    Excel2010を使用しています。 売上のワーストランキングを作りたいのですが、作り方がわからず困っています。 普通のランキングは作ることができたのですが、ワーストランキングの作り方がわかりません。     A    B    C   D   E   F  1 日付  時間  商品 売価 減価 利益  2 01/10 10:20  ○   100  60   40  3 01/11 10:25  ×   200  140   60  4 01/12 10:21  △   150  50   100  5 01/14 11:00  □   250  190   60  ・  ・  ・ 300 シート1にこのような表があります。 そして別のシートに     A    B    C   D   E   F  1          利益ベスト5  2 順位  日付  商品 利益  3  1   01/12  △  100      4  2   01/11  ×   60  5  2   01/14  □   60  6  3   01/10  ○   40 これはネットで検索して ランキングのシートのA3~A6には =IF(シート1!$F$2="","",IF(RANK(LARGE(シート1!$F$2:$F$300,ROW(A1)),シート1!$F$2:$F$300)>5,"",RANK(LARGE(シート1!$F$2:$F$300,ROW(A1)),シート1!$F$2:$F$300))) と入れたら順位を自動で表示できるようになり、 B3~B6には =IF($A$3="","",INDEX(シート1!$A:$A,1000-LARGE(INDEX((LARGE(シート1$D$3:$D$300,ROW(A1))=シート1$D$3:$D$300)*1000-ROW(シート1$D$3:$D$300),0),COUNTIF($B3:$B3,$B3)))) と入れたら日付が表示されるようになりました。 C列、D列もB列の =IF($A$3="","",INDEX(シート1!$A:$A,1000-・・・ のAをCとFに変えることで商品・利益が表示されるようになりました。 そこでこれのワーストランキングを作りたくてLARGEをSMALLに変えればできるのかと 思っていましたができませんでした。 正直上の関数も完全には理解できていません。 ネットで探しても自分のやりたいことにあう記事がなく質問することにしました。 Excel初心者で説明も下手ですが、よろしければお願いします。 自分の作りたいのは下のようなものです。     A    B    C   D   E   F  1          ワースト5  2 順位  日付  商品 利益  3  1   01/10  ○   40  4  2   01/14  □   60  5  2   01/11  ×   60  6  3   01/12  △   100 よろしくお願いします。      

  • Excelの関数について教えてください。

    前にも同じような質問をしたのですが、よく理解できなかったので、もう一度質問させていただきます。 まず、A列に1~10まで入力します。次にB列に11~20まで入力します。同様にC列に21~30まで入力します。そして、セルE3に2、セルE5に12に入力します。 それから、セルE3の値をA列から検索し、セルE5の値をB列から検索し、その重なったB行のC列の値を求めたいのです。ここでは22になります。 自分なりに考えてみましたが、 =IF(MATCH(F3,A:A)=MATCH(F5,B:B),INDEX(A2:C10,MATCH(F3,A:A)=MATCH(F5,B:B),C:C,"")) ではエラーがでてしまいます。 いくら考えてもわかりません。 どなたか教えてください。よろしくお願いします。

専門家に質問してみよう