第4講 If文の学習
第13話 順位(ランク)付けと出席番号順並び替え
ソース例
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                 ・
                 ・
                 ・
      '並び替え
     Dim w1 As String, bn As Integer
     For i = 40 To 2 Step -1
       min = 500
       For j = 1 To i
         If DataGridView1(6, j).Value <= min Then
           min = DataGridView1(6, j).Value
           bn = j
         End If
       Next
       For j = 0 To 12
         w1 = DataGridView1(j, bn).Value
         DataGridView1(j, bn).Value = DataGridView1(j, i).Value
         DataGridView1(j, i).Value = w1
       Next
     Next

     
'順位付け
     For i = 1 To 40
       DataGridView1(11, i).Value = i
     Next
     For i = 2 To 40
       If DataGridView1(6, i - 1).Value = DataGridView1(6, i).Value Then DataGridView1(11, i).Value = DataGridView1(11, i - 1).Value
     Next


   End Sub

End Class
実行例
入門
初心者基礎
(合計と順位だけを抜き出した。)

解説
     For i = 1 To 40
       DataGridView1(11, i).Value = i
     Next

は仮の順位付けです。
上から順番に1位から40位まで順位がつきます。
これだと同じ点なのに別順位がしまうという問題を残します。
その問題を解消するのが次のFor文です。
     For i = 2 To 40
       If DataGridView1(6, i - 1).Value = DataGridView1(6, i).Value Then DataGridView1(11, i).Value = DataGridView1(11, i - 1).Value
     Next

同点なら
初歩
はじめての
前の人の順位をその人の順位にしています。
訂正前は、出席番号25番の人は22位となっていたわけですが、21位と訂正されています。

さて、いよいよ出席番号順に並び替えてこの講の課題は遂行されたことになります。
ソース例は、30行下。




























Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                 ・
                 ・
                 ・
      '並び替え
     Dim w1 As String, bn As Integer
     For i = 40 To 2 Step -1
       min = 500
       For j = 1 To i
         If DataGridView1(6, j).Value <= min Then
           min = DataGridView1(6, j).Value
           bn = j
         End If
       Next
       For j = 0 To 12
         w1 = DataGridView1(j, bn).Value
         DataGridView1(j, bn).Value = DataGridView1(j, i).Value
         DataGridView1(j, i).Value = w1
       Next
     Next

     '順位付け
     For i = 1 To 40
       DataGridView1(11, i).Value = i
     Next
     For i = 2 To 40
       If DataGridView1(6, i - 1).Value = DataGridView1(6, i).Value Then DataGridView1(11, i).Value = DataGridView1(11, i - 1).Value
     Next


    
 '出席番号順並び替え
     For i = 40 To 2 Step -1
       max = 0
       For j = 1 To i
         If DataGridView1(0, j).Value > max Then
           max = DataGridView1(0, j).Value
           bn = j
         End If
       Next
       For j = 0 To 12
         w1 = DataGridView1(j, bn).Value
         DataGridView1(j, bn).Value = DataGridView1(j, i).Value
         DataGridView1(j, i).Value = w1
       Next
     Next


   End Sub

End Class
実行例
入門
vb
順位付けに成功しました。
よく考えてみると、合否と順位の列は逆の方がいいですね。
皆さん、逆にしてください。
vb入門
訂正箇所は皆さん、よく考えてください。


第12話へ 第14話へ

006

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座

数学研究室に戻る