• ベストアンサー

エクセルの計算式

今、エクセルで表を作成しています。 名前 数量  順位 A  10  5 B  50  2 C  90  1 D  30  4 E  50  2 名前と数値を打ち込み、「RANK」で順位を付けています。これを別なシートへ、1位から順に並ばせるにはどうしたらよいでしょうか?今、「match」を使って作っているのですが、同一順位の部分がエラーとなってしまします。よろしくお願いします。

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

  • ベストアンサー
  • kaisendon
  • ベストアンサー率44% (114/257)
回答No.3

こんにちは 「作業列」を作ると簡単な数式で(配列数式を使わないで)出来ると思います。 例示の表のシート名が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)
回答No.4

全部入力した後に順位を昇順で並び替えるのは駄目ですか?

kahorinn
質問者

お礼

すみません御礼が遅くなり、申し訳ありません。実は私もその方法を使っていましたが、もっともっと簡単にできないかと注文され、上記の質問をしました。御回答ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

順位の所で一工夫 =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)
回答No.1

こんにちは 私は難しい関数はわかりませんので、初歩的な関数で お答えします。 1 作業セルを、例えばD行に作成します。  数量b2:b6とすると =b2+row()/100の関数で  b列の数量に、行番号/100を加えた値を入れます。  この/100は、100行目で1となって、実際の数量が  変わってしまいますので、データ数によって変えてください。 2 c行の順は =rank(d2,d$2:d$6,0)と  作業セルの値でランク付けすれば、同じランクは  なくなります。  

関連するQ&A