| 基礎解説 チェック式 WSH入門 第6回 2.Forステートメントによる配列の操作Microsoft MVPVisual Developer - Scripting 牟田口 大介 2006/11/03 |
![]() |
|
|
|
For 〜 Nextステートメント
先ほどの例のように、配列を操作するときは似たような行が連続することが多い。このような繰り返し(ループ)をまとめて記述するためのステートメントが、VBScriptにはいくつか用意されている。そのうち、For 〜 NextステートメントおよびFor Each 〜 Nextステートメントをここで紹介しよう。
まずはFor 〜 Nextステートメントを用いて先ほどのスクリプトを書き直すと次のようになる。
Option Explicit |
For 〜 Nextステートメントは、ForとNextの間に記述したステートメントを繰り返し実行するというものである。実行する回数は、「For ループカウンタ用変数 = 開始数 To 終了数 Step 間隔」のように記述する。ここでは「For intCounter = 0 To 4 Step 1」と指定しているので、ループカウンタ用変数intCounterを0から4まで、1ずつ加算させて繰り返す、という意味になる。その結果、For 〜 Nextの間に含まれるステートメント「intNumbers(intCounter) = intCounter * 2」が、intCounterの値を0、1、2、3、4と5回変化させながら実行されるわけである。結果として配列要素に1行ずつ代入していたときと同じ結果が得られる。なお、Stepが1の場合は“Step 1”を省略可能である。大きい数から減少させる場合はStepに負の値を指定する。
このスクリプトでは配列の1要素しか表示していない。そこで、配列のすべての内容を参照するコードを考える。For 〜 Nextステートメントを用いても可能だが、ここでは配列の各要素について繰り返しを行う、For Each 〜 Nextステートメントを使ってみよう。
Option Explicit |
このスクリプトを実行すると、次のように配列の中身が“,”で区切られて表示される。
![]() |
| For Each 〜 Nextによる配列要素の取り出し例 |
| For Each 〜 Nextステートメントを用い、配列の各要素を結合した文字列を取り出し、表示している。 |
For Each 〜 Nextステートメント
For Each 〜 Nextステートメントも、ForとNextの間の行を繰り返し実行するという意味になるが、For Eachでは配列の各要素に対して繰り返し操作を行う。この例では「For Each intTemp In intNumbers」としているので、配列変数intNumbersの各要素に対して繰り返し実行するということになる。intNumbersの各要素はループが繰り返されるたびにintTempという変数に代入される。
なお、For 〜 NextステートメントおよびFor Each 〜 Nextステートメントにおいて、ある条件を満たしたときにループから抜けたい場合は、ExitステートメントをIfステートメントなどの中に記述する。例えば、1から順番に1ずつ増やした数値を足していったとき(1 + 2 + 3 + 4 + 5 + ……)、初めて1000を超えるときの値とその和を求めるには次のようにする。
Option Explicit |
このスクリプトを実行すると次のようになる。
![]() |
| Exitステートメントの利用法 |
| Exit Forを利用すると、ループから抜けることができる。この例では、1〜100までのループにおいて、総和が1000を超えた時点でループから抜け出している。 |
このように、ループを抜けるときにはExitステートメントを用い、Exit Forと記述する。この場合、intCounterが45になった時点でintNumberが1000を超えるので、ループを抜ける。intCounterが46〜100までは実行されない。
Forステートメントの使用例
ここで1つ、For 〜 Nextステートメントを使った例題を出そう。0〜99までの数値がランダムに並んだ文字列を取得することを考える。ただし、同じ数値が2回以上出現してはいけないという条件を付ける。このため、単にRnd関数を用いるだけでは駄目ということになる。Rnd関数を使うと指定範囲の乱数を得ることができるが、その乱数は呼び出すたびに必ず違う値を返すというわけではなく、重複することもあるからだ(Rnd関数については第4回の「数値演算関数 その3(乱数)」を参照)。この問題を解決するには、まず配列に0〜99までの数値を格納しておき、その後、配列を適当な回数シャッフルすればよい。シャッフルとは、配列からランダムに2つの要素を取り出し、その値を交換することである。単に値を入れ換えているだけなので、これならば同じ数が重複することはない。
Option Explicit |
このスクリプトを実行すると、例えば次のように表示される。
![]() |
| 配列をランダムに並べ替える |
| 0〜99までの数が格納された配列をランダムに1000回シャッフルすると、重複のないランダムな数字列が得られる。 |
少々長いスクリプトになったが、順を追っていけば理解することはそれほど困難ではないだろう。
このように、配列とFor 〜 Nextステートメントを併用することで一括処理ができるだけでなく、値の並べ替えなども可能になる。
| INDEX | ||
| [基礎解説]チェック式 WSH入門 | ||
| 第6回 VBScriptの配列を極める | ||
| 1.配列とは | ||
| 2.Forステートメントによる配列の操作 | ||
| 3.動的配列 | ||
| 4.多次元配列 | ||
| 5.配列を操作するための関数 | ||
| 基礎解説 |
TechTargetジャパン
- WebサーバのSSL証明書が「正しい」か確認する (2012/2/10)
SSLに必要なサーバ証明書の取得/インストールのミスはWebサイトの信頼を失墜させかねない。証明書ベンダ提供のツールで手軽かつ確実にチェックしよう - クライアントでも利用可能になるHyper-V 3.0とは? (2012/2/9)
Windows 8では、従来のWindows Virtual PCに代わって新しくHyper-V 3.0がクライアント向けにも導入される。その概要を解説 - 第303話 ペアプロ2 (2012/2/7)
あっ、またまたいつぞやの幽霊が! …っと思ったら、何だ倉井さんかぁ…。はぁー、驚いた… - Excelで郵便番号変換ウィザードを活用する (2012/2/3)
Excelで管理している顧客名簿などで、不足している郵便番号や住所を入力するのは意外と面倒。郵便番号変換ウィザードを使えば、これらの入力が簡単になる
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




