ExcelVBA ~MsgBox関数を使いこなそう その②~
- ムギ
- 8月7日
- 読了時間: 3分

はじめに
こんにちは。ティーマネジメントのシステム担当ムギです。
前回、ExcelVBAでのMsgBox関数について、
ユーザにメッセージを伝える目的での使用方法についてご紹介しました。
→前回はこちら:ExcelVBA ~MsgBox関数を使いこなそう その①~
今回は、メッセージダイアログボックス内に表示したボタンのうち、
ユーザがどれを選択したかで分岐する方法についてご紹介したいと思います。
どうぞお付き合いください。
MsgBox関数で戻り値を受け取る
前回ご紹介したとおり、MsgBox関数で表示するダイアログボックスには
引数の指定によって複数のボタンを表示することができます。
そして、「ユーザがどのボタンを選択したか」という情報は
MsgBox関数の戻り値として取得することができます。
今回、戻り値は変数に格納して使用します。
VBAでは、関数の戻り値を受け取るときは関数の引数を括弧()で囲んで指定します。
また、MsgBox関数は定数を返します。
定数の実態は数値になるので、MsgBox関数の戻り値を受け取る関数は数値を格納する型を指定します。
→Long型(長整数型)、Integer型(整数型)など
【例】変数AにMsgBox関数の返り値を格納
Dim A As Long
A = MsgBox(“メッセージ” , vbYesNo)

MsgBox関数が返す定数
MsgBox関数は以下の定数を返します。
<MsgBox関数が返す定数>
・vbOK:[OK]ボタンをクリック
・vbCancel:[キャンセル]ボタンをクリック
・vbAbort:[中止]ボタンをクリック
・vbRetry:[再試行]ボタンをクリック
・vbIgnore:[無視]ボタンをクリック
・vbYes:[はい]ボタンをクリック
・vbNo:[いいえ]ボタンをクリック
先に記載した通り、定数の実態は数値になります。
受け取る変数の型に注意しましょう。
MsgBox関数の戻り値で処理を分岐
では、実際にMsgBox関数で表示したボタンの選択によって
処理を分岐する記述を確認していきましょう。
例:メッセージダイアログボックスに表示された「OK」「キャンセル」ボタンどちらを選択したかで分岐
Dim A As Long
A = MsgBox("メッセージ", vbOKChancel)
If A = vbOK Then
'「OK」ボタンが選択
MsgBox "「OK」が選択されました。"
Else
'「キャンセル」ボタンが選択
MsgBox "「キャンセル」が選択されました。"
End If

今回返り値を返すためのMsgBox関数で指定しているボタンの引数が【vbOKCancel】ですので、
「OK」「キャンセル」どちらかのボタンを選択することになります。
2つのボタンで分岐することになるので、
条件分岐はIFステートメントを使用して記述します。
「OK」ボタンを選択する(変数Aが「vbOK」である)と
【「OK」が選択されました。】とメッセージが表示され、
「キャンセル」ボタンを選択する(「OK」ボタンが選択されていない=Else)と
【「キャンセル」が選択されました。】とメッセージが表示されます。

補足:ボタンの選択
MsgBox関数で表示したメッセージボックスのボタンは
Enterキーを押すことでも選択できます。
複数のボタンが表示されているときは、
選択状態になっているボタンがEnterキーで選択されます。
選択状態になっているボタンは、MsgBox関数の引数で、
定数のvbDefaultButton1やvbDefaultButton2などで指定したボタンになります。
必要に応じて設定してみましょう。
おわりに
いかがでしたでしょうか。
今回は、ExcelVBAのMsgBox関数で、ユーザが選択したボタンによって
処理を分岐する方法についてご紹介しました。
ユーザに処理を続行するか確認したい場合などに活用できます。
今回、分岐後の処理はメッセージボックスの表示だけにしていますが
任意の処理に置き換えて実行可能です。
ぜひ試してみてください。
もし何か気になる点などがございましたらお気軽にお問い合わせください。
お付き合いいただきありがとうございました。
暑い時期が続いておりますので、皆様どうぞご自愛ください。