第4講 2次元ループに挑戦しよう。
第3話 第2話解答解説
@ 表のすべてのセルの合計を出すプログラムを考えましょう。
@ 解答
実行プログラム
Private Sub CommandButton1_Click()
Dim wa As Integer, i As Integer, j As Integer
wa = 0
For i = 1 To 3
For j = 5 To 8
wa = wa + Cells(j, i)
Next
Next
Cells(10, 1) = "表のすべてのセルの合計="
Cells(10, 4) = wa
End Sub
wa = 0でwaの初期値を0としています。
(ただし、この1行は省略可です。
変数についてなにも書いてない場合は、
Visual Basic方で初期値は0と判断するからです。)
For i = 1 To 3
For j = 5 To 8
wa = wa + Cells(j, i)
Next
Next
では、(j、i)は次のように動きます。
(5,1)→(6,1)→(7,1)→(8,1)→(5,2)→(6,2)→(7,2)→(8,2)→(5,3)→(6,3)→(7,3)→(8,3)
表は次のようになっていますから
2 | 3 | 4 | |
5 | 17 | 66 | 88 |
6 | 63 | 30 | 45 |
7 | 65 | 8 | 47 |
8 | 48 | 95 | 78 |
(234は何列目かを表し、5678は何行目かを示す。)
wa = wa + Cells(j, i)の動きは、
17←0+17
80←17+63
145←80+65
193←145+48
259←193+66
289←259+30
297←289+8
392←297+95
480←392+88
525←480+45
572←525+47
650←572+78
となり、17+63+65+48+66+30+8+95+88+45+47+78の計算ができるわけです。
何度も書いてきましたが、
=は←と捉えると理解しやすいですよ。
wa = wa + Cells(j, i)は本来は
wa ← wa + Cells(j, i)です。