MsgBox は「VBAが人間に話しかけるための吹き出し」
MsgBox は、「メッセージボックス(小さなダイアログ)」を表示するための命令です。
VBAが「ちょっと一言伝えたい」「確認したい」「結果を見せたい」ときに使う“吹き出し”だと思ってください。
超初心者のうちは、
「処理の途中経過を表示して動きを確認する」
「最後に結果をポンと見せる」
この2つができれば十分です。
一番シンプルな MsgBox:文字を表示するだけ
基本形
いちばん基本の形はこれです。
MsgBox "こんにちは"
VBSub の中で使うと、実行したときに小さなウィンドウが出て「こんにちは」と表示され、「OK」ボタンが1つだけ出ます。
Sub SampleMsgBoxBasic()
MsgBox "こんにちは、VBAの世界へようこそ"
End Sub
VBこれが MsgBox の最小形です。
まずは「文字列を表示する命令」として体に馴染ませてください。
変数の中身を表示して動きを確認する
デバッグ(動きの確認)で一番よく使うのがこれです。
Sub SampleMsgBoxVar()
Dim total As Long
total = 10 + 20
MsgBox "合計は " & total & " です。"
End Sub
VBここでは、"合計は " と total と " です。" を & でつないで、1つの文字列にしています。
MsgBox は「文字列」を1つ受け取るので、数字を表示したいときはこうやって文字列に混ぜます。
「今この変数に何が入っているのか?」を確認したくなったら、とりあえず MsgBox で出してみる――これは初心者の強い味方です。
改行を入れて、複数行のメッセージを表示する
vbCrLf で改行する
1行だと読みにくいときは、改行を入れます。
VBAでは、改行に vbCrLf を使うのが定番です。
Sub SampleMsgBoxMultiLine()
Dim name As String
Dim score As Long
name = "山田"
score = 85
MsgBox "名前: " & name & vbCrLf & _
"点数: " & score & vbCrLf & _
"おつかれさまでした。"
End Sub
VBvbCrLf が「ここで改行して」という意味です。& _ は「行を見やすく分けるための継続記号」なので、1行で書いても構いません。
メッセージを丁寧に見せたいときは、
「1行に1情報」を意識して、vbCrLf で区切ると読みやすくなります。
MsgBox の戻り値を使って「ユーザーの選択」を受け取る
ここからが少しレベルアップですが、MsgBox は「表示するだけ」ではなく、「どのボタンが押されたか」を返してくれる関数でもあります。
Yes/No で確認する MsgBox
「本当に削除していいですか?」のような確認をしたいときの典型パターンです。
Sub SampleMsgBoxYesNo()
Dim ans As VbMsgBoxResult
ans = MsgBox("本当に削除しますか?", vbYesNo + vbQuestion, "確認")
If ans = vbYes Then
MsgBox "削除します。"
Else
MsgBox "キャンセルしました。"
End If
End Sub
VBここで出てきたポイントを整理します。
第1引数:表示するメッセージ
第2引数:ボタンの種類やアイコン(ここでは vbYesNo + vbQuestion)
第3引数:タイトルバーに表示する文字列(ここでは “確認”)
MsgBox(...) の結果は、押されたボタンに応じて vbYes や vbNo などの値になります。
それを ans に受け取って、If 文で分岐しています。
超初心者のうちは、
「Yes/No で分岐できるんだな」
くらいを掴んでおけば十分です。
第2引数(ボタンやアイコン指定)のイメージ
よく使う組み合わせ
細かい一覧を全部覚える必要はありません。
まずはこの2つだけで十分です。
MsgBox "メッセージ", vbOKOnly, "タイトル" ' OKボタンだけ(省略時のデフォルト)
MsgBox "本当に実行しますか?", vbYesNo + vbQuestion, "確認" ' Yes/No+?アイコン
VBvbYesNo が「Yes と No の2つのボタン」、vbQuestion が「?のアイコン」です。+ で足し合わせて指定します。
他にも vbExclamation(!マーク)、vbCritical(×マーク)などがありますが、
「確認は Yes/No+?アイコン」だけ覚えておけば、実務ではかなり戦えます。
MsgBox を使うときに意識してほしい重要ポイント
「とりあえず MsgBox で中身を見る」癖をつける
コードを書いていて、
「この時点で、この変数には何が入っているんだろう?」
「この For の中、何回回ってるんだろう?」
と気になったら、遠慮なく MsgBox を差し込んでください。
MsgBox "i = " & i
VBこれだけで、頭の中のモヤモヤが一気に晴れます。
デバッグの最初の一歩は、難しいツールではなく「MsgBox で覗いてみる」で十分です。
本番用のコードでは「出しすぎない」
学習中は MsgBox を多用してOKですが、
実務で使うマクロでは、MsgBox が多すぎるとユーザーがうんざりします。
- 本当に確認したいところだけ Yes/No
- 結果を一言伝えるところだけ OK
というふうに、「ここぞ」という場所に絞ると、気持ちのいいマクロになります。
まとめ:MsgBox は「VBAと人間をつなぐ、いちばん手軽な窓口」
MsgBox の本質は、
「VBAが人間に何かを伝えたり、
人間の選択を受け取ったりするための、小さな窓」
です。
押さえておきたいポイントをコンパクトにまとめると、
文字列を表示するだけなら MsgBox "メッセージ"
変数の中身を確認するときは "文字列" & 変数 をつないで表示vbCrLf で改行して、複数行メッセージも書けるans = MsgBox(..., vbYesNo, ...) の形で、Yes/No の結果を受け取って分岐できる
