VBA – 「はい / いいえ」メッセージボックス(MsgBox)
In this Article
このチュートリアルでは、VBAのMsgBox関数を使用して、ユーザーにメッセージボックスを表示する方法(「はい/いいえ」メッセージボックスを含む)を説明します。また、InputBoxesの記事も併せてお読みください。
VBAのMsgBox関数
VBAでは、シンプルなMsgBoxを簡単に表示することができます。
MsgBox "これはメッセージボックスです"
しかし、単純なOKのメッセージボックスを表示するだけでなく、もっといろいろなことができます。具体的に説明する前に、複雑な例を簡単に見てみましょう。
VBAのYesNoメッセージボックス
以下では、メッセージボックスを作成します。
- タイトル “タイトル1” とプロンプト “テキスト1”
- クエスチョンマークアイコン
- 単純な “OK ” ではなく、”はい/いいえ” を選択可能
- デフォルトのボタン = “いいえ”
Dim answer As Integer
answer = MsgBox("テキスト1", vbQuestion + vbYesNo + vbDefaultButton2, "タイトル1")
メッセージボックスは、ユーザーの選択に応じて、vbYesまたはvbNoを返します。そして、その選択に基づいて異なるアクションを実行することができます。
If answer = vbYes Then
MsgBox "はい"
Else
MsgBox "いいえ"
End If
次のセクションでは、メッセージボックスを作成する際に利用できるすべてのオプションについて説明します。次に、MsgBox関数の構文を紹介し、最後に他のメッセージボックスの例について説明します。
VBAメッセージボックスのオプション
下の画像を見てください。メッセージボックスを作成する際に利用できるオプションが(ほぼ)すべて表示されています。アイコンやボタンに注目してください。
これはAutoMacroのプレミアムVBAアドインの「MessageBox Builder」の画面です。MessageBox Builderを使うと、メッセージボックスを素早くデザインして、コードをモジュールに挿入することができます。また、他の多くのコードビルダー、広範なVBAコードライブラリ、およびコーディングツールが含まれています。VBA開発者にとっては必需品です。
MsgBox関数の構文
MsgBox( prompt [, buttons] [, title] [, helpfile, context] )
prompt (必須) – メッセージボックスに表示するテキストです。
buttons – 表示するボタンを選択します。省略された場合は、「OKonly」となります。ここでは、表示するアイコンとデフォルトのボタンも指定できます。
title – メッセージボックスの上部に表示されるタイトルです。省略した場合は、現在のアプリケーションの名前が表示されます(例:Microsoft Excel)。
helpfile – ユーザーが「ヘルプ」ボタンをクリックしたときにアクセスできるヘルプファイルを指定します。指定する場合は、コンテキスト(以下)も追加する必要があります。
context – 該当するヘルプトピックに割り当てられたヘルプコンテキスト番号を表す数値式です。
helpfileとcontextの引数は、無視しても構わないでしょう。それらが使われているのを見たことがありません。
メッセージボックスのタイトルとプロンプトをカスタマイズする
MsgBox関数では、タイトルやプロンプトメッセージを次のようにカスタマイズすることができます。
Msgbox "プロンプト",, "タイトル"
例を見てみましょう。
Sub MsgBoxPromptTitle()
MsgBox "ステップ1完了。OKをクリックしてステップ2を実行します。",, "ステップ1/5"
End Sub
重要! テキストを引用符で囲むことを忘れないようにしてください。
メッセージボックスの改行
vbNewLineを使って、メッセージボックスのプロンプトに改行を加えることもできます。
Sub MsgBoxPromptTitle_NewLine()
MsgBox "ステップ1完了。" & vbNewLine & "OKをクリックしてステップ2を実行します。", , "ステップ1/5"
End Sub
テキストを結合するために&記号を使用していることに注意してください。テキストでの&の使い方や、その他の改行方法については、テキストの結合に関する記事で詳しく説明しています。
MsgBoxのアイコン
VBAでは、メッセージボックスにあらかじめ用意された4つのアイコンのいずれかを追加することができます。
定数 | アイコン |
---|---|
vbInformation | |
vbCritical | |
vbQuestion | |
vbExclamation |
Icon定数は、buttonの引数の中に入れる必要があります。
Sub MsgBoxQuestionIcon()
MsgBox "質問アイコンの例", vbQuestion
End Sub
これにより、質問アイコン付きのデフォルトの「OK」メッセージボックスが生成されます。
入力すると、VBAエディタに利用可能なオプションが表示されることに注目してください。
アイコンやボタンの正確な構文や名称を覚えておく必要がないので便利です。 それでは、各メッセージボックスのアイコンのデモを行います。
MsgBox アイコン – 情報
Sub MsgBoxInformationIcon()
MsgBox "情報アイコンの例", vbInformation
End Sub
MsgBox アイコン – クリティカル
Sub MsgBoxCriticalIcon()
MsgBox "クリティカルアイコンの例", vbCritical
End Sub
MsgBox アイコン – 質問
Sub MsgBoxQuestionIcon()
MsgBox "疑問符アイコンの例", vbQuestion
End Sub
MsgBox アイコン – 感嘆符
Sub MsgBoxExclamationIcon()
MsgBox "感嘆符アイコンの例", vbExclamation
End Sub
以下では、異なるボタンレイアウトのメッセージボックスを生成することについて説明します。ボタンレイアウトの指定とアイコンの種類の指定を同時に行う場合は、ボタンレイアウトの後に「+」でアイコンの種類を追加します。
Sub MsgBoxQuestionIcon()
MsgBox "続けますか?", vbOKCancel + vbQuestion
End Sub
MsgBox 変数
これまで、主にデフォルトの「OK」メッセージボックスを使って作業してきました。OK」メッセージボックスには、1つのオプションしかありません。OK’ を押すと、コードが続行されます。 しかし、他のボタンのグループ化を指定することもできます。OK / キャンセル、はい / いいえなどです。 その場合、どのボタンが押されたかによって、異なる動作をさせたいと思うでしょう。 例を見てみましょう。 以下は、今回生成するメッセージボックスです。
これがコード全体です(次に分解していきます)。
Sub MsgBoxVariable()
Dim answer As Integer
answer = MsgBox("続けますか?", vbQuestion + vbYesNo)
If answer = vbYes Then
MsgBox "はい"
Else
MsgBox "いいえ"
End If
End Sub
まず、メッセージボックスの出力を整数型変数に代入します。
Dim answer As Integer
answer = MsgBox("続けますか?", vbQuestion + vbYesNo)
次に、どのボタンが押されたかに応じて、If-Elseで何をするかを決定します。
If answer = vbYes Then
MsgBox "はい"
Else
MsgBox "いいえ"
End If
MsgBox関数は整数値(1~7)を返すので、変数を整数型として定義しています。 しかし、整数値を使う代わりに、定数(例:vbOK、vbCancelなど)を使うことができます。 この表を見て、すべての選択肢を確認してください。
ボタン | 定数 | 値 |
---|---|---|
OK | vbOK | 1 |
キャンセル | vbCancel | 2 |
中止 | vbAbort | 3 |
リトライ | vbRetry | 4 |
無視する | vbIgnore | 5 |
はい | vbYes | 6 |
いいえ | vbNo | 7 |
それでは、各ボタンを見てみましょう。
OKメッセージボックス – vbOKOnly
VBAの標準的なメッセージボックスです。
Sub MsgBox_OKOnly()
Dim answer As Integer
answer = MsgBox("vbOKOnlyの例", vbOKOnly)
End Sub
OK/キャンセル メッセージボックス – vbOKCancel
Sub MsgBox_OKCancel()
Dim answer As Integer
answer = MsgBox("vbOKCancelの例", vbOKCancel)
If answer = vbOK Then
MsgBox "OK"
Else
MsgBox "キャンセル"
End If
End Sub
はい/いいえ メッセージボックス – vbYesNo
Sub MsgBox_YesNo()
Dim answer As Integer
answer = MsgBox("vbYesNoの例", vbYesNo)
If answer = vbYes Then
MsgBox "はい"
Else
MsgBox "いいえ"
End If
End Sub
はい/いいえ/キャンセル メッセージボックス – vbYesNoCancel
Sub MsgBox_YesNoCancel()
Dim answer As Integer
answer = MsgBox("vbYesNoCancelの例", vbYesNoCancel)
If answer = vbYes Then
MsgBox "はい"
ElseIf answer = vbNo Then.
MsgBox "いいえ"
Else
MsgBox "キャンセル"
End If
End Sub
中止/再試行/無視 メッセージボックス – vbAbortRetryIgnore
Sub MsgBox_AbortRetryIgnore()
Dim answer As Integer
answer = MsgBox("vbAbortRetryIgnoreの例", vbAbortRetryIgnore)
If answer = vbAbort Then
MsgBox "中止"
ElseIf answer = vbRetry Then
MsgBox "再試行"
Else
MsgBox "無視"
End If
End Sub
リトライ/キャンセル メッセージボックス – vbRetryCancel
Sub MsgBox_RetryCancel()
Dim answer As Integer
answer = MsgBox("vbRetryCancelの例", vbRetryCancel)
If answer = vbRetry Then
MsgBox "再試行"
Else
MsgBox "キャンセル"
End If
End Sub
VBA メッセージボックスの使用例
マクロを実行する前にメッセージボックスで確認する
このコードは、マクロを呼び出す前に、はい/いいえメッセージボックスを表示します。「はい」がクリックされた場合はマクロが実行され、「いいえ」がクリックされた場合、マクロは実行されません。
Sub Msgbox_BeforeRunning()
Dim answer As Integer
answer = MsgBox("Macro1を実行しますか?", vbQuestion + vbYesNo)
If answer = vbYes Then Call Macro1
End Sub
はい / いいえ メッセージボックス – Exit Sub
ここでは、マクロの実行を継続するかどうかをユーザーに確認します。「いいえ」がクリックされた場合、コードはSubプロシージャを終了し、そうでない場合はプロシージャが続行されます。
Sub Msgbox_BeforeRunning()
Dim answer As Integer
answer = MsgBox("続けますか?", vbQuestion + vbYesNo)
If answer = vbNo Then Exit Sub
'任意の処理
End
Access VBAのメッセージボックス
これまでの例はすべて、Access VBAでもExcel VBAとまったく同じように動作します。