【メッセージボックスが丸わかり】 MsgBox関数でメッセージの表示から条件分岐まで解説

MsgBox関数でメッセージの表示から条件分岐まで解説

「メッセージボックス」って簡単に表示できるの?

こんなメッセージボックスが出せれば面白いですよね。

VBA初心者の方でも簡単なコードでメッセージボックスが表示できます。

そして、応用すると注意喚起ができたり、選択に応じて処理が変えられたりと多くのことができるようになります。

簡単かつ応用の効くメッセージボックスについて解説してきます。

こんな方におすすめ

・メッセージボックスって何?と思っている方

・メッセージボックスを簡単なコードで使いたい方

・メッセージボックスのボタン選択に応じて処理を変えたい方(Ifとmsgboxの併用)

結論

・メッセージボックスとは操作する人にお知らせや注意をしたいとき、簡単にメッセージが表示できるボックスです。また、ボタン選択に応じて処理を変えることもできます。

・ 下記のコードだけでメッセージを表示させることができます。もちろん細かな設定もできるので本文を参照してみてください。

Sub message

MsgBox "メッセージ"

End Sub

【MsgBox関数とIf文】ボタンの選択に応じて処理を変更させることもできます。

Sub message()

Dim result

result = MsgBox("パカジブログは役立ちましたか?", vbOKCancel)

If result = vbOK Then
    
    MsgBox "ありがとうございます"
    
ElseIf result = vbCancel Then

    MsgBox "もっと頑張ります!!"

End If

End Sub

メッセージボックスって何?

Excelを使っていると、操作する人にメッセージの表示や注意をしたいときがありますよね。

そんな時、簡単に使えるのがMsgBox関数です。

このように、どんなメッセージでも表示させることができます。

また、タイトルやメッセージ、YesボタンやNoボタンなどの変更も簡単にできます。

MsgBox関数でメッセージのみ表示

メッセージのみ表示させるときは下記のコードで書けば簡単に表示できます。

Sub message

MsgBox "メッセージ"

End Sub

MsgBox関数の使い方

メッセージボックスを表示させる時の引数を画像で説明
メッセージボックスを表示させるためのMsgBox関数の使い方

※正確にはMsgBox (prompt, [ buttons, ] [ title, ] [ helpfilecontext ])ですが、第4引数[helpfile]・第5引数[context]はヘルプボタンを使うときに必要で難易度も高いので、ビギナーの方は第3引数までで問題ありません。

prompt引数:メッセージを表示

メッセージを表示させるには、prompt引数のところに書きたい文字列を”(ダブルクォーテション)で囲むだけです。

また、変数をメッセージに入れることもできます。

Sub message()

Dim box

box = "パカジブログ"

MsgBox box & "へようこそ"

End Sub

メッセージの改行が必要なときはメッセージの間に[& vbCrLf &]を使用すると可能になります。

Sub message()

MsgBox "メッセージ" & vbCrLf & "改行"

End Sub

buttons引数:ボタンやアイコンの変更など設定

buttons引数は5つ設定できる項目があります。もちろん、省略することもできますが細かな設定をしたいときは便利です。

設定するときはbuttons引数同士を+(プラス)で結合すれば使用可能です。

buttons引数の種類     設定数          説明
①ボタンの種類1つ ボタンの種類を変更
②アイコンの変更1つ アイコンの種類を変更
③標準ボタンの設定1つ 標準ボタンの変更
④モーダルの設定1つ メッセージボックスのモーダル設定
⑤その他全て可能 ヘルプボタンの追加や右寄せなど

①ボタンの種類

メッセージボックスのボタンを変更することができます。

変更するには下記定数を使用します。

<ボタンの定数>

定数表示説明
vbOKOnly[OK]ボタンを表示(規定値
vbOKCancel[OK][キャンセル]を表示
vbAbortRetryIgnore[OK][再施行][無視]を表示
vbYesNoCancel[はい][いいえ][キャンセル]
vbYesNo[はい][いいえ]を表示
vbRetryCancel[再試行][キャンセル]を表示
Sub message()

'ボタンを「OK」「キャンセル」に設定
MsgBox "メッセージ", vbOKCancel

End Sub

②アイコンを変更

メッセージボックスのアイコン数は少ないですが変更することができます。

アイコンに合った音も再生されます。

<アイコンの定数>

定数表示説明
vbCritical[警告メッセージ]のアイコンを表示
vbQuestionvbQuestion[問い合わせメッセージ]のアイコンを表示
vbExclamationvbExclamation[注意メッセージ]のアイコンを表示
vbInformation[情報メッセージ]のアイコンを表示
Sub message()

'ボタンを「はい」「いいえ」「キャンセル」にして、警告アイコンを表示
MsgBox "メッセージ", vbYesNoCancel + vbCritical

End Sub

③標準ボタンの設定

「標準ボタン」って何?

メッセージボックスが表示されてる時に始めからアクティブになっているボタンを「標準ボタン」といい、[Enter]を押すと標準ボタンが選択されます。

規定値では第1ボタン(一番左のボタン)が標準ボタンに設定されています。

標準ボタンを

標準ボタンを設定することで、重要な選択肢で何気に[Enter]キーを押して、データが消えたり・上書きしたりなどのミスを避けるために標準ボタンを重要でないボタンに設定してリスクを減らすときに使えます。

<標準ボタンの定数>

定数説明
vbDefaultButton1      第1ボタンを標準ボタンに設定(既定値
vbDefaultButton2第2ボタンを標準ボタンに設定
vbDefaultButton3 第3ボタンを標準ボタンに設定
vbDefaultButton4 第4ボタンを標準ボタンに設定

また、「いつ第4ボタンを標準ボタンに設定するの?」と思った方へ、後述する「ヘルプボタン」を設定するときに使うことがあるので、その際に第4ボタンが登場します。

Sub message()

ボタンを「はい」「いいえ」「キャンセル」にして、第2ボタンを標準ボタンにする
MsgBox "メッセージ", vbYesNoCancel + vbCritical + vbDefaultButton2

End Sub

④モーダルの設定

「モーダル」って何?

閉じるまでは他のアプリケーションの操作ができない。

メッセージボックスがモーダル設定だと、メッセージボックスを閉じるまでは他のアプリを中断させたり、メッセージを常に表示させることができる。

基本的には、メッセージボックスの表示中はExcelの操作はできない状態になります。

それ以上に、ほかのアプリケーションに切り替わってもメッセージボックスの応答を優先させたいときは[vbSystemModal]を設定すると便利です。

<モーダルの定数>

定数説明
vbApplicationModal     メッセージボックスに応答するまでは現在選択中の
アプリケーションの実行を継続できない状態(既定値
vbSystemModalメッセージボックスに応答するまですべてのアプリケーションが 中断メッセージボックスが常時表示される状態
Sub message()

MsgBox "メッセージ", vbYesNoCancel + vbCritical + vbDefaultButton2 + vbSystemModal

End Sub

[vbSystemModal]を設定すると、たとえgoogleを開いてもメッセージボックスが常に表示されるようになります。

⑤その他

ヘルプボタン表示やメッセージの右寄せ、反転などの設定ができます。

下記の設定はすべて同時に行うこともできます。

<その他の定数>

定数表示説明
vbMsgBoxHelpButtonヘルプボタンを表示
VbMsgBoxSetForegroundウィンドウを最前面で表示
vbMsgBoxRightメッセージを右寄せで表示
vbMsgBoxRtlReading配置を反転させて表示
Sub message()

'コードの改行は_(アンダーバー)を使用
MsgBox "メッセージ", vbYesNoCancel + vbCritical + vbDefaultButton2 + _
vbMsgBoxHelpButton '「ヘルプ」ボタンを追加する

End Sub

※ヘルプボタンを動作させるには MsgBox  (prompt, [ buttons, ] [ title, ] helpfilecontext ]) のhelpfile,contextを指定しなくてはいけません。難易度が高いので、どうしても使いたいときはユーザーフォームの方が自分好みに作れると思います。

title引数:タイトルの変更

タイトルを何も設定しないと左上に「Microsoft Excel」と表示されます。

これを変更したいときは、title引数のところに文字列や変数をいれると設定できます。

また、buttons引数を設定しない場合でもカンマ(,)で区切り空白を入力しないとエラーになるので、注意してください。

Sub message()

'buttons引数を設定しない場合でもカンマ(,)で区切り空白を入力
MsgBox "メッセージ", , "タイトル"

End Sub

選択ボタンに応じて処理を変える

If文Select Case文を使うと選択ボタンに応じて処理を変えることができます。

Sub message()

Dim result

'①MsgBox関数を変数に入れる
'②MsgBox関数を括弧で囲む
result = MsgBox("パカジブログは役立ちましたか?", vbOKCancel)

'③戻り値の定数で条件分岐させる
If result = vbOK Then
    
    MsgBox "ありがとうございます"
    
ElseIf result = vbCancel Then

    MsgBox "もっと頑張ります!!"

End If

End Sub

パカジブログは役立ちましたか?というメッセージボックスの結果

「OKボタン」が押されたとき、「Cancelボタン」が押されたときなどによって条件分岐ができるのでとても便利です。しかし、使い方にポイントがあるので解説します。

MsgBox関数で条件分岐するときのポイント

①MsgBox関数は変数にいれる

②MsgBox関数の引数はカッコ()で囲む

③「どのボタンを押したか」は戻り値の定数によって条件分岐させる

① MsgBox関数は変数にいれる

MsgBox関数で条件分岐させるときは、MsgBox関数を変数にいれておくとIf文がコンパクトになるので便利です。

変数にいれないでIf文のなかにMsgBox関数を書くこともできますが、コードが長くなってしまうので可読性を優先するのであれば変数にいれることをおすすめします。

②MsgBox関数の引数はカッコ()で囲む

If文やSelet Case文とあわせてMsgBox関数を使うときは、MsgBox関数を括弧()で囲む必要があります。

これは関数の戻り値を利用するときは括弧()で囲む必要があるからです。

「戻り値」って何?

関数や数式を使ったときに返してくれる値を戻り値といいます。

簡単に言えば、「戻り値=結果」と思って頂ければ大丈夫です。

要するに、「関数の結果を使いたいときは括弧で包んでくれないと戻してあげないよ」とVBAが要求しています。

関数の戻り値を使用するときは括弧で囲むことをイメージした図

③「どのボタンを押したか」は戻り値の定数によって条件分岐する

どのボタンをクリックしたかによって条件分岐を変えたいときは、戻り値の定数を使います。

簡単にいうと、「OKボタン」が押されたときは「vbOK」、「キャンセルボタン」が押されたときは「vbCancel」を使って条件分岐するということです。

<MsgBox関数戻り値の定数>

定数説明
vbOK 「OK」ボタンを選択
vbCancel「キャンセル」ボタンを選択
vbAbort「中止」ボタンを選択
vbRetry「再試行」ボタンを選択
vbIgnore「無視」ボタンを選択
vbYes「はい」ボタンを選択
vbNo「いいえ」ボタンを選択

※ヘルプボタンに戻り値はなく、MsgBox  (prompt, [ buttons, ] [ title, ] helpfilecontext ]) のhelpfile,contextを指定しなくてはいけません。難易度が高いので、どうしても使いたいときはユーザーフォームの方が自分好みに作れると思います。

まとめ

MsgBox関数のポイント

・メッセージだけ表示させたいときは下記のコードだけで十分です

Sub message

MsgBox "メッセージ"

End Sub

・ボタン選択に応じた条件分岐をさせたいときは戻り値の定数を確認してIf文を使えば、それほど難しくはないと思います。ただし、

①MsgBox関数は変数にいれる

②MsgBox関数の引数はカッコ()で囲む

③「どのボタンを押したか」は戻り値の定数によって変わる

に注意して書いてください。

MsgBox関数のほかにもVBAマクロについて知りたいと思う方は、Udemyの動画講座がおすすめです

コメント

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