エクセル VBA 【実行前の確認メッセージボックス】

閑話休題

この記事で出来ること

こんな感じにメッセージで確認してから実行させたい場合のやり方です。

マクロ(VBA)を実行させたとき、確認メッセージによって、そのまま実行するか中止するかの選択ができます。

いいえボタンはいらない場合

ただ単にメッセージがでてくれば良い場合は、下記のようなMsgBoxを一行入れればOKです。

MsgBox “処理が完了しました。”

ただしこの場合、「いいえ」という選択肢はありません。
End Subの直前にいれて、処理が終了したことを伝える場合などによく使われます。
その場合はOKボタンを押すとそのまま処理が終了します。

まずは実際のコードから

Sub saishukakunin1()
Dim alert As VbMsgBoxResult
alert = MsgBox(“実行してよろしいですか?”, vbYesNo + vbQuestion, “実行確認”)
If alert = vbYes Then

MsgBox “実行しました。” '←「はい」ボタンをクリックしたときの処理。

End If
End Sub

これを実行すると、まず「実行してよろしいですか?」というメッセージとともに「はい」と「いいえ」のボタンが表示されます。

  • 「はい」をクリックすると、「実行しました」とメッセージが出ます。
  • 「いいえ」をクリックすると終了します。

自分の作ったコードに確認ボタンをつけてみよう!

すでに実行可能なVBAがあって、それに確認ボタンをつけたい場合は、次のように間に挟みます。

Sub saishukakunin1()
Dim alert As VbMsgBoxResult
alert = MsgBox(“実行してよろしいですか?”, vbYesNo + vbQuestion, “実行確認”)
If alert = vbYes Then

ここに実行したいプログラムを書きます。

End If
End Sub

コードについて簡単に説明します。

MsgBox関数とIf文を組み合わせ

確認ボタンは、メッセージに対して下のような選択をさせるものです。

  • もし「はい」をクリックしたら
  • もし「いいえ」をクリックしたら

冒頭ののコードをそのまま使った場合、「はい」をクリックしたら「実行しました。」とメッセージがでてきて、「いいえ」をクリックすると終了します。

「はい」をクリック?「いいえ」をクリック?その結果を変数に入れる

メッセージに対して、

「はい」をクリックしたのか?
「いいえ」をクリックしたのか?

その結果を返す関数がこのメッセージボックス関数です。

結果を変数に入れておいて、それを判定して処理が分岐するわけですね。

だから、次のような書き方が一般的です。

変数 = MsgBox(“メッセージ”,ボタンの種類)

変数名と型を宣言

ここでは変数名を「alert」にしました。

適宜わかり易い名前をつけてください。

型は「VbMsgBoxResult」

変数にMsgBox関数の戻り値を代入

変数の中に入ってくる値をもとに、その後のif分を使って動作を分岐させます。

今回の場合、「はい」というボタンをクリックするとalertという変数に「vbYes」という値が代入されます。

そして、「はい」のときだけ、その後に書かれた処理が実行されます。

MsgBox関数の引数(カッコ内の文字の役割)

戻り値を含め、いろいろな設定をこの引数で決めることができます。

MsgBox(“実行してよろしいですか?”, vbYesNo + vbQuestion, “実行確認”)
↑このカッコ内のそれぞれの意味を見ていくと次のようになります。

  1. 最初がメッセージ部分。文をダブルクオーテーションではさみます。当然ですが必須項目です。
  2. vbYesNoの部分はボタンのタイプです。他にも色々あります。省略するとOKボタンだけ表示されますが、今回のように条件分岐させる場合は指定する必要があります。
  3. vbQuestionはアイコンのスタイルです。これも色々有ります。(ボタンタイプとアイコンスタイルは「+」でつなぎます。アイコンのスタイルが不要の場合は省略できます。)
  4. メッセージボックスの名前。ボックスの上部に表示される文字で、省略した場合「MicrosoftExcel」と表示されます。
メッセージだけならカッコはいらない

先程のいいえボタンがいらない場合の説明でMsgBoxの後にカッコが無いことにお気づきでしょうか。

このように、どのボタンを押したかという結果を必要としない場合はカッコがいりません。

MsgBox “実行します。”

この場合はデフォルトで「OK」のボタンが表示されますが、それは単にメッセージ表示を消すためのボタンです。

結果を求めない関数なんてめずらしいですね。。。

If文について少しだけ説明します

If文の始まり

If alert = vbYes Then

変数「alert」に代入されるの戻り値が「vbYes」ならその次に書かれている内容を実行することになります。

「はい」ボタンをクリックしたときの処理を入れる

ここに「はい」をクリックしたときの動作、つまり「vbYes」が変数に代入されたときの動作をThenの次に書きます。

「いいえ」ボタンをクリックしたときの処理を指定したい場合

冒頭のコードは「いいえ」をクリックすると何もせずに終了します。

「いいえ」をクリックされた場合、つまり「はい」じゃない場合に何かをさせたい場合は「Else」を使います。

例えば「いいえ」をクリックしたときに「実行しません」というメッセージを出す場合などが典型的なケースです。

Sub saishukakunin1()
Dim alert As VbMsgBoxResult
alert = MsgBox(“実行してよろしいですか?”, vbYesNo + vbQuestion, “実行確認”)
If alert = vbYes Then

「はい」をクリックしたときに実行したいプログラムを書きます。

else

いいえ」をクリックしたときに実行したいプログラムを書きます。

End If
End Sub

If文の終了

If文を使ったときは必ず最後に「End If」を入れます。

MsgBoxは基本が詰まっていて楽しい

単純な処理なのにその中には関数の基本である「戻り値」や、「変数の宣言」「If文」「else」など色々詰まっていて学習にはもってこいですね。

たかがメッセージボックス、されどメッセージボックス

最後まで読んでいただきありがとうございます。

少しは参考になったでしょうか。

かく言う私もこの記事をかいてだいぶ頭が整理できました!

コメント

タイトルとURLをコピーしました