「マクロが完了したらメッセージを表示させたい」
「インプットボックスの内容を修正させたい」
など、マクロ側からユーザーへメッセージを表示させたいことがあります。
そこでマクロからの情報伝達を担う MsgBox(メッセージボックス)を学習しましょう。
MsgBox は、処理の完了通知やエラーの警告、そして重要な処理を行う前の「本当に実行しますか?」といったYes/Noの確認など、マクロの信頼性を高める上で欠かせない機能です。

僕はエラー修正のときに1番使ったなぁ。
マクロのこの段階で
「この変数は何が入力されているか」
「ちゃんと計算されているか」
「データ型は何か」
などマクロの一連の流れで変化する値を
確認できるんだ。

MsgBoxの基本構造とアイコンの種類
MsgBox は、表示するメッセージ、ボタンの種類、アイコンの種類、そしてタイトルの4つの要素を組み合わせて、目的に合ったダイアログボックスを作成します。
MsgBoxの基本構造(出力専用時)
MsgBox プロンプト, ボタンとアイコンの種類, タイトル

メッセージボックスはプロンプトだけでも動くよ!
僕は細部までこだわらなくていい時は、
『MsgBox ”処理完了”』みたいな感じだったよ。
メッセージボックスは伝えたいことが
伝われば十分!

| 引数名 | 役割 | 設定値(例) |
| プロンプト | メッセージ文 | “処理が完了しました” |
| ボタンと アイコン | 組み合わせ | vbOKOnly + vbInformation |
| タイトル | ウィンドウ名 | “レポートツール” |
1. アイコンの主な種類(視覚的な伝達)
アイコンはメッセージの重要度や目的を視覚的に伝える役割があります。
| コード | アイコン | 用途 |
vbCritical | 停止マーク(❌) | 重大なエラーや、実行してはならない警告 |
vbQuestion | 疑問符(❓) | Yes/Noなどの選択を促す場合 |
vbExclamation | 警告マーク(!) | 軽度な警告や注意を促す場合 |
vbInformation | 情報マーク(i) | 処理完了などの情報を通知する場合 |

覚えなくていいし
メッセージボックスの細部まで気にする際に利用して!
【実例:完了メッセージを表示する】
Sub 完了を通知する()
' MsgBoxのメソッドを実行する
MsgBox "データの転記処理が完了しました。", vbInformation, "処理完了"
End Sub


このコードは
「データの転記処理が完了しました」という文章を
情報アイコン付きの「処理完了」タイトルで表示
って意味だよ!
コードとメッセージ、2種類の改行テクニック
1. コードを複数行に分ける「行の継続文字 (_)」
VBAのコードが長くなったときに、半角スペースとアンダースコア ( _) を使うと、
コードを次の行へ続けて記述でき、視認性が向上します。
' 【Before】 長くて見づらい
result = MsgBox("この処理は元に戻せません。", vbYesNo + vbCritical, "最終確認")
' 【After】 引数ごとに改行し、見やすい
result = MsgBox("この処理は元に戻せません。", _
vbYesNo + vbCritical, _
"最終確認")


メッセージボックスに限らず
コードの1行が長すぎると読みにくいんだ。
だからVBAがページからはみ出ないように
改行を意識しよう!
2. メッセージの内容を改行するコード「vbCrLf」
メッセージボックス内に表示する文章を改行するには、vbCrLf という特殊なコードを使います。メッセージの文字列を & (結合演算子) で繋いで挿入します。
【実例:改行を使って複数の情報を表示する】
VBA
Sub 改行付きメッセージ()
Dim reportFile As String
reportFile = "売上集計_東京支店.xlsx"
' メッセージを「&」で繋ぎ、間に改行コードを挟む
MsgBox "処理が完了しました。" & vbCrLf & vbCrLf & _
"ファイル名:" & reportFile & vbCrLf & _
"確認をお願いします。", _
vbInformation, _
"レポート作成結果"
End Sub


改行にも2種類あるよ!
・「 _」:VBAの改行
・「vbCrLf」:表示する文章の改行
「vbCrLf」は文章の改行だから
当然、文字列と文字列の間に設置するんだ。
つまり文字列を結合するので
必ず「&」と使うと覚えておこう。
マクロの判断力強化:Yes/Noを尋ねる
MsgBox の最も強力な機能は、ユーザーがどのボタンを押したかという応答を
マクロ側で受け取って、その後の処理を分岐できることです。
1. ボタンの種類と戻り値
| ボタンの種類 (引数) | 戻り値 (変数に格納) | 用途 |
vbYesNo | vbYes または vbNo | 処理の実行確認などに利用 |
vbOKCancel | vbOK または vbCancel | ファイルの上書き確認などに利用 |

ユーザーのアクションに応じて
マクロを分岐できるよ!
IF文を利用すればいいんだ。
2. Yes/Noで処理を分岐させる実例
重要な処理の前に「実行しますか?」と尋ね、ユーザーがYesを押した場合のみ次の処理に進むようにします。
Sub 確認後に実行する()
Dim result As VbMsgBoxResult ' MsgBoxの戻り値を格納する変数
' 1. ユーザーにYes/Noで質問し、結果をresult変数に格納(vbQuestionアイコンを使用)
result = MsgBox("対象ファイルを開きますか?", _
vbYesNo + vbQuestion, _
"確認")
' 2. If文で結果を判定し、処理を分岐させる
If result = vbYes Then
' はい(vbYes)が押された場合の処理
Call ファイルを開くマクロ
MsgBox "処理が完了しました。", vbInformation
Else
' いいえ(vbNo)が押された場合の処理
MsgBox "処理を中止しました。", vbExclamation
End If
End Sub


このコードを理解するにはメッセージボックスだけでなく
IF文の知識も必要だよ!
今回のクエストを終えて
MsgBoxはマクロからユーザーへメッセージを伝えるための機能。- コードを複数行に分けるには、行の継続文字
_(半角スペースとアンダースコア) を使う。 - メッセージの内容を改行するには、改行コード
vbCrLfを&で繋いで挿入する。 - アイコンやボタンは
+で組み合わせて指定する。 - ユーザーの応答(ボタン)を
vbYesやvbNoなどの戻り値として変数に受け取りIf文で処理を分岐させることができる。
これで、マクロはユーザーと双方向のコミュニケーションを取る能力を手に入れました。
次回は、「プロシージャの分離と引数の利用(Call)」です。
マクロのコードを機能ごとに分割し、管理しやすい構造にする方法を学びましょう!





コメント