第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 11
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 11
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 11
w1 = DataGridView1(j, bn).Value
DataGridView1(j, bn).Value = DataGridView1(j, i).Value
DataGridView1(j, i).Value = w1
Next
Next
End Sub
End Class
実行例
順位付けに成功しました。
よく考えてみると、合否と順位の列は逆の方がいいですね。
皆さん、逆にしてください。
訂正箇所は皆さん、よく考えてください。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る