第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次元配列に変更してみましょう。