ReDimステートメント
こちらでは、VBAのIE(InternetExplorer)操作に利用されたReDimステートメントの解説になります。
ステートメントとは、「命令文」と訳されるように、コンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
ReDimステートメントとは
ReDimステートメントは、動的配列変数に対するメモリ領域の再割り当てを行います。プロシージャ レベルで使用します。
ReDim 変数名(インデックス番号) As データ型
構文 | ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . . | |
---|---|---|
キーワード | 省略 | 説明 |
Preserve | ● | 省略可能です。既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。 |
varname | × | 必ず指定します。宣言する変数の名前です。変数の標準的な名前付け規則に従って指定します。 |
subscripts | × | 必ず指定します。配列変数の次元を指定します。指定できる次元数の最大値は 60 です。引数 subscripts の構文は、次のとおりです。 [lower To] upper [,[lower To] upper] . . . 引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。 |
type | ● | 変数のデータ型を指定します。As type節は宣言する各変数に対して個別に指定します。 |
ReDim ステートメントは、動的配列を宣言したり、Private、Public、または Dim の各ステートメントにおいて、次元の添字を省略した空のかっこだけを指定して宣言されている動的配列の、要素数や次元数を変更するときに使います。
ReDim ステートメントは、配列の要素数や次元数を変更するために何回でも使うことができます。ただし、バリアント型 (Variant) に格納されている配列を除き、一度あるデータ型で宣言された配列のデータ型を ReDim ステートメントで別のデータ型に変更することはできません。配列がバリアント型に格納されている場合、As type 節を使用して要素のデータ型を変更できます。ただし、キーワード Preserve を使用している場合は、データ型の変更は許可されません。
キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られます。また、次元数は変更できません。たとえば、次元が 1 つしかない動的配列の場合、その次元は最後のただ 1 つの次元なので、その次元のサイズを変更できます。次元が 2 つ以上ある動的配列の場合、最後の次元のサイズのみを変更でき、その配列に格納されている値は保持されます。ただし、ほかの次元の大きさは変更できません。次の例では、既に格納されている値を保持したまま、動的配列の最後の次元のサイズを増やします。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
同様に、キーワード Preserve を使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。添字の下限を変更しようとすると、エラーが発生します。
配列のサイズを小さくすると、削除された配列の要素に格納されていた値は、失われます。プロシージャに配列を参照渡しで引き渡した場合、プロシージャ内で配列の再定義を行うことはできません。
変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化されて、固定長文字列には 0 が埋められます。また、バリアント型 (Variant) 変数は Empty 値に初期化されます。ユーザー定義型変数の各要素は、個別の変数として初期化されます。オブジェクトを参照する変数には、あらかじめ Set ステートメントで既存のオブジェクトを代入しておく必要があります。既存のオブジェクトを代入するまで、オブジェクト変数には、特殊な値である Nothing が格納されています。これは、オブジェクト変数がオブジェクトの特定のインスタンスを参照していないことを表す値です。
宣言した変数がモジュール レベルまたはプロシージャ レベルにない場合、ReDim ステートメントは宣言ステートメントと同様の働きをします。同じ名前を持つほかの変数が後で作成されると、その変数の適用範囲 (スコープ) が広く、Option Explicit ステートメントが指定されている場合でも、ReDim ステートメントは後で作成された変数を参照し、コンパイル エラーは発生しません。このような名前の競合を避けるには、ReDim ステートメントは宣言ステートメントとして使わず、配列を再定義するためだけに使用します。
バリアント型 (Variant) に格納された配列のサイズを変更するには、まず最初にバリアント型変数を明示的に宣言する必要があります。
変数のデータ型
指定方法 | データ型 | バイト数 | 値の範囲 |
---|---|---|---|
Byte | バイト型 | 1 | 0~255 |
Boolean | ブーリアン型 | 2 | 真(True)又は偽(False) |
Integer | 整数型 | 2 | -32,768~32,767 |
Long | 長整数型 | 4 | -2,147,483,648~2,147,483,647 |
Currency | 通貨型 | 8 | -922,337,203,685,477.5808~922,337,203,685,477.5807 |
Single | 単精度浮動小数点数型 | 4 | -3.402823E38~-1.401298E-45(負の数) 1.401298E-45~3.402823E38(正の数) |
Double | 倍精度浮動小数点数型 | 8 | -1.7976931348623E308~-4.94065645841247E-324(負の数) 4.94065645841247E-324~1.79769313486232E308(正の数) |
Date | 日付型 | 8 | 西暦100年1月1日~西暦9999年12月31日 |
Object | オブジェクト型 | 4 | オブジェクトを参照するためのアドレス |
String | 文字列型 | 10+文字列の長さ | 0~2GB |
Variant | バリアント型 | 16 | 倍精度浮動小数点数型の範囲と同じ |
Variant | バリアント型 | 22バイト+文字列の長さ | 可変長の文字列型の範囲と同じ。 |
動的配列を作成するサンプルコード
Sub Sample()
Dim a() As Integer
ReDim a(2)
a(0) = 5
a(1) = 10
a(2) = 15
End Sub
実行結果
解説
sampleのSubステートメントは引数の設定なしです。次にReDimステートメントを利用してn,s(0)~s(3),str1の変数を宣言しています。それぞれ、変数nには整数型(Integer)の「3」、変数sには整数型(Integer)の「1~4」、変数str1には文字列型(String)の"足し算:"を設定しています。
そしてDebugオブジェクトのPrintメソッドで変数を結合・足し算させ、「足し算:5」を表示させます。
最後はEndステートメントを利用してsampleプロシージャを終了させます。
こちらでは、動的配列の事例で配列a(0)に「5」、配列a(1)に「10」、配列a(2)に「15」を代入しています。
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。