• ベストアンサー

エクセルにてデータを大きい順に並べ替えることを自動でやりたい

sheet1をデータ入力用のシートとし、以下のデータが入っています。   A  B  C  D 1 あ 5 2 い 4 3 は 8 4  sheet2は上記のBのデータを大きい順に並べ替えた出力用のシートとし、 以下のように出力されます。   A  B  C  D 1 は 8 2 あ 5 3 い 4 4  sheet1のデータが更新されて大きさの順番が変わると、 sheet2の並び順が自動で変わるように出来るのでしょうか? マクロを使わずに数式でやりたいと思っています。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

既出回答に似た考えのやり方があるが 「エクセル 関数 並べ替え」(または前の2つとソート)でWEB照会して見ると http://pc.nikkeibp.co.jp/article/NPC/20060213/229138/ などがある。 解説が実例入りで詳しいので紹介しておく。 ーー この方法は (1)作業列を使う。 (2)同じ値があると困る。 などの問題点はあるが。 ーーー (2)の点は、同じ値にも次の番号を振るやり方を見つければよい。 例データ A列   B列 値 順位 8 1 4 4 2 6 5 2 4 5 5 3 1 7 B列B2の式は =RANK(A2,$A$2:$A$10)+COUNTIF($A$1:A2,A2)-1 式を縦方向に複写する。 結果上記。 ーー 並べ替えは例えばF2に =INDEX($A$2:$A$10,MATCH(ROW()-1,$B$2:$B$10,0),1) と入れて下方向に式を複写。 結果 8 5 5 4 4 2 1 一種の自称 imogasi方式です。imogasi方式の関連はGoogke照会のこと。(銃器では#N/Aの問題、上記例では1列だが複数列のデータを並べ替える場合などの問題が残っているが、長くなるので略。そちらに書いてあるので略)

VitaminBB
質問者

お礼

回答ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 Sheet2!A1 =INDEX(Sheet1!$A$1:$B$3,MOD(INDEX(LARGE(Sheet1!$B$1:$B$3+ROW($A$1:$A$3)/100,ROW($A$1:$A$3)),ROW(A1)),1)*100,1) Sheet2!B1 =INDEX(Sheet1!$A$1:$B$3,MOD(INDEX(LARGE(Sheet1!$B$1:$B$3+ROW($A$1:$A$3)/100,ROW($A$1:$A$3)),ROW(B1)),1)*100,2) ・重複した場合は、行番号が少ないほうが下になります。 ・エラー処理していませんから、オートフィル・コピーして、範囲外になると、#REF! のエラー値を返します。 ・*100は、100個までのデータ数です。それを越える場合は、増やさなくてはいけません。 ・ROW($A$1:$A$3)は、インクリメントといって、あくまでも、ダミーですから、最初は、必ずA1になります。データ数にあわせないと、エラーが出ます。 ・Excelのバージョンによって制限があります。Excel 2002以上は、論理的限界はないのですが、一般的にデータ数は、5,500個程度までです。 ・なお、この数式は、ネットでは、「重み付け」という名前で知られている方法のひとつです。

VitaminBB
質問者

お礼

回答ありがとうございました。

  • suekun
  • ベストアンサー率25% (369/1454)
回答No.3

同じ大きさの数字が重複してない事が条件です。 sheet2のB1セルに =LARGE(Sheet1!B:B,ROW(A1)) sheet2のA1セルに =INDEX(Sheet1!A:A,MATCH(B1,Sheet1!B:B,0)) これをそれぞれ下方向にフィルコピーです。

VitaminBB
質問者

お礼

回答ありがとうございました。

  • dghjty145
  • ベストアンサー率46% (42/90)
回答No.2

作業用の別シートをつくります。 B1に”あ”、C1に”5”があるとします。すなわち、B列にsheet1のA列、C列にsheet1のB列がくるようにして、A1に以下の計算式を入力して、下にコピーします。 =RANK(C1,$C$1:$C$2000,0) 第2引数のCの範囲は、Cのデータ範囲を指定します。これでCの値が大きい順に番号が振られます。 shett2のA列に昇順に1、2、3とデータの個数分、昇順に番号をふります。B列、C列ににVLOKKUP関数を入力し、作業用シートからshett2のA列の数字をキーにしてデータを拾ってゆきます。

VitaminBB
質問者

お礼

回答ありがとうございました。

回答No.1

数式(関数)は値を返すだけですので、できません。マクロを使えばできます。

VitaminBB
質問者

お礼

回答ありがとうございました。

関連するQ&A

専門家に質問してみよう