表計算の並べ替え機能を使わないで並べ替える

段取りよく考えれば、なんでもできる

表計算ソフトの並べ替え機能を使わずに、並べ替える力技です。
そういった力技も必要なんです。

EW-SYS.INFO

並べ替え機能を使えば良いのですが

 表を、ある値の大きい順または小さい順で並べ替える機能は、表計算ソフトならば標準機能で実装されています。
 本来なら、その機能を使えば良いのですが、ある事情で、データを入力した表を残したうえで、並び変えた表が必要となることがあるかもしれません。

番号氏名点数
1日本次郎78
2日本太郎76
3日本花子82
順位氏名点数
1日本花子82
2日本次郎78
3日本太郎76

順位を求める関数

 まず、必要になるのは、並べ替える対象となる値の順位を求めるRANK関数です。

RANK(順位を求めたい値順位を求めたい値を含む範囲順序の求め方

 順位を求める関数の引数には、どの数値群(範囲)の中で、その値の順位を、大きい順または小さい順で順位を求めたいかということを指定します。

ABCD
1番号氏名点数順位
21日本次郎78=RANK(C2,C2:C4,FALSE)
32日本太郎76=RANK(C3,C2:C4,FALSE)
43日本花子82=RANK(C4,C2:C4,FALSE)

 D列のセルに順位を求めるRANK関数を入れます。
 この時、順位を求めたい値を含む範囲が同じということに注目してください。ここをセル座標の相対指定から絶対指定にすると、効率が良くなります。
 ※第三引数のFALSEは省略可能ですが、小さい順(昇順)で求める場合はTRUEとします。

ABCD
1番号氏名点数順位
21日本次郎782
32日本太郎763
43日本花子821

 順位が求められれば、あとは順位で並び替えるだけです。

持ってくる関数

 ある値を検索して必要な値を持ってきてくれるVLOOKUP関数を利用します。

VLOOKUP(検索する値検索する値が左端にある持ってきたい値の範囲持ってきたい値の列番目持ってくる方法

 ただ、この関数は検索値の右側に持ってきたい値がないと値を持ってこれません。
 なので、関数を使う前に、表にひと手間を加えます。

ABCDEFG
1番号氏名点数順位番号氏名点数
21日本次郎782=A2=B2=C2
32日本太郎763=A3=B3=C3
43日本花子821=A4=B4=C4

 単純に、検索したい順位の右側に、持ってきたい値群を持ってきます。

ABCDEFG
1番号氏名点数順位番号氏名点数
21日本次郎7821日本次郎78
32日本太郎7632日本太郎76
43日本花子8213日本花子82

 検索値となる順位の右側に、持ってきたい値の氏名や点数などの値がきました。これでVLOOKUP関数を素直に使う環境が整いました。

HIJ
1順位番号氏名
21=VLOOKUP(H2,D2:G4,2,FALSE)=VLOOKUP(H2,D2:G4,3,FALSE)
32=VLOOKUP(H3,D2:G4,2,FALSE)=VLOOKUP(H2,D2:G4,3,FALSE)
43=VLOOKUP(H4,D2:G4,2,FALSE)=VLOOKUP(H2,D2:G4,3,FALSE)

 H列に並び変えたい順で順位を入力します。これを検索値にしてVLOOKUP関数を組み立てます。
 この時、検索値がH列に固定され、検索する範囲がすべて同じであることに注目してください。ここをセル座標の相対指定から絶対指定にすると、効率が良くなります。
 ※ページの都合上、点数の列を省略しています。

結果

 とりあえず2種類の関数を利用することで、並べ替え機能を使わなくても、点数の順位で並び変わる表がつくれました。

HIJK
1順位番号氏名点数
213日本花子82
321日本次郎78
432日本太郎76

 今回のサンプルとして、MicrosoftExcel©でつくったBookをダウンロードできるようにしておきます。

問題点

 並べ替え機能を使わずに並び変わった表がつくれるか?という基本的な部分を記事にしましたので、このままでは実用的ではありません。実用的にするためには以下の問題点を解決しましょう。

同点が居た場合はこのままではダメ!

 点数が同じ場合、RANK関数は同順をつけます。そのためには重複しない順位を求めなくてはなりません。
 また、同点の場合、どちらが上位になるのか明確なルールを設けなければなりません。

 ヒント:COUNTIF関数の利用

点数が入力されていない時にエラー表示が美しくない。

 点数が入力されていないと、RANK関数がエラーを返します。
 このエラー表示が出ないようにしたほうが良いでしょう。

 ヒント:IF関数またはIFERROR関数の利用

 よき表計算ライフを!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください