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を使いこなせるようになると、処理の途中経過を知らせるデバッグ用途にも、実際の業務で使う確認ダイアログにも応用できますよ。
ぜひ、いろいろ試してみてくださいね!
広告
