メッセージボックス MsgBoxの使い方を最速理解で説明します。
気軽に使えるUIです。メッセージ表示と利用者の応答を求める2つのタイプがあります。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAでユーザーフォームを使わなくても、簡単なユーザーとのやり取りならメッセージボックスでも可能です。
今回は、この「ユーザーへのメッセージや選択肢を提示する」ユーザーフォームについての説明をします。
コンテンツ
メッセージボックス MsgBoxの使い方
![vbamsgboxp015](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgboxp015.jpg)
メッセージボックスはVBAプログラムを処理した結果を「情報としてユーザーに知らせる」ウインドウであり、
また、これから進めるプログラムの進行をどうするか「ユーザーに判断してもらう」という関数になっています。
「情報をユーザーに知らせる」という意味では、ユーザーは「はいそうですか。」となりますが、
「ユーザーに判断してもらう」という事では、ユーザーは「わかりました」、「嫌です」、「やめます。」などの返答が出来るということになります。
また、裏技的な考え方にもなりますが、メッセージボックスが表示されている間は、
VBAコードの進行が一時停止しています。
何らかのボタンが押されることで再開するわけですが、”ポーズスイッチ”的に利用することも出来ます。
(もっとも、そのメッセージボックスが動いているエクセルBOOKは再開されるまでは操作不能になりますが)
「情報をユーザーに知らせる」ための MsgBoxの使い方
シンプルデザインな表示方法
この使い方でのメッセージボックス MsgBoxのサンプルコードはこのようになります。
Sub メッセージボックスA01()
MsgBox "ありがとうございました。"
End Sub
![vbamsgbox001](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox001.jpg)
超簡単に出来てしまいました。実用的にはこれで何も問題ないと思います。
チェック
表示を見てみると、
タイトルは「Microsoft Excel」、設置ボタンは「OK」が無指示で付加されています。
注意をひくデザインな表示方法
アイコンを付ける
Sub メッセージボックスA02()
MsgBox "ありがとうございました。", vbCritical
End Sub
![vbamsgbox002](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox002.jpg)
Sub メッセージボックスA03()
MsgBox "ありがとうございました。", vbQuestion
End Sub
![vbamsgbox003](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox003.jpg)
Sub メッセージボックスA04()
MsgBox "ありがとうございました。", vbExclamation
End Sub
![vbamsgbox004](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox004.jpg)
Sub メッセージボックスA05()
MsgBox "ありがとうございました。", vbInformation
End Sub
![vbamsgbox005](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox005.jpg)
タイトルをつけて何のメッセージかをハッキリさせる
タイトルを付ければ、より何のメッセージか分かり易くなります。
Sub メッセージボックスA06()
MsgBox "ありがとうございました。", vbInformation, "入力完了です"
End Sub
![vbamsgbox006](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox006.jpg)
「ユーザーに判断してもらう」ためのMsgBoxの使い方
「ユーザーに判断を委ねる」メッセージボックスですので、ユーザーが返答するボタンも何種類かあります。
メッセージボックスに表示できるボタンは、予め組み合わせが決まっていいます。
ユーザーから回答を得るので、その「回答」を変数化し値として取得します。
今回は回答を「変数 MBtn 」としています。「=」でMsgBox関数式とつなぎます。
メッセージが文章的に長くなる場合は途中で「& vbCrLf &」を挟むと、その場所で改行されます。
アイコンも表示する場合は、「ボタン定数+アイコン定数」とします。
基本の表示スタイル
「OKボタン」1つのみの表示・・・「vbOKOnly」
Sub メッセージボックスB01()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", vbOKOnly, "入力問合せ")
End Sub
![vbamsgbox007](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox007.jpg)
アイコンも表示する場合は、「vbOKOnly + vbExclamation」「ボタン定数+アイコン定数」とします。
Sub メッセージボックスB02()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", vbOKOnly + vbExclamation, _
"入力問合せ")
End Sub
![vbamsgbox008](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox008.jpg)
「OK」と「キャンセル」ボタンの表示・・・「vbOKCancel」
Sub メッセージボックスB03()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", vbOKCancel + vbExclamation, _
"入力問合せ")
End Sub
![vbamsgbox009](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox009.jpg)
「中止」「再試行」「無視」ボタンの表示・・・「vbAbortRetryIgnore」
Sub メッセージボックスB04()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", _
vbAbortRetryIgnore + vbExclamation, "入力問合せ")
End Sub
![vbamsgbox010](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox010.jpg)
「はい」「いいえ」「キャンセル」ボタンの表示・・・「vbYesNoCancel」
Sub メッセージボックスB05()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", _
vbYesNoCancel + vbExclamation, "入力問合せ")
End Sub
![vbamsgbox011](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox011.jpg)
「はい」「いいえ」ボタンの表示・・・「vbYesNo」
Sub メッセージボックスB06()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", _
vbYesNo + vbExclamation, "入力問合せ")
End Sub
![vbamsgbox012](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox012.jpg)
「再試行」「キャンセル」ボタンの表示・・・「vbRetryCancel」
Sub メッセージボックスB07()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", _
vbRetryCancel + vbExclamation, "入力問合せ")
End Sub
![vbamsgbox013](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox013.jpg)
ユーザーの回答をコードの実行に反映する方法
クリックするボタンには、戻り値として組み込み定数が割り当てられています。
例えば「OK」をクリックしたとき戻り値として「vbOK」が返されます。
ボタン | 組み込み定数 | 値 |
---|---|---|
OK | vbOK | 1 |
キャンセル | vbCancel | 2 |
中止 | vbAbort | 3 |
再試行 | vbRetry | 4 |
無視 | vbIgnore | 5 |
はい | vbYes | 6 |
いいえ | vbNo | 7 |
If条件文を使って、押されるボタン別に条件分岐を組み上げます。
「はい」ボタンでセルB2に ”はい” を入力。「いいえ」ボタンでセルB4に “いいえ” を入力。「キャンセル」ボタンでプロシージャーを抜けます。
- If条件文についてはこちらの記事も参考になります。ここに内容
![vbaifjyokeneyecatch](https://shimaydo.com/wp-content/uploads/2020/11/vbaifjyokeneyecatch-160x120.jpg)
Sub メッセージボックスB08()
Dim MBtn As Long
MBtn = MsgBox("ありがとうございました。" & vbCrLf & _
"データ入力しますか?", _
vbYesNoCancel + vbExclamation, "入力問合せ")
If MBtn = vbYes Then
Range("B2").Value = "はい"
ElseIf MBtn = vbNo Then
Range("B4").Value = "いいえ"
ElseIf MBtn = vbCancel Then
Exit Sub
End If
End Sub
![vbamsgbox014](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgbox014.jpg)
メッセージボックス MsgBox実際の使い方 まとめ
![vbamsgboxp016](https://shimaydo.com/wp-content/uploads/2020/11/vbamsgboxp016.jpg)
メッセージボックスの2つの使い方で、より使いやすいVBAプログラムを作成出来るようになります。
それ程難しくなくVBAコードに導入できたのではないでしょうか。
UIという事ではユーザーフォームという手法がメインではありますが、
このメッセージボックスとインプットボックスでも、その代用が利く場面も多くあります。
ぜひ活用をしてください。
「メッセージボックス」はエクセルVBAの対話型コード作成で、一番基本的な部分です。
コード組み立て作業中の演算結果の表示窓として使ったりもします。
これからエクセルVBAコードを自分で作っていこうとしている人であれば、
必ず使いこなせるようにしておきましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
![vbastudyeyecatch2](https://shimaydo.com/wp-content/uploads/2022/01/vbastudyeyecatch2-160x120.jpg)
今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。