| 基礎解説 チェック式 WSH入門 第7回 2.Subプロシージャと引数(1)Microsoft MVPVisual Developer - Scripting 牟田口 大介 2006/12/07 |
![]() |
|
|
|
引数を指定したSubプロシージャ
先ほどの例では、Subプロシージャを呼び出すたびに毎回同じ動作をするが、呼び出し方によって異なった挙動をさせたいという場合もある。その際に用いるのが引数である。すでに第4回で関数と関数に与える引数について解説したが、それと基本は同じで、Subプロシージャの引数として与えた値(変数、リテラル、関数の戻り値など)に応じて異なった処理を行わせることができる。概念図を示すと次のようになる。
![]() |
| 引数付きSubプロシージャ呼び出しの概念図 |
| Subプロシージャを呼び出す際に引数(実引数)を渡すことで、Subプロシージャ側の仮引数に実引数の値が代入され使用される。 |
次の例は、前回登場した、指定した日付の英語日付表記を得るものであるが、表示部分をSubプロシージャ化している。
Option Explicit |
このスクリプトを実行すると、例えば次のように2回メッセージ・ボックスが表示される。
![]() |
![]() |
| SubプロシージャShowDateNotationを実行した例 | |
| 与えられた日付のデータから、英語日付表記を取得し、メッセージ・ボックスに表示している。 | |
この例では、SubプロシージャShowDateNotationに#2016/6/29#という日付リテラル、Date関数の戻り値(今日の日付)をそれぞれ引数として渡している。このとき、渡す引数を実引数ともいう。SubプロシージャShowDateNotationは、渡された引数から英語日付表示を生成し、それを表示する。Sub ShowDateNotation(dtmDate)のdtmDateを仮引数といい、呼び出し元から与えられた実引数の値が仮引数に代入される。すなわち、#2016/6/29#という日付リテラルおよびDate関数の戻り値がそれぞれ仮引数に渡されてSubプロシージャ内で参照されるというわけである。
なお、Subプロシージャの呼び出しにCallステートメントを用いることができる。
ShowDateNotation #2016/6/29# |
の代わりに、
Call ShowDateNotation (#2016/6/29#) |
と記述することでも同じ結果が得られる。Callステートメントを使うときは、引数に ( ) を付ける必要があるので注意しよう。
参照渡しと値渡し
プロシージャに引数を渡す場合、「参照渡し(call by reference)」と「値渡し(call by value)」という2つの方法がある。
VBScriptにおける引数は、デフォルトでは参照渡しであり、変数の参照を引数として渡す。これはどういうことかというと、プロシージャ内で仮引数の値を変更した場合、実引数として渡した変数の値も変更されるということである。次の例を見てもらいたい。
Option Explicit |
これは、与えられた数値を自乗し、その結果を表示するという単純なサンプルだが、SubプロシージャShowSquare内で仮引数lngNumberにそのまま自乗の値を代入している。実引数は参照渡しされているので、lngInitialNumberの値は最初の5とは異なり、25となる。
参照渡しに対し、値のコピーを引数に渡す、値渡しをさせるにはSubプロシージャを次のように記述する。
Sub ShowSquare(ByVal lngNumber) |
このようにByValキーワードを用いることで実引数は値渡しされるので、lngInitialNumberの値は元の値から変化せず5となる。
なお、VBScriptにおいては、ByVal(値渡しさせるためのキーワード)もしくはByRef(参照渡しさせるためのキーワード)を記述しない場合はByRefが省略されていると解釈される。
また、後述するFunctionプロシージャでも参照渡しと値渡しの引数をそれぞれ渡すことができる。
| INDEX | ||
| [基礎解説]チェック式 WSH入門 | ||
| 第7回 Subプロシージャでユーザー独自の処理を定義する | ||
| 1.Subプロシージャとは | ||
| 2.Subプロシージャと引数(1) | ||
| 3.Subプロシージャと引数(2) | ||
| 基礎解説 |
ホワイトペーパー(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」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |










