|
▼たすけてください さん:
皆さん、こんばんは。
解決したと思っていたんですが・・・。
>Sub 練習3()
>For i = 3 To 1 Step -1
> For j = 1 To i
> If Cells(1, j).Value > Cells(1, (j + 1)).Value Then
> x = Cells(1, j).Value
> Cells(1, j).Value = Cells(1, (j + 1)).Value
> Cells(1, (j + 1)).Value = x
> End If
> Next j
> Next i
>End Sub
>の説明をしなければならないのですが意味がチンプンカンプンです。
>ほんとうにピンチです。おしえてください。御願いします。
このソートは(上記のコードを例に取ると)、
小さい数〜大きい数の順で並べるロジックなんですが、
> For i = 3 To 1 Step -1
のiの値が3のときのつまり最初の繰り返し処理を考えましょう。
> For j = 1 To i
> If Cells(1, j).Value > Cells(1, (j + 1)).Value Then
> x = Cells(1, j).Value
> Cells(1, j).Value = Cells(1, (j + 1)).Value
> Cells(1, (j + 1)).Value = x
> End If
> Next j
この内側のFor〜Next文を考えましょう。
i=3
ですから、
For j = 1 To 3
If Cells(1, j).Value > Cells(1, (j + 1)).Value Then
x = Cells(1, j).Value
Cells(1, j).Value = Cells(1, (j + 1)).Value
Cells(1, (j + 1)).Value = x
End If
Next j
ということになりますね?
ループは、3回繰り返しますが、
その間に
A1とB1を比較 1回目
B1とC1を比較 2回目
C1とD1を比較 3回目
という処理をしている事を理解して下さい。
そして、この処理により、セルA1〜D1の中で一番大きい値が
D1にセットされます。
これがi=3 の時に行う処理なんです。つまり、
・4つの値の中で一番大きい値を最後の入れ物に入れる
では、
> For i = 3 To 1 Step -1
のiの値が2のときのは?
内側のFor文を書き換えると
For j = 1 To 2
If Cells(1, j).Value > Cells(1, (j + 1)).Value Then
x = Cells(1, j).Value
Cells(1, j).Value = Cells(1, (j + 1)).Value
Cells(1, (j + 1)).Value = x
End If
Next j
ループは、2回繰り返しますが、
その間に
A1とB1を比較 1回目
B1とC1を比較 2回目
これは、一番大きい値を除いた3つ値から一番大きい値をC1にセットします。
つまり、A1〜D1の中で2番目に大きい値をC1にセットする処理です。
同様に
i=1のときは、
A1〜D1の中で3番目に大きい値をB1にセットする処理です。
当然ですが、B1が決まれば、A1は自ずと決まりますよね?
と言うように
A1〜D1の中で一番大きい値から2番目、3番目と大きい順に値をセットしていく
ロジックなんです。
後は、iの値が3〜1になる間にセルの値の移動を
紙に書くなどして確認してみて下さい。
あっ、Excel使ってるんだから、2行目、3行目に書いていってみて下さい。
|
|