ワークシート関数による順位の取得

このページでは、数値からその順位を取得する Rank 関数と、順位から数値を取得する Large、Small 関数について説明します。

スポンサーリンク

Rank関数

Rank 関数は、指定された数値がある数値の中で何番目かという順位を返します。第3引数を省略するかゼロを指定すると数値の高い順、ゼロ以外の数値を指定すると数値の低い順に並べたときの順位を返します。

Rank 関数は、重複した数値は同じ順位とみなし、その次の順位を空き番としてしまうことに注意してください。

構文
WorksheetFunction.Rank(数値 , 範囲 [, 順序])

【戻り値】 倍精度浮動小数点型 (Double)
引数名 省略 説明
数値 × 順位を調べる数値を指定します。
範囲 × 数値を含むセル範囲(レンジオブジェクト)または配列を指定します。
順序 数値の順位を決めるため、範囲内の数値を並べ替える方法を指定します。 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

  Setステートメント  For Each…Next

下図はテスト用データになります。ワークシートに生徒番号とそれに対応する3科目の点数が入力されています。

テスト成績表
テスト成績表
  • マクロ実行結果(イミディエイトウィンドウ
    === 点数の高い順の順位 ===
    点数:65      順位:4
    点数:25      順位:7
    点数:80      順位:2
    点数:65      順位:4
    点数:10      順位:9
    点数:80      順位:2
    点数:85      順位:1
    点数:10      順位:9
    点数:15      順位:8
    点数:60      順位:6
    === 点数の低い順の順位 ===
    点数:65      順位:6
    点数:25      順位:4
    点数:80      順位:8
    点数:65      順位:6
    点数:10      順位:1
    点数:80      順位:8
    点数:85      順位:10
    点数:10      順位:1
    点数:15      順位:3
    点数:60      順位:5

Large、Small関数

Large 関数はある数値の中で、n番目に大きな数値を返します。
Small 関数はある数値の中で、n番目に小さな数値を返します。

構文
WorksheetFunction.Large(範囲 , 順位)
WorksheetFunction.Small(範囲 , 順位)
【戻り値】 倍精度浮動小数点型 (Double)
引数名 省略 説明
範囲 × 数値を含むセル範囲(レンジオブジェクト)または配列を指定します。
順位 × 抽出したい数値の順位を指定します。 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

  Setステートメント For…Next

前の sample_wf017_01 で使用した成績表と同じものを使用します。

テスト成績表
テスト成績表
  • マクロ実行結果(イミディエイトウィンドウ
    === 点数の高い順 ===
    順位:1       点数:85
    順位:2       点数:80
    順位:3       点数:80
    順位:4       点数:65
    順位:5       点数:65
    順位:6       点数:60
    順位:7       点数:25
    順位:8       点数:15
    順位:9       点数:10
    順位:10      点数:10
    === 点数の低い順 ===
    順位:1       点数:10
    順位:2       点数:10
    順位:3       点数:15
    順位:4       点数:25
    順位:5       点数:60
    順位:6       点数:65
    順位:7       点数:65
    順位:8       点数:80
    順位:9       点数:80
    順位:10      点数:85

 ワークシート関数を使用するメリット

タイトルとURLをコピーしました