VBScript(Visual Basic Scripting Edition)は、Windows環境でスクリプトを実行するための軽量なプログラミング言語です。
その中でも、メッセージボックス(MsgBox)機能は、ユーザーとの対話を実現するための重要な要素です。
本記事では、VBScriptのメッセージボックスの使い方や応用例を詳しく解説し、最後には実践的な演習問題も用意しています。
メッセージボックスの基本
メッセージボックスは、ユーザーに情報を提供したり、質問を投げかけたりするためのダイアログボックスのことです。

ダイアログボックスってなんじゃろうか・・・

入力を促すために表示される小さなウィンドウのことですよ!
VBScriptでは、MsgBox関数を使って簡単にメッセージボックスを表示することができます。
基本的な構文は以下の通りです。
MsgBox prompt[, buttons][, title][, helpfile, context]

prompt(プロンプト)
必須で必要な引数で、「促す」という意味の英単語です。
メッセージとして表示する値を文字列で指定します。
文字列は、ダブルクォーテーションで囲んだ文字のことで、文字を代入した変数も引数として渡すことができます。
使用する文字の幅にもよりますが、最大で約1024文字入力できます。
メッセージを複数行表示させたい場合は、下記の記述例のように「vbCrLf」を用いることで表示できます。
「&(アンパサンド)」は、文字列を結合させたいときに使用します。
また、メッセージの文字を表示させたくない場合は、「MsgBox “”」を入力してください。
MsgBox "メッセージボックスを" & vbCrLf & "使ってみよう!", vbYesNoCancel, "タイトル"
buttons(ボタン)
省略可能な任意で入力する引数です。
表示させるボタンの数と種類を指定します。省略した場合は、「OK」ボタンのみ表示されます。
省略方法は、カンマが2つ連続するように記述するか引数「prompt」のみ入力します。
MsgBox "メッセージボックスを使ってみよう!",, "タイトル"
'または
MsgBox "メッセージボックスを使ってみよう!"
ボタンの種類の一覧を紹介します。
定数 | 値 | 表示されるボタンやアイコンの種類と補足 |
---|---|---|
vbOKOnly | 0 | 「OK」ボタン |
vbOKCancel | 1 | 「OK」と「キャンセル」ボタン |
vbAbortRetryIgnore | 2 | 「中止」と「再試行」と「無視」ボタン |
vbYesNoCancel | 3 | 「はい」と「いいえ」と「キャンセル」ボタン |
vbYesNo | 4 | 「はい」と「いいえ」ボタン |
vbRetryCancel | 5 | 「再試行」と「キャンセル」ボタン |
vbCritical | 16 | 「重大なメッセージ」アイコン |
vbQuestion | 32 | 「警告クエリ」アイコン |
vbExclamation | 48 | 「警告メッセージ」アイコン |
vbInformation | 64 | 「情報メッセージ」アイコン |
vbDefaultButton1 | 0 | 左から1番目に表示されているボタンがアクティブになる |
vbDefaultButton2 | 256 | 左から2番目に表示されているボタンがアクティブになる ※2番目が存在しない場合は、vbDefaultButton1と同等 |
vbDefaultButton3 | 512 | 左から3番目に表示されているボタンがアクティブになる ※3番目が存在しない場合は、vbDefaultButton1と同等 |
vbDefaultButton4 | 768 | 左から4番目に表示されているボタンがアクティブになる ※4番目が存在しない場合は、vbDefaultButton1と同等 |
vbApplicationModal | 0 | メッセージボックスに応答するまで実行しているVBScriptのプログラムが進まない |
vbSystemModal | 4096 | メッセージボックスに応答するまで、すべてのアプリケーションが中断する ※私の環境では特に変化なしでした |
vbMsgBoxHelpButton | 16384 | 「ヘルプ」ボタンを追加 |
vbMsgBoxSetForeground | 65536 | 前景ウィンドウとして指定する ※私の環境では特に変化なしでした |
vbMsgBoxRight | 524288 | テキストを右揃えにする |
vbMsgBoxRtlReading | 1048576 | ヘブライ語とアラビア語のシステムでテキストが右から左に読む形式で表示される |
ご紹介した定数は、組み合わせて使用することができます。
例えば「警告メッセージ」と「はい」「いいえ」「キャンセル」ボタンの組み合わせは、下記のように「vbExclamation + vbYesNoCancel」と記述します。
「+(プラス)」は、数値を足したいときに使用します。
Const vbYesNoCancel = 3
Const vbExclamation = 48
MsgBox "メッセージボックスを使ってみよう!", vbExclamation + vbYesNoCancel, "タイトル"
title(タイトル)
省略可能な任意で入力する引数です。
メッセージボックスの上部に表示させるタイトル部分の値を文字列で入力します。
helpfile(ヘルプファイル)、context(コンテキスト)
省略可能な任意で入力する引数です。
この引数を指定することで「ヘルプ」ボタンが表示され、ヘルプボタンを左クリックすることで、コンパイルされたヘルプファイル(拡張子chm)などを呼び出すことができます。
ヘルプファイルとは、使い方や注意事項が書かれている取扱説明書のようなファイルを指します。
VBScriptで書かれたプログラムは、人間が認識しやすいように記述したものでコンピューターは認識できません。
コンパイルとは、コンピューターが記述されたプログラムを認識できるように機械語へ変換することです。
VBScriptでは、この引数を使用できませんので省略しましょう。
VBScriptと親和性のあるプログラミング言語「VBA」では使用できることを確認しています。
この引数を使用する場合は、VBAを検討してください。
メッセージボックスの種類
情報を伝えるメッセージボックス
MsgBox "これは情報を伝えるメッセージボックスです。"
警告を伝えるメッセージボックス
MsgBox "これは警告を伝えるメッセージボックスです。", vbExclamation
エラーを伝えるメッセージボックス
MsgBox "これはエラーを伝えるメッセージボックスです。", vbCritical
質問を投げかけるメッセージボックス
MsgBox "これは質問を投げかけるメッセージボックスです。", vbQuestion + vbYesNo
メッセージボックスの応用
ユーザーからの入力を受け取る
Dim userInput
userInput = InputBox("名前を入力してください:")
MsgBox "こんにちは、" & userInput & "さん!"
条件に応じてメッセージボックスを表示する
Dim answer
answer = MsgBox("続行しますか?", vbQuestion + vbYesNo)
If answer = vbYes Then
MsgBox "処理を続行します。"
Else
MsgBox "処理をキャンセルしました。"
End If
どのボタンを押したかが判断できる整数値を取得することができます。
取得するには、Subプロシージャではなく、Functionプロシージャの書き方をします。
取得した整数値がどのボタンを指すか紹介します。
定数 | 値 | ボタン |
---|---|---|
vbOK | 1 | OK |
vbCancel | 2 | キャンセル |
vbAbort | 3 | 中止 |
vbRetry | 4 | 再試行 |
vbIgnore | 5 | 無視 |
vbYes | 6 | はい |
vbNo | 7 | いいえ |
右上の「×」ボタンをクリックした場合は、「キャンセル」ボタンと同等の整数値「2」が取得されます。
「キャンセル」ボタンがない場合は、「OK」ボタンと同等の整数値「1」を取得します。
MsgBox と Popup の違い
MsgBox の特徴
- MsgBox は 組み込み関数(Built-in Function)
- Windows Script Host (WSH)、Internet Explorer(IE)、Microsoft Office VBA などで使用可能
- スクリプトの実行をブロック(停止) する
- ボタンの種類を指定でき、ユーザーの選択によって値を返す
WScript.Shell.Popup の特徴
- WScript.Shell.Popup は WScript.Shellオブジェクトのメソッド
- CreateObject(“WScript.Shell”) を使ってオブジェクトを作成する必要がある
- タイムアウト機能(指定時間後に自動で閉じる) がある
- MsgBox と同じようにボタンを指定できる
- スクリプトの実行をブロックしないオプションがある
object.Popup message, [timeout], [title], [type]
- message :表示するメッセージ(必須)
- timeout :ダイアログを自動的に閉じるまでの秒数(省略可)
- title :ダイアログのタイトル(省略可)
- type :ボタンの種類やアイコン(省略可)
Dim shell, result
Set shell = CreateObject("WScript.Shell")
result = shell.Popup("処理を続行しますか?", 10, "確認", vbYesNo + vbQuestion)
If result = vbYes Then
shell.Popup "処理を続行します。", 3, "通知", vbInformation
Else
shell.Popup "処理を中止します。", 3, "通知", vbExclamation
End If
- timeout = 10 を指定 → 10秒後に自動で閉じる
- メッセージが長すぎる場合、自動で改行される
- MsgBox より 処理の流れをブロックしにくい
MsgBox と Popup の違いの比較表
項目 | MsgBox | WScript.Shell.Popup |
---|---|---|
基本的な使い方 | 組み込み関数 | WScript.Shell オブジェクトが必要 |
スクリプトのブロック | スクリプトの実行を停止 | オプションでタイムアウト可能 |
タイムアウト(自動で閉じる) | ❌ なし | ✅ あり(秒数指定) |
タイトルの指定 | ✅ 可能 | ✅ 可能 |
ボタンの種類 | ✅ 可能(vbYesNo など) | ✅ 可能(vbYesNo など) |
戻り値の扱い | ✅ 可能 | ✅ 可能 |
アイコンの表示 | ✅ 可能 | ✅ 可能 |
テキストの自動改行 | ❌ なし(自動では改行されない) | ✅ あり(長いと自動で改行) |
適用環境 | Windows Script Host, VBA, IE | Windows Script Host |
MsgBox と Popup のどちらを使うべきか?
- シンプルなダイアログ を作りたいとき
- スクリプトの処理を一時停止したい(ユーザーがボタンを押すまで待つ)
- タイムアウト機能(自動で閉じる)を使いたい
- スクリプトの流れを止めたくない
- 長いメッセージを自動で改行して表示したい
演習問題
以下の演習問題を通じて、メッセージボックスの使用方法を復習しましょう。
演習1:基本的なメッセージボックスの作成
「プログラムが正常に実行されました」というメッセージを表示するメッセージボックスを作成してください。
演習1 解答例
MsgBox "プログラムが正常に実行されました"
演習2:ユーザーの入力に応じた処理の分岐
ユーザーに「データを保存しますか?」と尋ね、ユーザーが「はい」と答えた場合は「データを保存しました」というメッセージを表示し、「いいえ」と答えた場合は「保存をキャンセルしました」というメッセージを表示するスクリプトを作成してください。
演習2 解答例
Dim result
result = MsgBox("データを保存しますか?", vbYesNo, "保存確認")
If result = vbYes Then
MsgBox "データを保存しました"
Else
MsgBox "保存をキャンセルしました"
End If
演習3:カスタマイズされたメッセージボックスの作成
アイコンとデフォルトボタンをカスタマイズしたメッセージボックスを作成し、「システムを再起動しますか?」と尋ねるスクリプトを作成してください。
演習3 解答例
MsgBox "システムを再起動しますか?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "再起動確認"
まとめ
VBScriptのMsgBox関数を活用することで、メッセージボックスを効果的に利用できます。
メッセージの種類や表示するボタンを選択し、ユーザーとの対話や情報の提示、デバッグを行いましょう。
タイムアウト機能が必要なら Popup が便利 ですが、単純なダイアログなら MsgBox の方がシンプル です。
どちらもボタンの種類や戻り値の扱いは似ていますが、処理の流れを考えて選ぶと良い でしょう!