エクセル練習問題:順位の計算(VBA)


スポンサードリンク

問題     topへ

解答例    topへ

問題1の解答例    topへ


B C D E
2 名前 性別 得点 順位
3 相沢一郎 52 7
4 井上浩二 74 5
5 上野有紀 84 1
6 内野武 77 2
7 上田祥子 68 6
8 江田早苗 77 2
9 榎本高貴 77 2
10 小田和樹 47 8
  1. ワークシート関数を使って計算した例です。
    • ワークシート関数RANKをVBAで使う時はApplication.WorksheetFunction.Rank とします。
    Sub test10()
      Dim c As Range
        For Each c In Range("D3:D10")
          c.Offset(0, 1).Value = Application.WorksheetFunction.Rank(c.Value, Range("D3:D10"))
        Next c
    End Sub
  2. For〜Nextで値を比較して順位を求めることも可能です。
    ただし、データ数が多いと繰り返し回数が多くなり、時間がかかってしまいますので実用的ではありません。
    Sub test12()
      Dim i As Long, j As Long
      Dim myRank As Long
        For i = 3 To 10
          myRank = 1
          For j = 3 To 10
            If Cells(i, 4).Value < Cells(j, 4).Value Then
              myRank = myRank + 1
            End If
          Next j
          Cells(i, 5).Value = myRank
        Next i
    End Sub

問題2の解答例    topへ


B C D E
2 名前 性別 得点 順位
3 相沢一郎 52 7
4 井上浩二 74 5
5 上野有紀 84 1
6 内野武 77 2
7 上田祥子 68 6
8 江田早苗 77 3
9 榎本高貴 77 4
10 小田和樹 47 8
  1. ワークシート関数を使ったコードの例です。
    • 数式の例:同点が上のデータにあるか否かをCOUNTIF関数で調べます。
      同点が2個あれば、2つ目の同点者はRANK関数で求めた順位+1 となりますので、+COUNTIF($D$3:D3,D3)-1 と補正します。
      E3セルは =RANK(D3,$D$3:$D$10)+COUNTIF($D$3:D3,D3)-1 となります。
    Sub test20()
      Dim i As Long
        For i = 3 To 10
          Cells(i, 6).Value = Application.WorksheetFunction.Rank(Cells(i, 4).Value, Range("D3:D10")) _
                  + Application.WorksheetFunction.CountIf(Range("D3:D" & i), Cells(i, 4).Value) - 1
        Next i
    End Sub

問題3の解答例    topへ


スポンサードリンク



よねさんのExcelとWordの使い方エクセル練習問題:目次|順位の計算(VBA)