- ベストアンサー
エクセルの関数について教えてください
エクセルについて教えてください。 下の表は商品毎の支店別販売数量のリストです。 ┃ A ┃ B ┃ C ┃ D ┃ E ┃ ╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋ 1┃(空欄) ┃ 商品名 ┃ 支店A ┃ 支店B ┃ 支店C ┃ ╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋ 2┃(空欄) ┃ 商品1 ┃ 1 ┃ 2 ┃ 3 ┃ ╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋ 3┃(空欄) ┃ 商品2 ┃ 9 ┃ 4 ┃ 3 ┃ ╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋ 4┃(空欄) ┃ 商品3 ┃ 4 ┃ 8 ┃ 6 ┃ ╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋ 1行目はタイトル、2行目以下がデータ部分です。実現したいのは商品毎の最も販売数の大きい支店の支店名を商品名の左(A列)に表示させたいのです。 すなわちセルA2には「支店C」を、A3には「支店A」を表示させたいのですが、どんな関数を使えばいいでしょうか。 実際のデータは商品数(行数)が500位、支店(列)は20位あります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
最終行(例ですと5行目)に1行目をコピーします。 ┃(空欄) ┃ 商品名 ┃ 支店A ┃ 支店B ┃ 支店C ┃ A2に、 =HLOOKUP(MAX(C2:E2),$C$2:$E$5,COUNTA(B2:$B$5),0) をコピー 一番下までコピー *E5、B5は、最終行の数を指定してください。 問題は、同点首位が複数あった場合、 A→Cの優先順位で結果が返されることです。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
思考段階通りに式にして見ました。 (1)データをB1からE7まで入力する。 (2)F2に式=MAX(C2:E2)をいれ縦に(列方向に)複写。 (3)G2に式=MATCH(F2,C2:E2,0)をいれ縦に複写。 (4)A2に式=INDEX($C$1:$E$1,$G2)をいれ、列方向に複写。 F,G列を使わないようにするには、A2の式で入れ子にすれば 出来る。説明のため敢えて分離したままにした。 商品名 東京 大阪 仙台 最高値 何番目 大阪 A 12 13 9 13 2 仙台 B 11 3 15 15 3 東京 C 23 15 17 23 1 大阪 D 12 21 19 21 2 大阪 E 4 8 6 8 2 東京 F 23 13 17 23 1
お礼
ご回答ありがとうございました。 不勉強でMATCH関数、INDEX関数とも知りませんでした。お恥ずかしい。今後もいろいろ使えそうな関数です。ありがとうございました。
- oresama
- ベストアンサー率25% (45/179)
A2に、 =IF(C2=MAX(C2:E2),C1,"")&IF(D2=MAX(C2:E2),D1,"")&IF(E2=MAX(C2:E2),E1,"")・・・・ と入れて、 最終行まで、コピーすれば、 首位が複数でも、全て返すことが可能ですが・・・ あまりにも稚拙ですね・・・;
- O_cyan
- ベストアンサー率59% (745/1260)
単純にA2に =LOOKUP(MAX(C2:E2),C2:E2,$B1:$F1) A3~A500(商品の最終行まで)コピーすれば良いのでは。
お礼
ご回答ありがとうございます。これはまたシンプルかつスマートな回答ですね。 VLOOKUP関数とHLOOKUP関数は理解しているのですが、この単純なLOOKUP関数がよくわかりません。ヘルプを参照してもよくわからず、この結果が得られる仕組みがよくわかりません。もう少し解説していただけるとありがたいのですが。
補足
いったん実行してうまく言ったように思えたのですが、結果をよく検証したら、正しい結果になっていない部分がありました。ヘルプをよく読むと、検索する値は昇順に並んでいないといけないようですね。今回の場合、行毎に昇順に並べておくことはできませんので、LOOKUP関数ではうまくいかないようです。
お礼
素早い回答ありがとうございます。 実際には参照範囲の先頭も絶対参照ではなく相対参照($C$2ではなくC2)ですね。 参照範囲を先頭と最終セルに分けて考え、先頭を相対参照にする点、COUNTA関数を使う点が思いつきませんでした。 No.3でいただいている回答はやはりちょっと煩雑ですね(^^;)