マクロからユーザーへの「対話」を設計する「MsgBox」

Level5 VBA・マクロ

「マクロが完了したらメッセージを表示させたい」
「インプットボックスの内容を修正させたい」
など、マクロ側からユーザーへメッセージを表示させたいことがあります。

そこでマクロからの情報伝達を担う 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. ボタンの種類と戻り値

ボタンの種類 (引数)戻り値 (変数に格納)用途
vbYesNovbYes または vbNo処理の実行確認などに利用
vbOKCancelvbOK または 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)」です。
マクロのコードを機能ごとに分割し、管理しやすい構造にする方法を学びましょう!

コメント

タイトルとURLをコピーしました