- ベストアンサー
エクセルの計算式
今、エクセルで表を作成しています。 名前 数量 順位 A 10 5 B 50 2 C 90 1 D 30 4 E 50 2 名前と数値を打ち込み、「RANK」で順位を付けています。これを別なシートへ、1位から順に並ばせるにはどうしたらよいでしょうか?今、「match」を使って作っているのですが、同一順位の部分がエラーとなってしまします。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 「作業列」を作ると簡単な数式で(配列数式を使わないで)出来ると思います。 例示の表のシート名がSheet1 一行目が項目で二行目からデータがあると仮定して 名前:A列 数量:B列 順位:C列 作業列を作ります。(仮にD列で作ってみました) D2に =C2+ROW()/100 必要なだけ下にコピー 別シートの表構成も例示の表と同じとして やはり、仮にD列に作業列を作って 別シートのD2に =SMALL(Sheet1!$D$2:$D$6,ROW(A1)) A2に =INDEX(Sheet1!A$2:A$6,MATCH($D2,Sheet1!$D$2:$D$6,0)) B2に =INDEX(Sheet1!B$2:B$6,MATCH($D2,Sheet1!$D$2:$D$6,0)) C2に =TRUNC(D2) A1:D1を選択して、必要なだけ下にフィルコピー 補足:データの数量が100件を超えるようなら Sheet1の D2の式を =C2+ROW()/1000 としてください。 ROW関数を使っているのは、 「重み付け」といって順位の重複があっても 違うデータとして扱えるようにするためです。 今回は順位に重み付けをした例でやってみましたが、 点数に重み付けをしてみてもいいでしょう。 もちろん実際には、上記の式を参考にしながら セル参照先を変えてゆくと思いますが 別シートD2の =SMALL(Sheet1!$D$2:$D$6,ROW(A1)) のROW(A1) は変えないで下さい。(SMALL関数の引数で 1 という値が 欲しいので、ROW(A1)にしているだけでA1セルの内容を参照している訳ではありませんので。
その他の回答 (3)
- tak2003
- ベストアンサー率32% (174/540)
全部入力した後に順位を昇順で並び替えるのは駄目ですか?
- mshr1962
- ベストアンサー率39% (7417/18945)
順位の所で一工夫 =RANK(値,数量の範囲,0)+ROW()/100 表示形式は0にして、小数点以下は表示しないようにしてください。 順位2=SMALL(順位の範囲,ROW(A1)) 名前2=INDEX(名前の範囲,MATCT(順位2,順位2の範囲,0)-1,0) 同順位の場合は上の行から順番に表示されます。 名前 数量 順位 順位 名前 A 10 5.02 1.04 C B 50 2.03 2.03 B C 90 1.04 2.06 E D 30 4.05 4.05 D E 50 2.06 5.02 A
- miyarita
- ベストアンサー率0% (0/1)
こんにちは 私は難しい関数はわかりませんので、初歩的な関数で お答えします。 1 作業セルを、例えばD行に作成します。 数量b2:b6とすると =b2+row()/100の関数で b列の数量に、行番号/100を加えた値を入れます。 この/100は、100行目で1となって、実際の数量が 変わってしまいますので、データ数によって変えてください。 2 c行の順は =rank(d2,d$2:d$6,0)と 作業セルの値でランク付けすれば、同じランクは なくなります。
お礼
すみません御礼が遅くなり、申し訳ありません。実は私もその方法を使っていましたが、もっともっと簡単にできないかと注文され、上記の質問をしました。御回答ありがとうございました。