「メッセージボックス」って簡単に表示できるの?
こんなメッセージボックスが出せれば面白いですよね。
VBA初心者の方でも簡単なコードでメッセージボックスが表示できます。
そして、応用すると注意喚起ができたり、選択に応じて処理が変えられたりと多くのことができるようになります。
簡単かつ応用の効くメッセージボックスについて解説してきます。
メッセージボックスって何?
Excelを使っていると、操作する人にメッセージの表示や注意をしたいときがありますよね。
そんな時、簡単に使えるのがMsgBox関数です。
このように、どんなメッセージでも表示させることができます。
また、タイトルやメッセージ、YesボタンやNoボタンなどの変更も簡単にできます。
MsgBox関数でメッセージのみ表示
メッセージのみ表示させるときは下記のコードで書けば簡単に表示できます。
Sub message
MsgBox "メッセージ"
End Sub
MsgBox関数の使い方
※正確にはMsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])ですが、第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 | [警告メッセージ]のアイコンを表示 | |
vbQuestion | [問い合わせメッセージ]のアイコンを表示 | |
vbExclamation | [注意メッセージ]のアイコンを表示 | |
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, ] [ helpfile, context ]) の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関数を変数にいれておくと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, ] [ helpfile, context ]) のhelpfile,contextを指定しなくてはいけません。難易度が高いので、どうしても使いたいときはユーザーフォームの方が自分好みに作れると思います。
まとめ
MsgBox関数のほかにもVBAマクロについて知りたいと思う方は、Udemyの動画講座がおすすめです
コメント