Excel VBAのメッセージボックスの使い方をお探しですね。

広告

Excel VBAのMsgBoxを使いこなそう!基本から分岐処理まで丁寧に解説

Excel VBAでマクロを作っていると、「処理が終わったよ!」とお知らせしたり、「本当に実行していいですか?」と確認を取ったりする場面がよく出てきます。

そんなときに活躍するのが**MsgBox(メッセージボックス)**です。

MsgBoxは、ただメッセージを表示するだけじゃありません。

改行を入れて読みやすくしたり、タイトルやアイコンで雰囲気を変えたり、「はい/いいえ」ボタンで処理を分けたりと、いろんな使い方ができます。

使いこなせるようになると、マクロがグッと使いやすくなりますよ。

この記事では、初心者の方でも実務で使えるように、MsgBoxの基本から分岐処理の書き方まで、順番に説明していきます。

MsgBoxって何?まずは基本の使い方から

MsgBoxは、Excel VBAで画面にメッセージを表示するための機能です。

たとえば「処理が完了しました」とか「データを削除してもいいですか?」といった通知や確認を、ポップアップのダイアログで表示できます。

マクロって、実行すると裏側でどんどん処理が進んでいくので、使っている人からすると「今、何が起きてるの?」って分かりにくいことがあるんですよね。

MsgBoxをうまく使えば、処理を始める前の確認、エラーが起きたときの案内、完了のお知らせなどを、分かりやすく伝えられるようになります。

MsgBoxの基本的な書き方は、こんな感じです。

“`vba
MsgBox prompt, buttons, title
“`

– **prompt**:表示するメッセージ(必須)
– **buttons**:表示するボタンやアイコンの種類(省略OK)
– **title**:メッセージボックスの上に出るタイトル(省略OK)

一番シンプルな形だと、こう書きます。

“`vba
Sub SampleMsgBox()
MsgBox “処理が完了しました。


End Sub
“`

これを実行すると、「処理が完了しました。

」というメッセージと[OK]ボタンだけが表示されます。

VBAを学び始めたばかりなら、まずこの形を覚えておくといいですよ。

メッセージの文字列は、ダブルクォーテーション(`”`)で囲みます。

セルの値や変数を表示したいときは、`&`でつなげます。

“`vba
Sub SampleValue()
Dim userName As String
userName = “田中”

MsgBox userName & “さんの処理が完了しました。


End Sub
“`

こうすると、「田中さんの処理が完了しました。

」って表示されます。

実際の仕事では、「処理件数は10件です」とか「対象シートは売上一覧です」みたいに、変数の中身を含めて表示することが多いので、`&`での連結も一緒に覚えておくと便利です。

改行・タイトル・アイコンで見やすく、分かりやすく

メッセージが長くなったら、改行を入れると読みやすくなります。

MsgBoxで改行するには、**vbCrLf**という改行コードを使います。

これも`&`でつなぎます。

“`vba
Sub SampleLineBreak()
MsgBox “データの更新を開始します。

” & vbCrLf & _
“実行してもよろしいですか?”
End Sub
“`

こう書くと、1行目に「データの更新を開始します。

」、2行目に「実行してもよろしいですか?」と表示されます。

情報を1行に詰め込みすぎると見落としやすいので、確認メッセージでは「何をするのか」と「確認内容」を分けて書くのがおすすめです。

タイトルをつけてみよう

タイトルを設定したいときは、3番目の引数に文字列を指定します。

タイトルがあると、そのメッセージが「確認」なのか「完了」なのか「エラー」なのかが、パッと見て分かりやすくなります。

“`vba
Sub SampleTitle()
MsgBox “保存が完了しました。

“, vbInformation, “完了通知”
End Sub
“`

この例では、メッセージボックスの上部に「完了通知」と表示されます。

2番目の引数に書いた`vbInformation`は、情報を表すアイコンを表示するための指定です。

アイコンで雰囲気を変える

MsgBoxでは、用途に応じたアイコンも表示できます。

代表的なものはこちら。

– **vbInformation**:情報マーク(ℹ️みたいなやつ)
– **vbExclamation**:注意マーク(⚠️みたいなやつ)
– **vbQuestion**:疑問符マーク(❓みたいなやつ)
– **vbCritical**:エラーマーク(❌みたいなやつ)

“`vba
Sub SampleIcon()
MsgBox “入力内容を確認してください。

“, vbExclamation, “入力エラー”
End Sub
“`

アイコンは必須じゃないけど、メッセージの重要度を視覚的に伝えられるので便利です。

普通の完了通知なら`vbInformation`、確認なら`vbQuestion`、注意喚起なら`vbExclamation`、重大なエラーなら`vbCritical`のように使い分けると、マクロ全体が分かりやすくなります。

ボタンの種類を変えて「はい/いいえ」を表示する

MsgBoxは初期状態だと[OK]ボタンだけですが、2番目の引数に指定を追加すると、複数のボタンを表示できます。

たとえば、実行前にユーザーに確認したいときは[はい][いいえ]を表示する`vbYesNo`を使います。

よく使うボタンの指定はこんな感じです。

| 定数 | 表示されるボタン |
|—|—|
| vbOKOnly | [OK] |
| vbOKCancel | [OK][キャンセル] |
| vbYesNo | [はい][いいえ] |
| vbYesNoCancel | [はい][いいえ][キャンセル] |
| vbRetryCancel | [再試行][キャンセル] |

[はい][いいえ]ボタンを表示する場合は、こう書きます。

“`vba
Sub SampleYesNo()
MsgBox “データを削除してもよろしいですか?”, vbYesNo, “確認”
End Sub
“`

ただし、このままだとボタンを表示するだけで、押されたボタンに応じた処理はまだ書いていません。

[はい]を押しても[いいえ]を押しても、次の処理が分かれていなければ意味がないので、実際にはMsgBoxの**戻り値**を使って分岐させます。

ボタンとアイコンを組み合わせる

ボタンとアイコンは、`+`で組み合わせて指定できます。

たとえば、[はい][いいえ]を表示して、疑問符アイコンも付けたいときはこう書きます。

“`vba
Sub SampleButtonAndIcon()
MsgBox “この処理を実行しますか?”, vbYesNo + vbQuestion, “実行確認”
End Sub
“`

数値で`4 + 32`みたいに書くこともできますが、コードの意味が分かりにくくなります。

VBAでは定数名を使うことで、「どのボタンを表示してるか」「どのアイコンを使ってるか」が一目で分かります。

後から見直すときや、別の人が読むときのことを考えても、`vbYesNo + vbQuestion`のように定数で書くのがおすすめです。

「はい/いいえ」で処理を分岐させる実践例

MsgBoxで「はい/いいえ」の分岐を行うには、ユーザーが押したボタンの結果を変数に受け取って、If文やSelect Case文で判定します。

戻り値を受け取るときは、MsgBoxの引数全体を**かっこで囲む**のがポイントです。

単に表示するだけなら`MsgBox “メッセージ”`でいいんですが、戻り値を変数に代入する場合は`result = MsgBox(“メッセージ”, vbYesNo)`のように書きます。

“`vba
Sub SampleBranchYesNo()
Dim result As VbMsgBoxResult

result = MsgBox(“データを削除してもよろしいですか?”, _
vbYesNo + vbQuestion, _
“削除確認”)

If result = vbYes Then
MsgBox “データを削除しました。

“, vbInformation, “完了”
Else
MsgBox “削除を中止しました。

“, vbExclamation, “中止”
End If
End Sub
“`

この例では、[はい]が押されたら削除処理を実行し、[いいえ]が押されたら中止メッセージを表示します。

実際のマクロでは、`If result = vbYes Then`の中に削除処理や更新処理を書きます。

大事なのは、**ユーザーの選択を必ず判定してから危険な処理を実行すること**です。

データ削除、上書き保存、一括更新みたいな元に戻しにくい処理では、確認用のMsgBoxを入れることで誤操作を防げます。

戻り値の定数

MsgBoxの戻り値には、ボタンごとに定数が用意されています。

– [OK]:`vbOK`
– [キャンセル]:`vbCancel`
– [はい]:`vbYes`
– [いいえ]:`vbNo`

内部的には数値も割り当てられていますが、数値の`6`や`7`で比較するより、`vbYes`や`vbNo`で比較したほうが読みやすくて安全です。

選択肢が3つあるときはSelect Case文で

選択肢が3つ以上ある場合は、If文よりも**Select Case文**のほうが整理しやすくなります。

たとえば、[はい][いいえ][キャンセル]を表示して、それぞれ別の処理を行う場合はこう書けます。

“`vba
Sub SampleSelectCase()
Dim result As VbMsgBoxResult

result = MsgBox(“集計結果を保存しますか?”, _
vbYesNoCancel + vbQuestion, _
“保存確認”)

Select Case result
Case vbYes
MsgBox “保存しました。

“, vbInformation, “完了”

Case vbNo
MsgBox “保存せずに終了します。

“, vbExclamation, “未保存”

Case vbCancel
MsgBox “操作をキャンセルしました。

“, vbInformation, “キャンセル”
End Select
End Sub
“`

`vbYesNoCancel`のようにキャンセルボタンを含む場合、右上の[×]ボタンやEscキーで閉じたときも、基本的に`vbCancel`として扱われます。

なので、キャンセル時の処理を用意しておくと、ユーザーが明示的にボタンを押さなかった場合にも対応できます。

誤操作を防ぐ「標準ボタン」の指定

誤操作を防ぐために、**標準ボタンの指定**も有効です。

標準ボタンとは、MsgBoxが表示されたときに最初から選択されていて、Enterキーで押されるボタンのことです。

危険な処理で[はい]が標準になっていると、ユーザーがうっかりEnterキーを押しただけで処理が実行されちゃう可能性があります。

そんなときは、`vbDefaultButton2`を組み合わせて、[いいえ]を標準ボタンにすると安全性が高まります。

“`vba
Sub SampleDefaultButton()
Dim result As VbMsgBoxResult

result = MsgBox(“すべてのデータを削除します。

実行しますか?”, _
vbYesNo + vbCritical + vbDefaultButton2, _
“重要な確認”)

If result = vbYes Then
MsgBox “削除を実行しました。

“, vbInformation, “完了”
Else
MsgBox “削除を中止しました。

“, vbInformation, “中止”
End If
End Sub
“`

まとめ:MsgBoxを使いこなして快適なマクロを作ろう

MsgBoxは、単なる通知だけじゃなくて、ユーザーの意思確認と処理分岐を組み合わせて使うことで、真価を発揮します。

– **改行**で読みやすくして
– **タイトルとアイコン**で目的を明確にして
– **戻り値**で安全に分岐する

この流れを押さえておけば、Excel VBAのマクロはもっと実用的で使いやすいものになります。

MsgBoxを使いこなせるようになると、処理の途中経過を知らせるデバッグ用途にも、実際の業務で使う確認ダイアログにも応用できますよ。

ぜひ、いろいろ試してみてくださいね!

広告