第12講 配列その2
第5話 1次元配列と多次元配列の関係その3

data(1, i, j) = Worksheets("1学期中間").Cells(6 + i, 1 + j)は
次の通りに変更すればよいのです。
data(200 + 5 * i + j) = Worksheets("1学期中間").Cells(6 + i, 1 + j)

200は1×200で5*iは5×iです。
なぜiには5を掛け、1には200を掛けるのでしょうか。
5は教科数です。
jは教科を表し、1から5まで変化します。
1は国語、2は社会などです。
iは生徒の出席番号で、1から40まで変化します。
最初の200を考えに入れなければ、
5 * i + jの値は次のような表のピンクの通りに動いていきます。

j 1 2 3 4 5
i
1 6 7 8 9 10
2 11 12 13 14 15
3 16 17 18 19 20
4 21 22 23 24 25
5 26 27 28 29 30
・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・

5*iとする理由がおわかりでしょうか。
5 * i + jが重複なく連続した番号になっています。
200を考慮に入れると

j 1 2 3 4 5
i
1 206 207 208 209 210
2 211 212 213 214 215
3 216 217 218 219 220
4 221 222 223 224 225
5 226 227 228 229 230
・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・

添え字を1から始めるために始まりが206になってしまうのです。
いかに不合理かわかります。
添え字を0から始めれば

j 0 1 2 3 4
i
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
4 20 21 22 23 24
・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・

となってずっとすっきりします。
繰り返しますが初心者用に基礎編では
わかりやすさを優先して添え字を1から始めています。

200とする理由はもうおわかりでしょうか。
教科数×生徒数=200
なので200飛びにするとデータ番号が重複なく漏れなく連続するからです。

以上のようにして次の解答例ができあがります。
第4話問題解答例

それでは皆さん、2次元配列
Dim syori(40, 5) As Double
も1次元配列に変更してみましょう。


第4話へ



 VB講義トップに戻る

 数学研究室に戻る