3
1

More than 1 year has passed since last update.

【VBScript】静的配列と動的配列について

Posted at

目次

1. はじめに
2. 環境
3. 静的配列と動的配列の違い
4. 配列の初期化
4-1. 静的配列
4-2. 動的配列
5. 参考
6. おわりに

1.はじめに

現在VBScriptを実務で使用しています。VBSCriptでは配列の種類が複数あります。

今回はVBScriptの静的配列と動的配列についてまとめます。

2.環境

  • Windows 11 Pro 22H2
  • Microsoft-IIS/10.0
  • ASP 5.8 (16384)

3.静的配列と動的配列の違い

項目 内容
静的配列 要素数が決まっているときに使用する
動的配列 要素数が決まっていないときに使用する

▼静的配列
配列を宣言するときに、()内に最大の要素数を入れます。

Dim arr(2)
arr(0) = "a"
arr(1) = "b"
arr(2) = "c"

Response.Write(arr(2)) '-> c
Response.Write(arr(3)) '-> 宣言していないのでエラー

最大の要素数を入れずに宣言をした場合、エラーになります。

Dim arr()
arr(0) = "a"
arr(1) = "b"
arr(2) = "c"

Response.Write(arr(2)) '-> エラー

▼動的配列
配列を宣言するときに、()内に最大の要素数を入れます。

Dim arr() '何も指定しない※このときの要素数は0

Redim arr(2) ' ()内に最大の要素数を入れる
arr(0) = "a" 
arr(1) = "b"
arr(2) = "c"

Response.Write(arr(2)) '-> c

Redim 配列名(最大の要素数)とすると、動的配列の要素数を変更することができます。

Redimを使用すると、配列のデータは全て削除されます。
格納されているデータを残したまま要素数の変更をしたい場合は、
Redim Preserve 配列名(最大の要素数)とします。

▼Redim

Dim arr() '何も指定しない※このときの要素数は0

Redim arr(2)
arr(0) = "a" 
arr(1) = "b"
arr(2) = "c"

Response.Write(arr(2)) '-> c

Redim arr(3)
arr(3) = "d"
For Each a In arr
    Response.Write a 'a~cは削除されてdのみ
Next

▼Redim Preserve

Dim arr()
Redim arr(2)
arr(0) = "a" 
arr(1) = "b"
arr(2) = "c"

Response.Write(arr(2)) '-> c

Redim Preserve arr(3)
arr(3) = "d"
For Each a In arr
    Response.Write a '-> a~d
Next

4.配列の初期化

配列の初期化はErase 配列と書きます。

なぜ初期化を行うのか?
→もしも初期化をしない状態でその変数を用いて演算処理を行おうとすると、
例外(実行時エラー)が発生し、プログラムが止まってしまうため

4-1.静的配列

すべての要素が空の文字列になります。要素数は変わりません。

Dim arr(2)
arr(0) = "a"
arr(1) = "b"
arr(2) = "c"

For Each a In arr
    Response.Write a '-> a~c
Next

Erase arr
For Each a In arr
    Response.Write a ' 何もなし
Next

Response.Write(UBound(arr)) '-> 2(最大値の要素数)

If IsArray(arr) Then
    Response.Write "True" '配列なのでTrue
Else
    Response.Write "False"
End If

4-2.動的配列

メモリを開放します。要素数は0になります。

Dim arr()
Redim arr(2)
arr(0) = "a"
arr(1) = "b"
arr(2) = "c"

Redim Preserve arr(3)
arr(3) = "d"
For Each a In arr
    Response.Write a '-> a~d
Next

Erase arr ' 配列の初期化(メモリを解放)
For Each a In arr
    Response.Write a '何もなし
Next

If IsArray(arr) Then
    Response.Write "True" '配列なのでTrue
Else
    Response.Write "False"
End If

5.参考

6.おわりに

記事の感想や意見、ご指摘等あれば伝えていただけるとありがたいです。
読んでいただき、ありがとうございました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1