| 基礎解説 チェック式 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ジャパン)
- 第207話 究極の人事システム (2010/2/9)
部長、わが人事部が開発した究極の人事評価システムがついに完成しました! これで不要な社員が一発で分かります! - WindowsTIPS (2010/2/5)
− netshコマンドでTCP/IPのパラメータを設定する
− Virtual PC 2007の共有NATで利用可能なアドレス範囲
− スタンバイ復帰でパスワード入力を要求されないように - 仮想環境でActive Directoryを利用する (2010/2/4)
仮想環境にADをインストールすれば、自由にActive Directoryドメイン・ネットワークを構築して実験できる - 第206話 バナー広告案 (2010/2/2)
いまどきWebマーケティングが不可欠なのは分かるが、強烈な競合に並べてバナーなんか出して、勝ち目はあるのか?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |










