第10講 添え字付き名前を持った箱(配列)

第2話 添え字付き名前をもった箱の簡単な演習



配列a(9)を用意して、
a(0)からa(9)まで順に1から10まで代入して、
それを表示するプログラム
vba
解答例
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)を用意して、
次のように表示させるプログラムを考えてください。
vba
改行は、
繰り返しを数える数(制御変数)iを10で割った商syと
iを10で割ったときの余りamを用意して、
If文によって実行します。
商はi/10だと、
VBAの場合は自動的に少数型に変換されてしまうので、
強制的な型変身(キャスト)が必要です。
iを10で割ったときの余りは、
VBAでは
i mod 10
で計算します。
かなりの難問ですから、ある程度考えてわからなければ、
30行下の解答例を参照してください。
でも、悔しいと思う方はできるまで試行錯誤をして実現してください。



































解答例
vba
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次元ループ)によって、
先のvbaを実現しましょう。




第1話へ 第3話へ

トップ

vc++講義へ

初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義へ
VB講義基礎へ
初心者のためのJava 入門 基礎から応用まで
数学研究室に戻る