- 締切済み
Excel ベスト3の名前を表示
Excel2007 の環境で作業しています。 LARGE関数・INDEX関数・MATCH関数を駆使して成績表からベスト3の得点と名前を拾ってきて、「ベスト3表」を作っています。 表は、画像にて確認お願いします。 セルJ2には「=LARGE($C$3:$C$7,H3)」の式で、H3の順位の点数を表示しています。セルI3に「=INDEX($B$3:$B$7,MATCH(J3,$C$3:$C$7,0))」で、セルJ2で得た値から名前を拾ってくるようにしたんですが、画像の通り、同じ点数の場合は学生番号の若い人が表示されてしまいます。こうなることは予想できていたのですが、問題はこれを回避して、次の人の名前を表示できるようにしたいと思っています。 例えば、 1 Aさん 100点 2 Bさん 90点 3 Cさん 90点 4 Dさん 70点 5 Eさん 80点 の成績表があったときに、 1位 Aさん 100点 2位 Bくん 90点 3位 Cくん 90点 のように表示したい。 もしくは、Eさんも90点であるのであれば、 1位 Aさん 100点 2位 Bくん 90点 3位 Cくん 他1名 90点 のように、学生番号の若い人が優先的に表示され、同順位がベスト3位で表示しきれない場合は、「他○名」と3位の人の名前の後につけたいと思っています。(もしくは、3位の下に他1名と表示でもいいです) 我儘を言えば、順位も1・2・2のように2位タイとなれば幸いですが、一先ず、名前が正しく表示されるようにしたいと思っております。さらに詳しい方でお願いできるのであれば、順位も1・2・2のように変動できるようにお願いしたいです。 注文が多いですが、お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- winarrow07
- ベストアンサー率41% (143/346)
>マクロとは、Excel操作の記録・実行のことですよね? うーん。。なんか考えが偏ってるというか視野が狭い気が。。 >VBAを組めば、解決が早いんですが、VBAを使わず関数でやり遂げたいと思っております。 早いと分かっててなぜ遠回りするのですか?? 非効率な気が。。 あと、関数をいくつも使ってごちゃごちゃするすると見にくくて後で変更が必要になった場合とかも面倒ですし、そういう面でもVBAで記述したほうがいいかなと思いますけど。 関数でやり遂げることに美徳を感じるのですか? というかVBAでもエクセル関数を存分に使いますけど? >『マクロ=VBA』 >『マクロ≠VBA』 うーん。。 マクロとは特定の手順をプログラムとして記述して(自動)で実行させることです。エクセルの場合VBAで記述します。 という回答でいいでしょうか。
- winarrow07
- ベストアンサー率41% (143/346)
マクロを組めばいかようにもできる気がしますが マクロを組む気はないのでしょうか?
補足
winarrow07様 ご回答ありがとうございます。 マクロとは、Excel操作の記録・実行のことですよね?VBEでVBAのコードを入力することと同じと判断していいんでしょうか? VBAを組めば、解決が早いんですが、VBAを使わず関数でやり遂げたいと思っております。 もちろん、関数では無理となればVBAを検討したいと思います。 回答としましては、 『マクロ=VBA』であれば、 現状はマクロを組む気はありませんが、最終的に関数で無理と判断した場合、マクロを検討したいと思います。 『マクロ≠VBA』であれば、 マクロを組む気はありません。関数でできないと判断すればVBAを使うことを検討したいと思います。 言葉が乱雑ですみません。
補足
winarrow07様 2度目のご回答ありがとうございます。 >考えが偏ってるというか視野が狭い すみません。マクロで操作の記録・実行ってむずがゆいんです。それくらい(コード)打ち込めばいいのでは?というのと、マクロの記録で作られるコードが苦手な文法?と表現すればいいのか、そんな感じで、嫌っている分、考えが偏っているかもしれません。 >早いと分かっててなぜ遠回りするのですか?? >関数でやり遂げることに美徳を感じるのですか? これも偏見ですみません。現在、とあるExcel講習の参考資料作りで、Excelは「表計算ソフト」とVBAは「プログラム言語」と割り切って、Excelだけを教えるための資料を作成してくれと指令来まして・・・。そこでこの話が浮上して困っています。 >VBAでもエクセル関数を存分に使いますけど? 確かに、仰る通りです。 VBAでしかできないとなれば、Excelの関数だけでは無理があると説明で終わらせれるんですが、できるだけ実現したいと思う次第で、す。 winarrow07様、またこれを見て頂いた方、どなたかExcel関数だけで解決する方法を知っている方がいらっしゃいましたら、教えてください。よろしくお願いします。