第3講 For文(繰り返し処理)
第8話 2次元For文による行列の表示
019
を実現するプログラム例
Private Sub CommandButton1_Click()
  Dim i As Integer, j As Integer
  For i = 0 To 4
    For j = 0 To 3
      Cells(4 + i, 2 + j) = 5 * i + j + 1
    Next
  Next
End Sub
Private Sub CommandButton2_Click()
  Rows("4:2000").Select '4行目から2000行までの選択
  Selection.ClearContents '選択したセルの消去
  Range("A1").Select
End Sub
参考ダウンロード添付ファイル

コードを見てすぐに理解できる方はかなり聡明な方です。
ですから、わからなくても決して悲観することはありません。
以下詳しく解説します。
2次元For文になっている理由は、
縦方向と横方向の2方向の動きがあるからです。
iとjの動きを把握しないと理解は困難になります。
iとjの動きをトレース(コンピュータが実際にやっている手順を追うこと)します。
少し長くなりますが、辛抱強く読んでください。
i = 0 の場合
  
j = 0 のとき
      Cells(4 +
i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 0, 2 + 0) = 5 * 0 + 0 + 1
      から
      Cells(4, 2) = 1
      となります。
  j = 1 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 0, 2 + 1) = 5 * 0 + 1 + 1
      から
      Cells(4, 3) = 2
      となります。
  j = 2 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 0, 2 + 2) = 5 * 0 + 2 + 1
      から
      Cells(4, 4) = 3
      となります。
  j = 3 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 0, 2 + 3) = 5 * 0 + 3 + 1
      から
      Cells(4, 5) = 4
      となります。
i = 1 の場合
  j = 0 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 1, 2 + 0) = 5 * 1 + 0 + 1
      から
      Cells(5, 2) = 6
      となります。
  j = 1 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 1, 2 + 1) = 5 * 1 + 1 + 1
      から
      Cells(5, 3) = 7
      となります。
  j = 2 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 1, 2 + 2) = 5 * 1 + 2 + 1
      から
      Cells(5, 4) = 8
      となります。
  j = 3 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 1, 2 + 3) = 5 * 1 + 3 + 1
      から
      Cells(5, 5) = 9
      となります。
    ・
    ・
    ・
i = 4 の場合
  j = 0 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 4, 2 + 0) = 5 * 4 + 0 + 1
      から
      Cells(8, 2) = 21
      となります。
  j = 1 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 4, 2 + 1) = 5 * 4 + 1 + 1
      から
      Cells(8, 3) = 22
      となります。
  j = 2 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 4, 2 + 2) = 5 * 4 + 2 + 1
      から
      Cells(8, 4) = 23
      となります。
  j = 3 のとき
      Cells(4 + i, 2 + j) = 5 * i + j + 1
      は
      Cells(4 + 4, 2 + 3) = 5 * 4 + 3 + 1
      から
      Cells(8, 5) = 24
      となります。
以上がトレースです。
省略した部分は自分で補ってください。
iとjの動きを(i, j)で表すと、
(0, 0),(0, 1),(0, 2),(0, 3),
(1, 0),(1, 1),(1, 2),(1, 3),
(2, 0),(2, 1),(2, 2),(2, 3),
(3, 0),(3, 1),(3, 2),(3, 3),
(4, 0),(4, 1),(4, 2),(4, 3)
です。
座標の動きは横に
つ動いてから縦に1つ動くを
回繰り返します。
For文に色をつけて対応させると
  For i = 0 To
4
    For j = 0 To
3
      Cells(4 + i, 2 + j) = 5 * i + j + 1
    Next
  Next
ということになります。
iが縦方向をコントロール(制御)して、
jが横方向をコントロール(制御)しています。

(0, 0)を始点として何個動いたかと考えていますので、横方向に3つ動くとなるのです。
縦方向も(0, 0)を始点として何個動いたかと考えていますので4つ動くとなります。
ただ、行数をカウントするときに、
  For i = 0 To 4
4から4行であると考えたら間違いになります。
0,1,2,3,4
ですから正しくは5行です。
行数をカウントするときに0をカウントすることを忘れないでください。
列数も同じで
    For j = 0 To 3
3から3列ではなく4列です。
こちらも
0,1,2,3
で0もカウントして4列というわけです。

では、今回の課題を参考にして、
097
を2次元For文で実現しましょう。

第7話へ 第9話へ


トップへ