第3講 繰り返し処理をさせよう(For文を理解しよう)。

第2話 For文で表の縦・横の合計を出してみよう。

For文を学んだのでサンプル4サンプル5の改良に取り組みましょう。

サンプル5のFor文は、

Private Sub CommandButton1_Click()

    Dim wa As Integer

    wa = 0
    wa = wa + Cells(5, 1)
    wa = wa + Cells(6, 1)
    wa = wa + Cells(7, 1)
    wa = wa + Cells(8, 1)
    Cells(9, 1) = wa

End Sub

でした。wa = wa + Cells(5, 1)以降は同じ事の繰り返しです。

赤い数字が5から8まで変わりながら同じ事が繰り返されています。
だから、この部分をFor文に変えればよいのです。
では、解答を見る前に自分でサンプル5の改良に取り組んでください。

改良例


解答例は、A列だけの合計を求めるプログラムです。
プログラムをさらに改良してすべての列とすべての行を計算させるマクロに変更しましょう。

解答例

解答例の消去のプログラムについて解説しておきましょう。

Private Sub CommandButton2_Click()

    Range("a9:c9").Select
    Selection.ClearContents
    Range("d5:d8").Select
    Selection.ClearContents
    Range("a1").Select

End Sub

Range("a9:c9").Selectは、セルA9からC9まで選択せよという命令です。
1個1個選ぶときは「,」で繋ぎ、間をまとめて指定するときは「:」を使うわけです。
Selection.ClearContentsについてはすでに解説してあります。
Selectionが選択したもの、ClearContentsが消去の意味ですから、
選択したものを消去しなさいという命令になります。

さて、解答例のプログラムをよく見てみるとまだまだ改良の余地があることがわかります。
同じような記述が何回も繰り返されているからです。
繰り返しがコンピュータの得意技の1つなのですから、
人が繰り返し同じ作業をするのではなく、
コンピュータにやらせるべきです。
ただし、これを改良していくためには2次元ループの考え方を理解しなければなりません。
For i = 5 To 8
    wa = wa + Cells(i, 1)
Next
のように文字(この場合i)1つが変わりながら同じ事を繰り返すことを1次元ループといいます。
文字が2つ動いていく場合が、2次元ループです。
1次元ループの動きが完全に頭に入っていないと、
2次元ループを理解することはできません。
2次元ループを理解するための難度は、
1次元ループを遙かに上回ります。
1つ1つ(1行1行)の動きを追うことをトレースといいますが、
トレースがしっかりできないと理解できません。
後でトレースがイメージできるように
Flashでアニメーションを追加する予定ですが、
このアニメーションの動きが頭の中でイメージできるようにしたいものです。
第4講では2次元ループに挑戦します。


第1話へ 第3話へ

講義トップへ

数学研究室に戻る