6.1.5 配列変数
配列変数のインデックス番号は1から始まります。一次元配列変数のインデックス番号は要素を表します。二次元配列変数の1番目のインデックスは行要素を表し,2番目のインデックス番号は列要素を表します。
次に二次元配列変数「T(5,6)」のデータ構造例を示します。
- 〈この項の構成〉
(1) 配列変数の記述規則
配列変数の記述規則を次に示します。
-
配列変数名は変数の名前付け規則に従います。
-
配列変数の要素(二次元配列の場合は,行要素,および列要素)を表すインデックス番号は1から始まります。また,「( )」,または「[ ]」で囲んで指定します。
-
配列変数の宣言時にインデックス番号を指定する場合は,配列変数の要素数は固定となります。インデックス番号を指定しない場合は,配列変数の要素数は可変となります。
-
配列変数の次元数は,一次元,および二次元まで定義できます。
-
配列変数の要素数の上限は,一つの配列変数につき65,536個,一つのスクリプトファイルにつき131,072個です。
-
一度宣言した配列変数の次元数は変更できません。
(例)
Dim A ( 5 ) Dim A ( 5 ,10 ) ←(エラー)次元数は変更できない。
-
一度宣言した配列変数の次元数が等しい場合は,要素数を変更できます。また,要素数が固定な配列変数から可変な配列変数へ,または可変な配列変数から固定な配列変数へ変更できます。変更した場合,今までの設定値はEmpty値となります。
(例)
Dim A ( 10 ) Dim A ( 5 ) ←要素数を変更できる。 Dim A ( ) ←可変な要素数に変更できる。
-
非配列変数から配列変数へ,または配列変数から非配列変数への再定義はできません。
(例)
Dim A Dim A ( ) ←(エラー)Aは非配列変数として定義されているため再定義できない。
-
代入文で配列変数のすべての要素を一括して代入することができます。ただし,左辺が固定な配列変数で,かつ左辺と右辺の配列変数の要素数が異なる場合,一括して代入することはできません。
(例1)
Dim A ( 5 ) ,B ( ) ,C ( 10 ) For cnt = 1 To 5 A ( cnt ) = Time Next B = A ←Aのすべての要素を一括してBに代入できる。代入後のBの要素数は5となる。 C = B ←(エラー)Bの要素数は5,Cの要素数は10で,要素数が異なるため 一括して代入できない。
(例2)
Dim A ( ) ,B ( 1 ) For cnt = 1 To 5 A ( cnt ) = Time Next B ( 1 ) = Date A = B ←Bのすべての要素を一括してAに代入できる。代入後のAの要素数は1となる。
(例3)
Dim A ( ) ,B ( ) For cnt = 1 To 5 A ( cnt ) = Time Next For cnt = 1 To 10 B ( cnt ) = Date Next A = B ←Bのすべての要素を一括してAに代入できる。代入後のAの要素数は10となる。
-
代入文で配列変数の一つの行要素だけを一括して代入することができます。ただし,一つの列要素だけを一括して代入することはできません。
(例)
Dim A ( 2 , 5 ) ,B ( ) For cnt = 1 To 5 A ( 1 , cnt ) = Time Next B = A ( 1 ) ←Aの第1行目の要素を一括してBに代入できる。
-
比較文で配列変数のすべての要素が等しいかどうかを判定することができます。ただし,大小比較はできません。
(例1)
Dim A ( 5 ) ,B ( 5 ) : If A = B Then ←AとBが等しいかどうかを比較できる。
(例2)
Dim A ( 5 ) ,B ( 5 ) : If A < B Then ←(エラー)AとBの大小比較はできない。
-
要素数が可変な配列変数で値が未設定な中間の要素に対し代入を行った場合,先頭から中間の要素までの未設定であった要素はEmpty値になります。ただし,配列変数の宣言によってEmpty値となる要素は異なります。
(例1)
一次元配列で要素数を省略した場合
第m要素の代入に対して,第1要素から第m-1要素がEmpty値になります。
Dim A ( ) A ( 1 ) = "abc"
A ( 5 ) = "def" ←A ( 2 ) から A ( 4 ) までの要素はEmpty値になる。
(例2)
二次元配列で行要素数および列要素数を省略した場合
m行,n列の要素の代入に対して,1行からm-1行の各1列,およびm行の1列からn-1列の要素がEmpty値になります。
Dim A ( , ) A ( 3 , 5 ) = "abc" ←A ( 1 , 1 ) , A ( 2 , 1 ) , および A ( 3 , 1 ) から A ( 3 , 4 ) の要素はEmpty値になる。
A ( 1 , 2 ) などの空欄の要素は値が格納されていない要素です。この要素を参照した場合は「可変な配列変数の未設定のインデックスは参照できません。」のエラーとなります。
(例3)
二次元配列で列要素数を省略した場合
m行,n列の要素の代入に対して,m行の1列からn-1列の要素がEmpty値になります。
Dim A ( 3 , ) A ( 3 , 5 ) = "abc" ←A ( 3 , 1 ) から A ( 3 , 4 ) の要素はEmpty値になる。
A ( 1 , 1 ) などの空欄の要素は値が格納されていない要素です。この要素を参照した場合は「可変な配列変数の未設定のインデックスは参照できません。」のエラーとなります。
(例4)
二次元配列で行要素数を省略した場合
m行,n列の要素の代入に対して,1行からm-1行の全列,およびm行の1列からn-1列の要素がEmpty値になります。
Dim A ( , 5 ) A ( 3 , 5 ) = "abc" ←A ( 1 , 1 ) から A ( 1 , 5 ) , A ( 2 , 1 ) から A ( 2 , 5 ) ,および A ( 3 , 1 ) から A ( 3 , 4 )の 要素はEmpty値になる。