• ベストアンサー

Excelで上位だけ表示

過去質問にもあったのですが、他の方法はないのかと思いまして質問させてください…。今日昨日はじめたばっかりのド素人なので過去質問読みましたが理解できませんでした;; まず、表で、 出席番号・名前・点数・順位(1 山田太郎 435 1など) を表示して、その下に上位3人のデータを表示するというものです。 自分でVLOOKUPを使ってどうにかしようとしたのですが、色々やってみたものの失敗続きでして... VLOOKUPとLARGEあたりでできますでしょうか? 順位はRANKで表示しています

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

  • ベストアンサー
回答No.4

No.3です。 >とりあえず今扱っているサンプルデータではかぶってません 「たまたま」サンプルでは重複する順位がないだけで、今後のデータによっては同じ順位が出る可能性があるのなら、No.3 の2番目の方法(同じ順位がありうる場合)を使ってくださいね。 サンプルデータで試してみればおわかりになると思いますが、点数が同じで順位が重複する場合、1番目の数式では対応できません。 * ここで No.3 の訂正です。 No.3 の2番目の方法、作業列の E2に入れる数式のあとに書いているコメントは、次のように訂正します。 「以下、データのある行まで下にオートフィルでコピー」   ↓ 「以下、データの最終行までオートフィルでコピー」 * * >ROW(A1)、COLUMN(A1)はどういう役割をしているのかよくわからない ◆ROW関数・・指定したセルの行番号が返ります。 ◆COLUMN関数・・指定したセルの列番号が返ります。 ためしに、どのセルでもいいので =ROW(A1) と入れてみてください。 入力したセルがどこであっても、A1セルの行番号ですから 1 と表示されるはずです。 では、その数式をオートフィルを使って下方向へいくつかコピーしてください。 数式は、=ROW(A2)、=ROW(A3)、=ROW(A4)・・と変わり、表示される値も 2、3、4 ・・になると思います。 A2の行番号は 2、A3の行番号は 3 ・・だからですね。 次に、最初の =ROW(A1) の数式を右方向にフィルコピーしてください。 数式は、=ROW(B1)、=ROW(C1)、=ROW(D1)・・と変わりますが、表示される値はどこまでいっても 1 のままです。 B1 も C1 も行番号は 1 ですから当然です。 次です。どのセルでもいいので =COLUMN(A1) と入れてみてください。 A1セルはもちろん A列ですから、列番号 1 が表示されます。 これを先ほどと同じように下方向へフィルコピーするとどうなるでしょうか? 数式は、=COLUMN(A2)、=COLUMN(A3)・・と変わりますが、A列には変わりないのでどこまでいっても 1 のままです。 では =COLUMN(A1) の数式を右方向にフィルコピーしてください。 数式は =COLUMN(B1)、=COLUMN(C1)・・と変わり、値も 2、3、4 ・・になります。 B列の列番号は 2、C列の列番号は 3 だからです。 要は、=ROW(A1)を下方向にコピーすれば、値が 1、2、3 ・・と変わり、 =COLUMN(A1) を右方向にコピーすれば、値が 1、2、3 ・・ に変わる、ということです。 われながらクドい説明だと思いつつ・・・ここまではよろしいでしょうか? * これを利用すれば次のようなことができます。 たとえば A2:A30 のセルに、重複しない数値がランダムに入っているとします。 その中の 1~3番目に大きい数値は LARGE関数を使えば求めることができますよね? C2:C4 に数式を入れる場合、 C2 に =LARGE($A$2:$A$30,1) と入力すれば 1番大きな数値が表示されます。 これだけならいいのですが、この数式を C4 まで下にコピーしても、数式はまったく変わらず、最後の 1 は 1 のままですから、C3 にも C4 にも 1番大きな数値が表示されてしまいます。 数式をコピーしても 1 は勝手に 2、3・・ とは変わってくれないのです。 では、数式をいったんコピーしたあと、C3 の 1 は 2 に、C4 の 1 は 3 に、いちいち修正しなければいけないのでしょうか? もうおわかりだと思いますが、そんな必要はありません。 このようなときに ROW関数が威力を発揮するのです。 なんだか、やっと本題に近づいてきたような気がしてきました(^o^)> C2 に =LARGE($A$2:$A$30,ROW(A1)) と入れ、下にコピーすれば、数式には何も手を加えることなく C3 には 2番目に大きな数値が、C4 には3番目に大きな数値が表示されるというわけです。理由はわかりますよね? C2:E2 のように横方向に結果を表示させたければ、 C2 に =LARGE($A$2:$A$30,COLUMN(A1)) を入れて、右にコピーすればいいのです。 まとめ: 数式を下方向や右方向にコピーするだけで、数式の中の引数などを 1、2、3 ・・と変えたいときに、ROW関数や COLUMN関数を使います。 ついでに: >これをするにはVLOOKUPを使うといいと聞いたので、 >てっきり使うものなのかと思ってました VLOOKUP関数の検索値は必ず表の左はしに(A列から始まる表ならA列に)なければいけません。 ですから、「順位」に絶対に重複がなければ 「順位」を表の左はしに、 重複が出る可能性があれば、No.3 の 2番目の方法で使っている「作業列」を表の左はしにもってくるというように、表のレイアウトを変更さえすれば VLOOKUP関数でもご質問の上位3位を表示させることは可能です。

-ria-
質問者

お礼

再び丁寧な回答ありがとうございます ROW(A1)、COLUMN(A1)の役割もよくわかりました!手間を省くためのものだったのですねー! VLOOKUPが、左端からしか検索できないことは知っていたのですが、妙にこだわってしまってそこばかり考えていたのでした;並び替えればできないことはないのですね ありがとうございました!

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

その他の回答 (3)

回答No.3

こんばんは。 関数を使う方法ですが・・ >過去質問にもあったのですが、他の方法はないのかと思いまして 同じ方法でしたらすみません。 * 出席番号・名前・点数・順位が A列~D列にあり、 1行目が見出し、データ範囲が A2:D30 だとします。 * ところで・・ 1位から3位までに同じ順位はないのでしょうか(3位が2人いるとか)? ▼1位から3位までに同じ順位はない場合 表示させたい最初のセルに↓ ------------------------------------------- =INDEX($A$2:$D$30,MATCH(SMALL($D$2:$D$30,ROW(A1)),$D$2:$D$30,0),COLUMN(A1)) ------------------------------------------- そのセルが A32 だとすれば、D32 まで(計4列分)右にオートフィルでコピー そのまま下に3行分コピー * ROW(A1)、COLUMN(A1) の A1 はそのまま A1 のままにしておいてください。 列記号、データ範囲は適宜変更してください。 * ▼1位から3位までに同じ順位がありうる場合 方法はいろいろあると思いますが、とりあえず作業列を使う方法です。 E列を作業列とします。 E2に↓(順位が D列だとして) ------------------------ =IF(D2>3,"",D2*1000+A2) ------------------------ 以下、データのある行まで下にオートフィルでコピー 表示させたい最初のセルに↓ ---------------------------------------- =IF(COUNT($E$2:$E$30)<ROW(A1),"",INDEX($A$2:$D$30,MATCH(SMALL($E$2:$E$30,ROW(A1)),$E$2:$E$30,0),COLUMN(A1))) ---------------------------------------- そのセルが A32 だとすれば、D32 まで(計4列分)右にオートフィルでコピー そのまま下に適当に(10行分ほど)コピー 10行分数式を入れても、4位以下は表示されません。 * 最初の数式に同じく、ROW(A1)、COLUMN(A1) の A1 はそのまま A1 のままにしておいてください。 列記号、データ範囲は適宜変更してください。 作業列が目障りなら非表示にしてください。

-ria-
質問者

お礼

回答ありがとうございます 同じ順位はたぶん無い…とおもいます。とりあえず今扱っているサンプルデータではかぶってません とりあえず教えてくださった方法をそのまま試してみたところ、できました! でも、ROW(A1)、COLUMN(A1)はどういう役割をしているのかよくわからないので、もしよければ教えていただけると嬉しいです

全文を見る
すると、全ての回答が全文表示されます。
  • rio_d
  • ベストアンサー率47% (71/149)
回答No.2

こんばんは。 Lookup系関数やMatch関数など、表からキーワードで検索するという検索系関数は、検索するデータが昇順に並んでいなければいけないとか、同じデータが2個以上あると正しい結果を返さないとか、色々と制約があるため、順位などの検索は結構手間がかかります。 すごく卑怯な手を使っていいのであれば、下記のような解答もあるということで。 【条件】 まず元データとして、   A列は出席番号, B列は名前, C列は点数, D列は順位を入力する   データは1行目~40行目まで入っている という条件にしますね。 【やり方】 (1) A1~C40まで、データを入れます。 (2) D1セルに、下記を入れます。    =RANK($C1,$C$1:$C$40)+A1*0.001 (3) D1セルの内容を、D2~D40にコピーします。 (4) このままだと小数点で一杯なので、セルの書式設定を「数値」にし、小数点以下を表示させないようにします。 -----これでランク確定----- (5) A42セルに、=SMALL($D$1:$D$40,1) と入力します。 (6) A43セルに、=SMALL($D$1:$D$40,2) と入力します。 (7) 以下、A44~A61セルまで、上記SMALL関数を入れていきます。    ただし、2番目の引数は+1ずつしていってください。 (8) A42~A61セルの見栄えも小数点で一杯なので、(4)と同様にセルの書式設定を行います。 (9) B42セルに、=INDEX($B$1:$B$40,MATCH(A42,$D$1:$D$40,0)) と入力します。 (10) B42セルの内容を、B43~B61セルにコピーします。 (11) C42セルに、=INDEX($C$1:$C$40,MATCH(A42,$D$1:$D$40,0)) と入力します。 (12) C42セルの内容を、C43~C61セルにコピーします。 -----一応完成----- 【卑怯な手の解説】 (2)でA1*0.001を足しているのは、同ランクを排除するためです。 ここで同ランクのものがあると、B42セルなどに入れるMATCH関数で、正しい場所を拾ってこなくなるため、わざわざ同ランクを排除する行為が必要となります。 と、ここだけがキモです。他は関数をいじり倒していれば上記のようにしなくても何とかなると思います。 それぞれの関数の意味は、申し訳ないんですがご自身でお調べ下さいませ。

-ria-
質問者

お礼

回答ありがとうございます LOOKUP系はランクには不向きなんですね。これをするにはVLOOKUPを使うといいと聞いたので、てっきり使うものなのかと思ってました なんだかとっても奥が深そうでおもしろいですね

全文を見る
すると、全ての回答が全文表示されます。
  • ken1low
  • ベストアンサー率31% (21/66)
回答No.1

こんにちは。 オートフィルタを使うのはだめでしょうか?

-ria-
質問者

お礼

早速ありがとうございます できればオートフィルタじゃなく、ぱっと見が普通の表っぽいほうがいいので... というか実はオートフィルタもまだ仕組みがよくわかってないのです;すみません;

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

関連するQ&A

  • excelでテストのランキングの表を作りたい

    excel2003で100人ほどのテストの点数のランキングの表を作りたいです。 元の表として「氏名」「点数」「順位」の項目をつくり、氏名、点数は手入力で、順位はRANKという関数で順位を与えました。 そして、その中で上位30位を別の表として「順位(1位から30位)」「点数」「氏名」という項目を作り表作成したいんですけど 点数に該当する氏名の表示方法がわかりません。 ・「順位」→RANKで1位から、30人分を表示(元の表の点数を変えると順位も変わる) ・「点数」→LARGEで点数の高い順に表示(元の表の点数を変えると順位も変わる) ・「氏名」→その点数に該当する氏名を表示する方法がわかりません。また、同じ点数が数名いる場合に氏名が重複しないようにするにはどうすればいいでしょうか。 エクセル初心者です。よろしくお願いします。 わかりにくい説明ですいません、何かあったら補足で説明いたします。

  • EXCELで重複したデータの処理について

    氏名 | 点数 ----------- 山田 | ----------- 鈴木 | ----------- 小林 | ----------- 高橋 | ----------- 田中 | という表があるとします。 氏名 | 点数 ------------ 山田 | 80 ------------ 鈴木 | 100 ------------ 小林 | 70 ------------ 高橋 | 80 ------------ 田中 | 80 というように点数を入力すると 順位 | 名前 | 点数 ------------------- 1 | 鈴木 | 100 ------------------- 2 | 山田 | 80 ------------------- 2 | 高橋 | 80 ------------------- 2 | 田中 | 80 ------------------- 5 | 小林 | 70 のような表を自動的に作成できるようにしたいのですが、どうもうまくいきません。 順位と点数の並び替えは比較的簡単にできたのですが、それに対応した名前の並び替えがうまくできないのです。 VLOOKUP関数を使用して得点に対応した名前を表示させようとしたのですが、 順位 | 名前 | 点数 -------------------- 1 | 鈴木 | 100 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 5 | 小林 | 70 となってしまい、80点の取得者が全て山田になってしまいました。 このような場合、どのようにすれば正常に並び替えを行うことができるのでしょうか。 言葉足らずで申し訳ありませんが、よろしくお願い致します。 OSはWindowsXP、ソフトはEXCEL2002を使用しています。

  • データが重複データの扱い(対処方法) RANK・MATCH・INDEX

    ずばりこんなデータから、順位とその人の名前を出す。 1)重複した場合、RANKは、同じ位置して、次の番は、欠としている。   から、下記のような順位になると思われる。  氏名 点数 順位  鈴木 700 5  斉藤 415 8   菅野 700 5  赤井 780 4  田村 900 2  池田 620 7   楽谷 900 2  金田 940 1  ★問題なのが、同じランクになった人の名前をちゃんと表示したい。   1位からの点数を表示するのは、LARGE関数でできるんだけど、   同じランクになっている人が、別々に出てこない。   とても安易な方法だと思ったんですが、   検索する範囲(表の行番号)をMATCH関数でもとめておく   点数をつかうので、当然同じ点数には、同じ行がはいる(上から   順番だから、1行目と3行目に同じ点数なら、1(順位)が連続する)   それで、その番号を使いVLOOKUP関数で、名前を拾ってくる。   其の時、自分で同じ番号のところを修正しておく(1と3にする)   そうすれば、名前がちゃんと出てくる。   でも、其のセルには、数式がなくなる。   ⇒VBAや、難しい関数が使えないと、これが限界なのか。。    参考にさせてもらうものもみたんですが、    なかなか・・この苦肉の策でもヨシと思っていいのか・・    ちょっと自信なくて、、       ベスト8(ランクごとに返す)     点数 氏名 番号  1位 ヾ  ヾ    2位 ヾ  ヾ  2位 ヾ  ヾ  4位 ヾ  ヾ  5位 ヾ  ヾ  5位 ヾ  ヾ  7位 ヾ  ヾ  8位 ヾ  ヾ    

  • SEOとページランクについて どちらが上位表示されるか

    質問なのですが、 例えばサングラスと検索します。 まったく同じタイトルのHPでページランク3のサイトと2のサイトだったら3のサイトが上位に来るかと思いますが TOP(INDEX)のタイトルが「サングラス」でランク2のサイトと TOPではなくページのタイトルがサングラスでページがランク3のサイトだとどちらが上位に表示されるのでしょうか?? やはりランクの高い方が上位に表示されるのでしょうか?? それともTOP(ホームページのタイトル自体がサングラスだけどランクは2)の方が有利なのでしょうか??

  • エクセル「VLOOKUP」の使い方

    エクセル2000です 「名簿&住所録」シートを検索して、その人の電話番号を表示しようとしています。 例. =VLOOKUP("山田 太郎",'名簿&住所録'!F:M,7,FALSE) この"山田 太郎"の部分を、可変(セル「A1」や「A2」)に指定できないでしょうか? 例. =VLOOKUP(A1,'名簿&住所録'!F:M,7,FALSE) ヘルプを見ましたが分からなくて、、、

  • エクセル関数VLOOKUPで教えてください。 

    エクセル関数VLOOKUPで教えてください。  シ-ト1にA列から学籍番号・B列に氏名・C列に点数(数値)を記入してあります。 シ-ト2に順位表を作成しA列にLARGE関数を使用してシ-ト1から点数降順(昇順)に表示しました。シ-ト2のB列に学籍番号 C列に氏名 をVLOOKUP関数でシ-ト1から抽出したいのですが、点数が同点の場合に当該複数名を表示せず単一名になってしまいます。VBA・マクロを使用せずに関数のみで同一点数獲得者の氏名を個別個々に表示させる方法を教えてください。

  • キーワード検索で上位表示させるためのコツは?

    現在、ショップとしてhpをスポンサーサイトで表示しています。 キーワード検索で上位に表示できれば有り難いと思っているのですが、 ウェブにアップしても最初は上位3位にあるのですが4日すると徐々に順位が下がって2~3ページに下がってしまいます。 画像を追加したりすると数日上位に上がりますが直ぐに下がっていきます。 ライバルサイトは常に上位に固定されていて、それ程トップページには 変化が無いのに不思議に思います。このて程度のテキスト変更なら私もしているのに? 何か、上位表示をさせるのにコツがあるのでしょうか? よく魅力的なサイトでさればリンクが多くなり上位が続くと聞きますがそれだけでしょうか? 例えば 1、一週間に一度は、トップページやその他のページ含め最低数ページの内容を少しでも変更してウェブ上にアップしなおす、とか 2、画像ファイル名を常に新しいファイル名に変更するとか、その他alt=の文字を常に変更するとか 内容だけでは、ランクが下がるように思うのですがね。勿論、内容の充実は大きな要因ではあると思いますが、それだけでしょうか? 詳しい方がおられましたら宜しく、ご指導願います 私が言う上位表示とは6位までです。

  • エクセル 同順位の処理

    いつもお世話になっております。  上位3名の合計点を求める時に、同順位(例:1位1名・2位1名・3位2名)が出た場合、3位者(同順位者)については1名のみの点数を計算したいのですがその方法がわかりません。よろしくお願いします。  また、2位が2名の時は、1位と2位の3名の合計点の計算となります。  順位はRANK関数を使用しています。 得点 順位 上位合計点 98  1 80  3 76        ? 82  2 80  3 よろしくお願いします。

  • エクセルの抽出結果表示について。

    こんばんは。 エクセルのピポットテーブルを利用し、集計表を作成しています。 そこで質問なのですが、シート(1)には、   A      B     C    D 1 伝票番号 お客様名 品名  数量 2 123   山田太郎 りんご 10 3 123   山田太郎 みかん 12  4 123   山田太郎 レモン  9 5 125   山田花子 りんご 11 6 125   山田花子 メロン  6 7 139   川田昭子 なす   5 8 139   川田昭子 トマト  6       ・       ・        ・ というような、データが入力されているとします。(日々入力されていく為、何千行になることも・・・) シート(2)には、このシート(1)より伝票番号からデータを呼び出し、順番に下の行に表示を加えいきたいのです。 そして、このシート(2)のデータを基にピポットテーブルを作成し、集計表を完成させたいのです。 いまは、シート(2)のような内容を2度手間のように、入力し集計表を作成しています。 ただシート(1)のような全体分のデータはあるので、利用したいし、手間を省きたいのです。 マクロとかになるのですかね? (あまり分からないけれど・・・) VLOOKUP関数を利用しようとしたのですが、例のように、同じ伝票番号に対して、複数行のデータがあるため、1行しか表示できないのです。 なにか、いい方法はありますか?

  • エクセルの積み立て棒グラフへ複数の値を割り当てたい

    このようなデータを積み立て、 H9.4.1 H10.4.1 順位 点数 順位 点数 山田 03位 85 01位 89 田中 02位 96 03位 68 鈴木 05位 66 02位 76 柴田 01位 100 04位 65 佐野 04位 70 05位 58 以下のように、系列名と値を各棒の中に表示させた 積み立て棒グラフで表現したいのですが、 順位と点数の様に2種類の値をデータラベルに割り当てる方法が どうしてもわかりません。    | 佐野,03位,70 | | 佐野,05位,58 |    | 柴田,01位,100| | 柴田,04位,65 |    | 鈴木,05位,66 | | 鈴木,02位,76 |    | 田中,02位,96 | | 田中,03位,68 |    | 山田,03位,85 | | 山田,01位,89 | H9.4.1 H10.4.1 どなたか、教えて頂けますでしょうか。

専門家に質問してみよう