VBSの配列の扱い方
参考サイト †
チェック式 WSH入門 第6回 VBScriptの配列を極める
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformwsh06_01.html
配列の宣言 †
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformwsh06_01.html
のようにカッコをつければ配列になる。
ループで配列操作 †
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformwsh06_02.html
配列内のデータ操作は、
- For ~ Nextステートメント
- For Each ~ Nextステートメント = 配列の各要素について繰り返しを行う
で順次の操作ができる。
0
1
2
3
4
5
6
7
8
9
10
11
| | Option Explicit
Dim intNumbers(4)
Dim intCounter For intCounter = 0 To 4 Step 1 intNumbers(intCounter) = intCounter * 2
Next
MsgBox "3つ目の値は" & intNumbers(2) & "です。"
|
「For Each」で配列を回してるサンプル
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| | Option Explicit
Dim intNumbers(4)
Dim intCounter For intCounter = 0 To 4 intNumbers(intCounter) = intCounter * 2
Next
Dim intTemp, strMessage
strMessage = ""
For Each intTemp In intNumbers strMessage = strMessage & intTemp & ","
Next
MsgBox strMessage
|
- For Each ~ Nextステートメント
For Each ~ Nextステートメントも、ForとNextの間の行を繰り返し実行するという意味になるが、For Eachでは配列の各要素に対して繰り返し操作を行う。
この例では「For Each intTemp In intNumbers」としているので、配列変数intNumbersの各要素に対して繰り返し実行するということになる。
intNumbersの各要素はループが繰り返されるたびにintTempという変数に代入される。
For Each 取出し用変数 In 配列
:
Next
これは定番で使うことになる構文(ステートメント)だな。
多次元配列をFor Eachで回したら、「取出し用変数」に配列が入るんだろう。
動的配列 †
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformwsh06_03.html
入れるデータ数によって、配列の大きさを変えられる。
=ジャストフィットサイズでメモリを無駄なく使うと。
VBScriptで動的配列を宣言するには次のようにする。
0
1
| | Option Explicit
Dim a()
|
Dimステートメントで変数名の後に()を書く。
このとき()内に数値を指定しないのがポイントである。
配列の大きさを数字て指定しなきゃいいだけと。
配列の添え字を取得する †
http://www.whitire.com/vbs/tips0035.html
【ソースコード】
0
1
2
3
4
5
| | Option Explicit
Dim strValue
strValue = Array("sun", "mon", "tue", "wed", "thu", "fri", "sat")
WScript.Echo "最小インデックスは " & LBound(strValue)
WScript.Echo "最大インデックスは " & UBound(strValue)
|
【実行結果】
最小インデックスは 0
最大インデックスは 6
配列から特定の文字列を抽出する †
http://www.whitire.com/vbs/tips0036.html
配列の中から、特定の文字列が含まれる要素を抽出します。
【ソースコード】
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| | Option Explicit
Dim strValue Dim lngLoop
strValue = Array("sun", "mon", "tue", "wed", "thu", "fri", "sat")
For lngLoop = LBound(strValue) To UBound(strValue)
WScript.Echo "配列(" & lngLoop & "):" & strValue(lngLoop)
Next
WScript.Echo "上記の配列で「e」が含まれるものは"
strValue = Filter(strValue, "e")
For lngLoop = LBound(strValue) To UBound(strValue)
WScript.Echo " 配列(" & lngLoop & "):" & strValue(lngLoop)
Next
|
【実行結果】
配列(0):sun
配列(1):mon
配列(2):tue
配列(3):wed
配列(4):thu
配列(5):fri
配列(6):sat
上記の配列で「e」が含まれるものは
配列(0):tue
配列(1):wed