連載
» 2006年12月07日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第7回 Subプロシージャでユーザー独自の処理を定義する (1/3)

Subプロシージャを利用すれば、一連の処理をまとめ、簡単に繰り返し実行できる。値呼び出しと参照呼び出しの違いについても理解しよう。

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]
基礎解説 演習方式で身につけるチェック式WSH超入門
Windows Server Insider


「基礎解説 演習方式で身につけるチェック式WSH超入門」のインデックス

連載目次

前回は、VBScriptの重要要素となる配列について詳説した。今回は、第3回などで取り上げた算術演算子や第4回などで取り上げた関数などを組み合わせて、プロシージャ(手続き)を自作する方法について述べる。もちろん、データ型、配列などの知識が必要な場面も出てくるので、第4回だけでなく第5回第6回もよく復習してから臨んでもらいたい。

 プロシージャを自作するには、Subプロシージャを定義するSubステートメントや、Functionプロシージャを定義するFunctionステートメントを利用する。どちらも、手続きをまとめたもの(プロシージャ)を何度も呼び出せるようにするための構文である。今回は、Subプロシージャについて解説し、Functionステートメントについては次回解説する。

Subプロシージャとは

 Subステートメントを用いて、Subプロシージャと呼ばれる一連の手続きを定義することができる(プロシージャ:“Procedure”は英語で「手続き」を意味する)。まずは次のスクリプトをご覧いただきたい。

Option Explicit
Randomize '乱数系列を初期化

ShowRandomNumber 'Subプロシージャの呼び出し
MsgBox "終了"

'*********************************************************
'用途: 1〜100のランダムな数値をメッセージ・ボックスで表示させる。
'受け取る値: なし
'戻り値: なし
'*********************************************************
Sub ShowRandomNumber()
        Dim intMin, intMax
        intMin = 1 '最小値
        intMax = 100 '最大値
        'ランダムな値を表示
        MsgBox "1〜100までのランダムな数→" & _
        Int((intMax - intMin + 1) * Rnd + intMin)
End Sub

 このスクリプトは、第4回で登場した1〜100のランダムな数値をメッセージ・ボックスで表示させるスクリプトを基に、Subステートメントを使ってSubプロシージャ化したものである。

 Subプロシージャは次のように記述する。

Sub <Subプロシージャ名> ()
        〜(Subプロシージャの内容)〜
End Sub

 後述する「引数」がなければ( )は省略可能である。Subプロシージャはスクリプト中のどこにでも記述することができ、Subプロシージャ名を記述することでコード中のどこからでも何度でも呼び出すことができる。Subプロシージャから別のSubプロシージャを呼び出すことも可能である。Subプロシージャは呼び出されるとその内容を実行した後、呼び出し元の次の行に制御を移す。Subプロシージャでないコード部分をスクリプト・レベル・ステートメントという。概念図を示すと次のようになる。

Subプロシージャの概念図
Subプロシージャはスクリプト中に複数定義可能であり、呼び出し元から呼び出された後、プロシージャ内部のステートメントを実行し、呼び出し元の次の行に制御を戻す。
左図は1つのSubプロシージャを1回だけ呼び出す単純な例、右図は複数のSubプロシージャを複数回呼び出す複雑な例である。

 この例の場合、ShowRandomNumberと記述することでSubプロシージャShowRandomNumberを呼び出し、実行(1〜100のランダムな数を表示)した後、呼び出し元の次の行、MsgBox "終了"(「終了」を表示)を実行することになる。

 第4回では同じスクリプトを(手動で)3回実行するというデモを行ったが、このようにSubプロシージャ化すると、同じコードを何度も記述することなく、一連の手続きを何回も呼び出して使うことができる。先ほどの例では1回呼び出しているだけだが、例えば、

ShowRandomNumber
ShowRandomNumber
ShowRandomNumber

もしくは、

Dim intCounter
For intCounter = 1 To 3
        ShowRandomNumber
Next

とすることでSubプロシージャShowRandomNumberを3回呼び出すことができる。

 なお、SubプロシージャShowRandomNumber内でDimステートメントを用いて宣言しているintMin、intMax変数は、このプロシージャ内だけで有効なローカル変数である。そのため、このSubプロシージャの外でintMin、intMaxを参照することはできない。逆に、Subプロシージャの外で宣言したスクリプト・レベルの変数(グローバル変数という)は、Subプロシージャ内でも参照・代入が可能である。例えば、次のようなスクリプトにおいて、スクリプト・レベルで宣言した変数strMessageの内容をSubプロシージャの中で参照できるということである。

Option Explicit
Dim strMessage
strMessage = "認めたくないものだな、若さ故の過ちというものを。"

ShowMessage

Sub ShowMessage()
        MsgBox strMessage
End Sub

 

       1|2|3 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。