目次
目的
Excel VBA の Msgbox 関数の操作結果、選択結果を取得して、その後の処理の分岐を行いたい。
ユーザーの操作を受け取って、処理結果を変えたい。
Msgbox が返す数字
まずは、 Msgbox 関数が返す数字を見てみたいと思います。
「OK」ボタンのみのメッセージボックス
以下のマクロを実行すると、「OK」ボタンのみのメッセージボックスが表示されると思います。そこで「OK」ボタンを押すと、 VBE のイミディエイトウィンドウに、 Msgbox 関数が返す数字が出力されます。
Excel VBA のコード:
Sub macro_003183()
Dim r As Integer 'MsgBox 関数は、整数型( Integer )の値を返すようです。'r は result の頭文字をとったものです。
r = MsgBox("message") 'r に戻り値を格納します。
Debug.Print "MsgBox 関数が返した数字"; r '戻り値を VBE のイミディエイトウィンドウに出力します。
End Sub
イミディエイトウィンドウの出力結果:
MsgBox 関数が返した数字 1
「1」が戻り値として出力されました。
ただ、「OK」ボタンのみでは、分岐ができないですね。次は、「はい」「いいえ」「キャンセル」のボタンから選択することのできるメッセージボックスを使用してみます。
「はい」「いいえ」「キャンセル」ボタンが表示されるメッセージボックス
以下のマクロを実行すると、「はい」「いいえ」「キャンセル」の 3 つのボタンがあるメッセージボックスが表示されると思います。いずれかのボタンをクリックすると、選んだボタン毎に決まっている数字が、 VBE のイミディエイトウィンドウに出力されます。
ボタン毎に決まっている数字というのは、VBA のアプリケーションレベルで事前に設定されている「定数」というものらしく、「はい」は「vbYes」で「6」、「いいえ」は「vbNo」で「7」、「キャンセル」は「vbCancel」で「2」などと決まっているようです。
Excel VBA のコード:
Sub macro_003183_2()
Dim r As Integer 'MsgBox 関数は、整数型( Integer )の値を返すようです。'r は result の頭文字をとったものです。
r = MsgBox("いずれかのボタンをクリック。", vbYesNoCancel) 'r に戻り値を格納します。vbYesNoCancel で「はい」「いいえ」「キャンセル」ボタンの表示を指定しました。
Debug.Print "MsgBox 関数が返した数字"; r '戻り値を VBE のイミディエイトウィンドウに出力します。
End Sub
「はい」ボタンを選択した時のイミディエイトウィンドウの出力結果:
MsgBox 関数が返した数字 6
「いいえ」ボタンを選択した時のイミディエイトウィンドウの出力結果:
MsgBox 関数が返した数字 7
「キャンセル」ボタンを選択した時のイミディエイトウィンドウの出力結果:
MsgBox 関数が返した数字 2
「はい」は「6」、「いいえ」は「7」、「キャンセル」は「2」が出力されました。
この 3 つの数字を知っていれば、その後の処理の分岐が行えそうです。
次は、「はい」「いいえ」「キャンセル」のメッセージボックスを使用して処理の振り分けを行ってみたいと思います。
処理の分岐
if 文( if then else ステートメント)を使用して処理の分岐を行ってみたいと思います。以下のマクロを実行すると、「はい」「いいえ」「キャンセル」のメッセージボックスが表示されると思います。いずれかのボタンをクリックすると、 Excel ワークシートの A1 にセルに、選択結果が出力されると思います。
Excel VBA のコード:
Sub macro_003183_3()
Dim r As Integer 'MsgBox 関数は、整数型( Integer )の値を返すようです。'r は result の頭文字をとったものです。
r = MsgBox("いずれかのボタンをクリック。", vbYesNoCancel) 'r に戻り値を格納します。vbYesNoCancel で「はい」「いいえ」「キャンセル」ボタンの表示を指定しました。
Debug.Print "MsgBox 関数が返した数字"; r '戻り値を VBE のイミディエイトウィンドウに出力します。
If r = 6 Then '「はい」を選択した場合
Range("A1").Value = "「はい」を選択しました。"
ElseIf r = 7 Then '「いいえ」を選択した場合
Range("A1").Value = "「いいえ」を選択しました。"
ElseIf r = 2 Then '「キャンセル」を選択した場合
Range("A1").Value = "「キャンセル」を選択しました。"
End If
End Sub
上のコードの中の
If r = 6 Then
ElseIf r = 7 Then
ElseIf r = 2 Then
の部分は、以下のように「定数」との比較も使用できるようです。
If r = vbYes Then 'vbYes の値は 6
ElseIf r = vbNo Then 'vbNo の値は 7
ElseIf r = vbCancel Then 'vbNo の値は 2
テスト環境
- Windows 10
- Microsoft Office Excel 2003
あとがき
とりあえず、 MsgBox 関数を使用して、処理の分岐を行うことができました。
以上、閲覧ありがとうございました。