このページでは、数値からその順位を取得する Rank 関数と、順位から数値を取得する Large、Small 関数について説明します。
Rank関数
Rank 関数は、指定された数値がある数値の中で何番目かという順位を返します。第3引数を省略するかゼロを指定すると数値の高い順、ゼロ以外の数値を指定すると数値の低い順に並べたときの順位を返します。
Rank 関数は、重複した数値は同じ順位とみなし、その次の順位を空き番としてしまうことに注意してください。
引数名 | 省略 | 説明 |
---|---|---|
数値 | × | 順位を調べる数値を指定します。 |
範囲 | × | 数値を含むセル範囲(レンジオブジェクト)または配列を指定します。 |
順序 | ○ | 数値の順位を決めるため、範囲内の数値を並べ替える方法を指定します。 0 : 数値の高い順 0以外 : 数値の低い順 |
Rank関数の使用例
以下のマクロはワークシート上の成績表において、国語点数の順位を点数の高い順と低い順それぞれ表示する例です。同じ点数の場合は同じ順位となり、その次の順位が空き番となっていることがわかると思います。
Sub sample_wf017_01()
Dim rng As Range
Dim rng_jp As Range
Dim rk As Integer
'国語成績の範囲設定
Set rng_jp = Range("B4:B13")
'点数の順位(点数の高い順)を表示
Debug.Print "=== 点数の高い順の順位 ==="
For Each rng In rng_jp
rk = WorksheetFunction.Rank(rng.Value, rng_jp)
Debug.Print "点数:" & rng.Value, "順位:" & rk
Next
'点数の順位(点数の低い順)を表示
Debug.Print "=== 点数の低い順の順位 ==="
For Each rng In rng_jp
rk = WorksheetFunction.Rank(rng.Value, rng_jp, 1)
Debug.Print "点数:" & rng.Value, "順位:" & rk
Next
End Sub
下図はテスト用データになります。ワークシートに生徒番号とそれに対応する3科目の点数が入力されています。
Large、Small関数
Large 関数はある数値の中で、n番目に大きな数値を返します。
Small 関数はある数値の中で、n番目に小さな数値を返します。
引数名 | 省略 | 説明 |
---|---|---|
範囲 | × | 数値を含むセル範囲(レンジオブジェクト)または配列を指定します。 |
順位 | × | 抽出したい数値の順位を指定します。 Large関数の場合は数値を大きい順に並べたときの順位を、 Small関数の場合は数値を小さい順に並べたときの順位を指定します。 |
Large、Small関数の使用例
以下のマクロはワークシート上の成績表において、国語点数を点数の高い順と低い順でそれぞれ表示する例です。
Sub sample_wf017_02()
Dim rng_jp As Range
Dim rk As Integer
Dim pt As Integer
'国語成績の範囲設定
Set rng_jp = Range("B4:B13")
'点数の高い順に表示
Debug.Print "=== 点数の高い順 ==="
For rk = 1 To rng_jp.Rows.count
pt = WorksheetFunction.Large(rng_jp, rk)
Debug.Print "順位:" & rk, "点数:" & pt
Next
'点数の低い順に表示
Debug.Print "=== 点数の低い順 ==="
For rk = 1 To rng_jp.Rows.count
pt = WorksheetFunction.Small(rng_jp, rk)
Debug.Print "順位:" & rk, "点数:" & pt
Next
End Sub
前の sample_wf017_01 で使用した成績表と同じものを使用します。