- 締切済み
並べ替えした順位の(元セル番号)を知りたい
お世話になります。 はじめて質問します、よろしくお願い致します。 1行に1回目・2回目・~5回目と回数が並び、 2行に11・12・18・11・15と点数が並んで います。1行の5回目の後に、1位・2位・~5位と順位をつけて2行に関数SMALLを使って!並べ替えしました、これで小さいスコアーから順位は出たことになりますが、ご質問はここからです。 見てみると「11」が重複しています、見て2位の11は「1回目の11点(A2)」だ!3位の11は「4回目の11点(D2)」だと、わかるようにMATCHを使ってセルの位置を現そうとしたのですが!・・・重複している為出せません、アドバイスお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 No.2の回答を作業行なしでやる方法です。 A~E列が元データ、F2~J2に小さい順の点数、K2~O2に小さい順の回数とします。 K2に、 =INDEX($A$1:$E$1,MOD(SMALL(INDEX($A$2:$E$2+COLUMN($A$2:$E$2)/100,),COLUMN(A2)),1)*100) と入力して、O2までコピーします。 これで、点数が同じ場合は左から順に表示します。
>> 点数が重複している為、うまくいきません。 >> おねがい致します。 現象はわかっているのです。 あと,データの形もわかりました。 元々,11などを引っ張って来た参照元などなくて, SMALL関数では羅列された 11 11 12 15 18 という数を小さい順に並べる計算をしているわけですから, 元々11のあった上の行の値とは縁が切れてしまいます。 だから縁を切らないようにするには, 関数でなく,実際のソート作業をしないとならないと考えたのです。 でも,関数でなんとかなりました! 上の行と縁を切らなければ良いのですから,合体させれば良いのです。 A1=1 B1=2 C1=3 D1=4 E1=5 A2=11 B2=12 C2=18 D2=11 E2=15 とあったとすると,3行目には2行目+1行目を小数にした数値を書けば重複しません。 関数で(数式で)言うと以下のような感じです。 A3=A2+A1/100 B3=B2+B1/100 C3=C2+C1/100 …… 値で言うと, A3=11.01 B3=12.02 C3=18.03 D3=11.04 E=15.05 となります。この行は見かけ上,不要だと思うので後から,フォントの色を白にするとか, 行の幅を0にするとかして見えないようにしてください。 例えばG2~K2にSMALL関数でそれらを並べ替えます。 関数で言うと G2=SMALL(A3:E3,1) H2=SMALL(A3:E3,2) I2=SMALL(A3:E3,3) …… 値で言うと G2=11.01 H2=11.04 I2=12.02 …… この行の小数部分は不要ですから, セルの書式設定より,表示形式を数値,小数点以下の桁数を0にしてください。 これをMATCH関数で現すと,ちゃんと, 1 4 2 5 3 になります。 MATCH関数ではなくて,例えばG2セルの11.01から整数部分11を引いて,残った小数部分0.01に100を掛けても1は出てきます。 回数が1 2 3 4 など抜けが無い場合はMATCH関数でも良いと思いますが 回数が1 2 4 5 など途中飛んでいたりする場合は,整数部分を引いて小数部分に100を掛けるほうが良いと思います。 長くなってしまいましたが,おわかりになりましたでしょうか。 実際のサンプルデータを提示できれば,わかりやすいと思うのですが,そうも行かないので難しいですね。
エクセルのことですよね。 違っていたらすみません。 >>1行に1回目・2回目・~5回目と回数が並び、 >>2行に11・12・18・11・15と点数が並んで 1 2 3 4 5 11 12 18 11 15 と,こんな感じになりますよね。 それで,??どうしたいのでしょう?? 4行にSMALL関数で2行目を小さな順に並べ, 3行にその回数を並べたいのでしょうか? 1 2 3 4 5 11 12 18 11 15 1 4 2 5 3 11 11 12 15 18 こんな感じに。 これは関数では無理でしょう (と思います…)。 「データ」→「並べ替え」で操作するか,マクロが早いです。 マクロだと, Sub 四行目をソート() Rows("1:2").Copy Rows("3:3").Select ActiveSheet.Paste Selection.Sort Key1:=Range("A4"), _ Order1:=xlAscending, _ Header:=xlGuess, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlLeftToRight, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal End Sub こんな感じでしょうか? 全然,頭使ってません。マクロの自動記録で作ったマクロです。 だから無駄な行も入っていると思います。 1・2行を全て選択,右クリック→コピー 3行を全て選択,右クリック→貼り付け 3・4行を全て選択,「データ」→「並べ替え」→「オプション」 「並べ替えオプション」のダイアログより,方向を「列単位」にして「OK」 「並べ替えダイアログ」で優先されるキーを「行4」にし「昇順」にチェック→「OK」 という作業を記録しただけです。 この場合は,関数で考えこむより,手作業か,マクロが早いと思います。 と,勝手に答えていますが,エクセルの質問と考えて良かったのでしょうか? (参考URLはマクロの自動記録です。不要かもしれませんが…。)
お礼
sassakun様、出来ました^o^/本当、ありがとうございます 思う通りに行きました、1週間も悩んでいたんです。 感謝感激です。
補足
sassakun様、早速のご回答ありがとう御座います。 そうですエクセルのことです、文章が下手ですみません。 実はこの表、訳あって横にすごく長い表なんです。 例を5位までにしました。 スコアー→ 順位→ → 1 2 3 4 5 1位2位3位4位5位 MATCHで現すと 11 12 18 11 15 11 11 12 15 18 1 1 2 5 3 と、なってしまいます。こうではなくて! スコアー→ 順位→ → 1 2 3 4 5 1位2位3位4位5位 ※ここです 11 12 18 11 15 11 11 12 15 18 1 4 2 5 3 わかって頂けるでしょうか! 点数が重複している為、うまくいきません。 おねがい致します。