| 
    
     |  | ▼たすけてください さん: 皆さん、こんばんは。
 解決したと思っていたんですが・・・。
 
 
 >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行目に書いていってみて下さい。
 
 |  |