[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『男女別の順位一覧表』(Amaru)
下記のような男女混在している商品別の売上表があります。 そのデーターには男女合計の総合順位はあるのですが、別表として商品別の男女別の売上TOP3を表示したいのです。 いろいろ試してみたのですが、関数を使ってすることは可能でしょうか?よろしくお願い致します。(WindowsXP Excel2002)
A B C D E F G H 1 氏名 性別 商品A 総合順位 商品B 総合順位 商品C 総合順位 2 田中 男 10 1 2 5 1 6 3 鈴木 女 3 5 10 1 2 5 4 林 男 8 2 4 3 10 1 5 佐藤 女 6 4 8 2 5 2
別表 商品A 順位 氏名 個数 総合順位 男 1位 田中 10 1 男 2位 林 8 2 女 1位 鈴木 3 5 女 2位 佐藤 6 4 →の商品別です。
配列数式をつかってできると思うのですが・・・ あまり詳しくは無いので http://hp.vector.co.jp/authors/VA014071/tips/hairetsu.html ここを参考にしてみてください。
ひとまかせの(Null)
ばたばたしてて遅くなりました。 売上表をシート1、別表をシート2として考えています。 A B C D E 1 商品A Sheet1最終行: 5 2 順位 氏名 個数 総合順位 3 男 1 田中 10 1 4 男 2 林 8 2 5 男 3 #NUM! #NUM! #NUM! 6 女 1 佐藤 6 4 7 女 2 鈴木 3 5 8 女 3 #NUM! #NUM! #NUM! A1には、売上表と同じ商品名を入力。『Sheet1最終行:』の有無はご自由に。 2行目には、項目を入力。 A3:B8には、手入力で男女の1,2,3位をセットします。 D1セルで売上表のデータ範囲(行数)を出します。(>>範囲に変動があると思いましたので) セルに何も入力されていない個数=行数として考えています。IF関数で空白にしている場合もカウントされます。 =COUNTA(Sheet1!A:A) D列で男女の各順位の個数を求めます。 =LARGE(IF(INDIRECT("Sheet1!$B$1:$B$"&$D$1)=$A3,INDIRECT(ADDRESS(1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE),,,"Sheet1")&":"&ADDRESS($D$1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE)))),$B3) Ctrl,Shift,Enterキーを一緒に打鍵して、配列数式として確定してください。 C列で上記の個数および性別を元に氏名を求めます。 =INDEX(INDIRECT("Sheet1!$A$1:$A$"&$D$1),MATCH($A3&$D3,INDIRECT("Sheet1!$B$1:$B$"&$D$1)&INDIRECT(ADDRESS(1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE),,,"Sheet1")&":"&ADDRESS($D$1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE))),FALSE)) これも同様に配列数式として確定してください。 E列では、性別(A列)・氏名(C列)を元に、値を探します。 =SUMPRODUCT(($A4=INDIRECT("Sheet1!$B$1:$B$"&$D$1))*($C4=INDIRECT("Sheet1!$A$1:$A$"&$D$1)),INDIRECT(ADDRESS(1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE)+1,,,"Sheet1")&":"&ADDRESS($D$1,MATCH($A$1,Sheet1!$A$1:$H$1,FALSE)+1))) 範囲が変動するだろうと考えてINDIRECT関数を使い長くなっています。 固定範囲ならば、該当する範囲に変更してください。また、D1セルも不要となります。 該当する順位が存在しない場合は、エラー値#NUM!が返ります。 また、同個数が存在する場合には、対応させていません。 (考えるのが面倒だったのでゴメン!) データ量によっては、大変重たくなります。 ご質問の意図に合っているか『?』ですが、こんな感じです。(sin)
sin様、Null様ありがとうございます!早速試してみましたが、完璧です! 丁寧に細かく数式の意味まで教えていただいたので、自分なりに確認しつつ 他にも利用できればと思います。 数式って奥が深いですね。本当に有難うございました。(Amaru)
お役に立てたようで一安心です。 ついでと言っては何ですが、同個数が存在する場合に、対応させたものもアップしておきます。 ここでは、上の行に有るものを上位と考えています。条件によっては、計算式が変わります。 シート1に作業列を設けます。 J2セルにシート2のA1セルで指定した商品の個数の存在セル範囲を表示させます。 =ADDRESS(1,MATCH(Sheet2!$A$1,$A$1:$H$1,FALSE))&":"&ADDRESS(Sheet2!$D$1,MATCH(Sheet2!$A$1,$A$1:$H$1,FALSE)) J3セルにシート2のA1セルで指定した商品の個数が存在するセルの列ナンバーを表示させます。 (A列=1、B列=2、C列=3、・・・) =MATCH(Sheet2!$A$1,$A$1:$H$1,FALSE) K1セルには『該当商品仮個数』とでも項目を入力し、 K2セル以下に順位付けの為の仮個数を表示させます。K2セルに入力後下方コピー。 =IF($A2="","",(INDIRECT(ADDRESS(ROW(),$J$3))&"."&100-COUNTIF(INDIRECT(ADDRESS(1,$J$3)&":"&ADDRESS(ROW(),$J$3)),INDIRECT(ADDRESS(ROW(),$J$3))))*1) 男女合わせた任意の商品全ての中で、各同個数に対し、それぞれ100個までは対応します。 それ以上が予想される場合は、『100』の部分を『1000』にすれば、1000個まで対応できます。 現状の個数が5個の場合で、1個目が5.99、2個目が5.98、3個目が5.97の様になります。 シート2は、前出と同様にD1セルに入力し、 C3,D3,E3セルに下記の式を入力し、全て配列数式として確定してください。そして下方コピー。 C3 ~~~~~~~~~~~~~~~~~ =INDEX(INDIRECT("Sheet1!$A$1:$A"&$D$1),MATCH(LARGE(IF(INDIRECT("Sheet1!$B$1:$B$"&$D$1)=$A3,INDIRECT("Sheet1!$K$1:$K$"&$D$1)),$B3),INDIRECT("Sheet1!$K$1:$K$"&$D$1),FALSE)) D3 =INDEX(INDIRECT("Sheet1!"&Sheet1!$J$2),MATCH(LARGE(IF(INDIRECT("Sheet1!$B$1:$B$"&$D$1)=$A3,INDIRECT("Sheet1!$K$1:$K$"&$D$1)),$B3),INDIRECT("Sheet1!$K$1:$K$"&$D$1),FALSE)) E3 =INDEX(OFFSET(INDIRECT("Sheet1!"&Sheet1!$J$2),,1),MATCH(LARGE(IF(INDIRECT("Sheet1!$B$1:$B$"&$D$1)=$A3,INDIRECT("Sheet1!$K$1:$K$"&$D$1)),$B3),INDIRECT("Sheet1!$K$1:$K$"&$D$1),FALSE)) 前回の式と似たような感じです。E3は、OFFSET関数で一列右に代えてます。 以上です。順位付けの条件等ありましたら、分かる範囲であればご協力します。(sin)
sin様、重ね重ねありがとうございます!今回は同個数の物は無かったのですが、 今後他にも利用させていただきたいと思いますので、いろいろ触ってみたいと思います。 とっても勉強になります。いろいろ有難うございました。(Amaru)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.