第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の値は次のような表のピンクの通りに動いていきます。

10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30

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

206 207 208 209 210
211 212 213 214 215
216 217 218 219 220
221 222 223 224 225
226 227 228 229 230

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

10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

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

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

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

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


第4話へ



 VB講義トップに戻る

 数学研究室に戻る