【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 
 

基礎解説

チェック式 WSH入門
―― 演習方式で身につけるWSH超入門 ――

第7回 Subプロシージャでユーザー独自の処理を定義する

1.Subプロシージャとは

Microsoft MVP
Visual Developer - Scripting
牟田口 大介
2006/12/07
Page1 Page2 Page3

Index(全19回)
WSHを始めよう
VBScriptの基本を押さえよう(その1) 文字列の入出力
VBScriptの基本を押さえよう(その2) 計算と分岐処理
関数を使いこなす(その1) 文字列、数値、日付を扱う関数
データ型について理解を深めよう
VBScriptの配列を極める
Subプロシージャでユーザー独自の処理を定義する
Functionプロシージャでユーザー独自の関数を定義する
VBScriptのオブジェクトを使いこなす
WScriptオブジェクトを利用する(1)
WScriptオブジェクトを利用する(2)
WshShellオブジェクトを利用する(1)
WshShellオブジェクトを利用する(2)
WshShellオブジェクトを利用する(3)
WshNetworkオブジェクトを利用する
FileSystemObjectオブジェクトを利用する(1)
FileSystemObjectオブジェクトを利用する(2)
FileSystemObjectオブジェクトを利用する(3)
TextStreamオブジェクトとDictionaryオブジェクトを使う[最終回]

 前回は、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


 INDEX
  [基礎解説]チェック式 WSH入門
  第7回 Subプロシージャでユーザー独自の処理を定義する
  1.Subプロシージャとは
    2.Subプロシージャと引数(1)
    3.Subプロシージャと引数(2)
 
 基礎解説

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

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