VBAでMsgbox関数でメッセージボックスを表示する際に、応用的な使い方をしたいという質問がよく来ます。
Msgbox関数の応用としては、以下の使い方があります。
- メッセージボックスにアイコンを表示する。
- メッセージボックス内で改行する。
- yes、no、キャンセルを選択する。
- 取得した値をメッセージボックスに表示する。
- メッセージボックスで変数を表示させる。
- メッセージボックスを複数表示する。
今回は、メッセージボックスの応用的使い方について徹底的に解説していきますね☆
メッセージボックス(Msgbox関数)の応用的使い方
VBAでメッセージボックスを表示させるには、Msgbox関数を使います。
Msgbox関数はただ文字列を表示させるだけではなく、応用的な使い方として
- メッセージボックスにアイコンを表示する。
- メッセージボックス内で改行する。
- yes、no、キャンセルを選択する。
- 取得した値をメッセージボックスに表示する。
- メッセージボックスで変数を表示させる。
- メッセージボックスを複数表示する。
それでは順に解説していきます。
メッセージボックスにアイコンを表示する
Msgbox関数では、メッセーボックス内にアイコンを表示することができます。
設定できるアイコンは4種類で、以下のような構文になります。
▶アイコンを設定する構文:Msgbox “メッセージ文字列”, アイコンの定数
'アイコン設定の記述例:
Msgbox "警告します。", vbCritical
アイコン名 | アイコン | 定数 | 値 |
警告 | vbCritical | 16 | |
問い合わせ | vbQuestion | 32 | |
注意 | vbExclamation | 48 | |
情報 | vbInformation | 64 |
メッセージボックス内で改行する
Msgbox関数では、メッセーボックス内で改行することができます。
メッセージボックス内で改行するには、一般的には改行したい箇所に「vbCrlf」と記述します。
▶改行する構文:Msgbox “メッセージ文字列(1行目)” & vbCrlf & “メッセージ文字列(2行目)”
’改行の記述例:
Msgbox "1行目の文字列" & vbCrlf & "2行目の文字列"
ちなみに、「vbCrlf」を使う改行は何個でも使用可能ですが、ひとつのメッセージボックスにおいて約50回以上改行するとメッセージボックスが画面からはみだしてしまいます。
したがって、改行は多くても約50回にとどめるようにしてくださいね。
また、VBAコードを作成する際に、改行箇所を見やすくするために「 _(スペース+アンダーバー)」を使う方がいると思います。
MsgBox "1行目" & vbCrLf & _
"2行目" & vbCrLf & _
"3行目" & vbCrLf
この「 _(スペース+アンダーバー)」は25回以上使用すると「行継続文字( _)を使いすぎています。」と表示されてしまいますので注意してください。
Yes、No、キャンセルを選択する
メッセージボックスでは「OK」ボタンの表示以外のほかに「Yes、No、キャンセル」ボタンを表示させることも可能です。
▶Yes,No,キャンセルボタンの構文:Msgbox “文字列”, vbYesNoCancel
「Yes,No,キャンセル」ボタンに加えて、メッセージボックスにアイコンの「?」を表示させたい場合は、以下のようにパラメータを「+」で合体させて記述します。
【Yes,No,キャンセルボタンとアイコン「?」を表示させる】
Sub メッセージボックス()
MsgBox "はい、いいえ、キャンセルの表示", vbYesNoCancel + vbQuestion
End Sub
その他のボタンの定数は以下の表のとおりです。
ボタン名 | ボタン | 定数 | 値 |
OK | vbOKOnly | 0 | |
OK、キャンセル | vbOKCancel | 1 | |
中止、再試行、無視 | vbAbortRetryIgnore | 2 | |
はい、いいえ、キャンセル | vbYesNoCancel | 3 | |
はい、いいえ | vbYesNo | 4 | |
再試行、キャンセル | vbRetryCancel | 5 |
取得した値をメッセージボックスに表示する
メッセージボックスに取得した値を表示することもできます。
たとえばセルから取得した値を表示するには、以下のように「 & セルの値 & 」を連結させて記述します。
以下の例では、文字列と、セルA1、A2、A3の値を取得して連結させて表示させています。
MsgBox "おかげさまで " & Range("A1").Value & Range("A2").Value & Range("A3").Value & " ありがとう!!"
【実行結果】
このように
Msgbox ”文字列” & 取得した値 & “文字列”
のように「””(ダブルクォーテーション)で囲まれた文字列と取得した値(ここではセルの値)を「&」で連結して記述します。
メッセージボックスで変数を表示させる
メッセージボックスで変数を使うのはとても簡単です。
「””(ダブルクォーテーション)で囲まれた文字列と変数を「&」で連結して記述します。
▶変数を表示させる構文:Msgbox “文字列” & 変数
サンプルコードを見たほうが早いですので見てみましょう。
Sub メッセージボックスの応用()
Dim henSu1 As String
Dim henSu2 As long
Dim henSu3 As String
henSu1 = "ブイサバ"
henSu2 = 10000
henSu3 = "アクセス達成"
MsgBox "おかげさまで " & henSu1 & henSu2 & henSu3 & " ありがとう!!"
End Sub
【実行結果】
この際に、変数に値を代入する際には、
- 文字列を変数に代入 → 「””(ダブルクォーテーション)」で囲む。
- 数字を変数に代入 → 「””(ダブルクォーテーション)」で囲まない。
もし、文字列を「””」で囲まずに変数に代入した場合は、メッセージボックスに変数の値が表示されなくなりますので注意してください。※エラーも出ません。
henSu1 = ブイサバ ←””で囲んでない(間違い)
henSu2 = 10000
henSu3 = アクセス達成 ←””で囲んでない(間違い)
MsgBox "おかげさまで " & henSu1 & henSu2 & henSu3 & " ありがとう!!"
【実行結果:代入した文字列が表示されず、数字しか表示されない】
メッセージボックスを複数表示する
メッセージボックスを複数表示させたいという声が聞かれますが、残念ながらメッセージボックスを一度に複数個表示するのはできません。
Msgbox関数の機能の範囲を超えているのです。
もし、複数個表示させなければならない理由があるのならば、それを1個のメッセージボックスで達成するような仕様を考えてみましょう。
一般的には、改行を入れて複数行表示をすることで、1つのメッセージボックスで必要事項を達成できるようにします。
たとえば、以下のように改行と変数を使って必要事項を表示させます。
msgbox "message1" & vbcrlf & "message2" & vbcrlf & "message3"
まとめ
今回はVBAのメッセージボックスの応用的な使い方として、Msgbox関数の機能を紹介しました。
メッセージボックスにアイコンを表示するには、vbQuestionなどのパラメータを使います。
メッセージボックス内で改行するには、改行したい箇所に「vbCrlf」を記述します。
「Yes、No、キャンセル」ボタンは、パラメータにvbYesNoCancelを記述します。また、パラメータを変えることでそれ以外のボタンを使うことも可能です。
取得した値をメッセージボックスに表示するには、文字列と取得した値を&で連結することで表示できます。
メッセージボックスで変数を表示させるには、文字列と変数を&で連結させることで表示することができます。
メッセージボックスを複数表示するには、Msgbox関数の機能の範囲を超えているため複数表示はできません。
その代替措置として、改行等を使用して1つのメッセージボックス内に複数の要素を表示させて複数表示させたい事項を表示させます。
マクロではメッセージボックスで表示させる機会が多いですので、今回の記事が役に立てば幸いです☆
コメント