第10講 添え字付き名前を持った箱(配列)
第2話 添え字付き名前をもった箱の簡単な演習
配列a(9)を用意して、
a(0)からa(9)まで順に1から10まで代入して、
それを表示するプログラム
解答例
Private Sub CommandButton1_Click()
Dim a(9) As Integer, i As Integer
For i = 0 To 9
a(i) = i + 1
Next
For i = 0 To 9
Cells(6, 1 + i) = a(i)
Next
End Sub
Private Sub CommandButton2_Click()
Rows("6:200").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
では、次の演習問題です。
配列a(100)を用意して、
次のように表示させるプログラムを考えてください。
改行は、
繰り返しを数える数(制御変数)iを10で割った商syと
iを10で割ったときの余りamを用意して、
If文によって実行します。
商はi/10だと、
VBAの場合は自動的に少数型に変換されてしまうので、
強制的な型変身(キャスト)が必要です。
iを10で割ったときの余りは、
VBAでは
i mod 10
で計算します。
かなりの難問ですから、ある程度考えてわからなければ、
30行下の解答例を参照してください。
でも、悔しいと思う方はできるまで試行錯誤をして実現してください。
解答例
Private Sub CommandButton1_Click()
Dim a(99) As Integer, i As Integer, am As Integer, sy As Integer
For i = 0 To 99
a(i) = i + 1
Next
For i = 0 To 99
sy = Int(i / 10)
am = i Mod 10
Cells(6 + sy, 1 + am) = a(i)
Next
End Sub
Private Sub CommandButton2_Click()
Rows("6:200").Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
解説
改行難しかったでしょう。
コンピュータの動きを追ってみましょう(トレースです)。
i=0のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(0 / 10) = 0 と am = 0 Mod 10 = 0
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(6 , 1) = a(0)です。
i=1のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(1 / 10) = 0 と am = 1 Mod 10 = 1
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(6 , 2) = a(1)です。
i=2のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(2 / 10) = 0 と am = 2 Mod 10 = 2
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(6 , 3) = a(2)です。
・
・
・
i=9のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(9 / 10) = 0 と am = 9 Mod 10 = 9
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(6 , 10) = a(9)です。
i=10のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(10 / 10) = 1 と am = 10 Mod 10 = 0
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(7 , 1) = a(10)です。
i=11のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(11 / 10) = 1 と am = 11 Mod 10 = 1
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(7 , 2) = a(11)です。
・
・
・
i=19のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(19 / 10) = 1 と am = 19 Mod 10 = 9
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(7 , 10) = a(19)です。
i=20のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(20 / 10) = 2 と am = 20 Mod 10 = 0
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(8 , 1) = a(20)です。
i=21のとき、sy = Int(i / 10)とam = i Mod 10
はsy = Int(21 / 10) = 2 と am = 11 Mod 10 = 1
ですから、Cells(6 + sy, 1 + am) = a(i)はCells(8 , 2) = a(21)です。
・
・
・
以下同様です。省略されているところをぜひご自分で確認しましょう。
Dim a(99) As Integer;
のように添え字が1つしかない配列を1次元配列といいます。
ということは添え字が複数の多次元配列があることを意味します。
例えば、2次元配列は
Dim a(9,9) As Integer;
と宣言します。
これで用意される箱は、
a(0,0) | a(0,1) | a(0,2) | a(0,3) | a(0,4) | a(0,5) | a(0,6) | a(0,7) | a(0,8) | a(0,9) |
a(1,0) | a(1,1) | a(1,2) | a(1,3) | a(1,4) | a(1,5) | a(1,6) | a(1,7) | a(1,8) | a(1,9) |
・
・
・
a(9,0) | a(9,1) | a(9,2) | a(9,3) | a(9,4) | a(9,5) | a(9,6) | a(9,7) | a(9,8) | a(9,9) |
の100個です。
なぜ、100かと申しますと
10×10
からです。
専門用語を用いない本講義では、
1次元配列を1つの添え字付き字名前をもった箱
2次元配列を2つの添え字付き字名前をもった箱
などと名付けることにしましょう。
では、今度は添え字が2つの箱を用意して、
横縦の同じことの繰り返し(2次元ループ)によって、
先のを実現しましょう。
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義へ
VB講義基礎へ
初心者のためのJava 入門 基礎から応用まで
数学研究室に戻る