目次

目的

Excel VBA の Msgbox 関数の操作結果、選択結果を取得して、その後の処理の分岐を行いたい。

ユーザーの操作を受け取って、処理結果を変えたい。

目次まで戻る

Msgbox が返す数字

まずは、 Msgbox 関数が返す数字を見てみたいと思います。

「OK」ボタンのみのメッセージボックス

macro_003183 の実行結果。
「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」ボタンのみでは、分岐ができないですね。次は、「はい」「いいえ」「キャンセル」のボタンから選択することのできるメッセージボックスを使用してみます。

「はい」「いいえ」「キャンセル」ボタンが表示されるメッセージボックス

macro_003183_2 の実行結果。
「はい」「いいえ」「キャンセル」ボタンが表示されるメッセージボックス。

以下のマクロを実行すると、「はい」「いいえ」「キャンセル」の 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 つの数字を知っていれば、その後の処理の分岐が行えそうです。

次は、「はい」「いいえ」「キャンセル」のメッセージボックスを使用して処理の振り分けを行ってみたいと思います。

目次まで戻る

処理の分岐

003183 - macro_003183_3 の実行結果
ワークシートの A1 セルにメッセージボックスの選択結果が出力されました。

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 関数を使用して、処理の分岐を行うことができました。

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿