第7回 Subプロシージャでユーザー独自の処理を定義する:基礎解説 演習方式で身につけるチェック式WSH超入門(1/3 ページ)
Subプロシージャを利用すれば、一連の処理をまとめ、簡単に繰り返し実行できる。値呼び出しと参照呼び出しの違いについても理解しよう。
前回は、VBScriptの重要要素となる配列について詳説した。今回は、第3回などで取り上げた算術演算子や第4回などで取り上げた関数などを組み合わせて、プロシージャ(手続き)を自作する方法について述べる。もちろん、データ型、配列などの知識が必要な場面も出てくるので、第4回だけでなく第5回、第6回もよく復習してから臨んでもらいたい。
■連載目次
第1回 WSHを始めよう
第2回 VBScript基本(1)文字列の入出力
第3回 VBScript基本(2)計算と分岐処理
第4回 関数を使いこなす:文字列、数値、日付
第5回 データ型について理解を深めよう
第6回 VBScriptの配列を極める
第7回 Subプロシージャで処理を定義
第8回 Functionプロシージャで関数を定義
第9回 VBScriptのオブジェクトを使いこなす
第10回 WScriptオブジェクト(1)
第11回 WScriptオブジェクト(2)
第12回 WshShellオブジェクト(1)
第13回 WshShellオブジェクト(2)
第14回 WshShellオブジェクト(3)
第15回 WshNetworkオブジェクト
第16回 FileSystemObjectオブジェクト(1)
第17回 FileSystemObjectオブジェクト(2)
第18回 FileSystemObjectオブジェクト(3)
第19回 TextStream/Dictionaryオブジェクト
プロシージャを自作するには、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
Copyright© Digital Advantage Corp. All Rights Reserved.