こんにちは、Ryoです。
VBAで対話型プログラムとして処理したいケースも多々あるかと思いますが、その中で使用頻度が高いと思われるメッセージボックスの「はい」(Y)「いいえ」(N)を表示し、クリックしたボタンに応じて処理を分岐する方法について書いてみたいと思います。
1.サンプル概要
先ずサンプルコード起動用として「Y/N Sample」と表示したボタンを作っています。
このボタンを押すと以下のメッセージボックスが表示されます。
今回はサンプルとして相当昔に数式で作った工程能力算出表(両側規格:CPK/片側規格:CPU)のシート選択を問い合わせるものです。
ここで「はい(Y)」を選択すると、以下のメッセージボックスが表示され、OKを押すとシートが表示されます。
最初のメッセージボックス問合せに対し「いいえ(N)」選択した場合は以下のメッセージボックスとなり、OKを押すことで片側規格のシートが表示されます。
2.サンプルコード
Sub Sample1() If MsgBox("評価対象は「両側規格」ですか?", vbYesNo + vbInformation, _ "評価方法確認") = vbYes Then MsgBox "CPK試算シートを表示します", vbInformation ThisWorkbook.Sheets("Sheet1").Activate Else MsgBox "CPU試算シートを表示します", vbInformation ThisWorkbook.Sheets("Sheet2").Activate End If End Sub
このように記述しますが、メッセージボックスを表示する為にはMsgBox関数を使います。
構文としては、以下になります。
MsgBox(prompt[, Button][, title][, helpfile,context])
この中でpromptはメッセージとして表示する文字列になります。(半角で1024文字まで)
サンプルではMsgBox(“評価対象は「両側規格」ですか?”までですね。
次のButtonはボタンの種類を指定しますが、省略した場合はOKボタンのみを表示するvbOKOnlyになります。
≪ボタンの種類≫
vbOKCancel・・・「OK」「キャンセル」ボタンを表示
vbYesNo・・・「はい」「いいえ」ボタンを表示
vbYesNoCancel・・・「はい」「いいえ」「キャンセル」ボタンを表示
vbAbortRetrylgnore・・・「中止」「再試行」「無視」ボタンを表示
vbRetryCancel・・・「再試行」「キャンセル」ボタンを表示
このボタン指定の際にアイコンの種類も合わせて指定することが出来ます。
サンプルで示す通り、vbYesNo + vbInformation,とすることで「はい」「いいえ」ボタンと合わせて情報メッセージアイコンを表示させています。
次のtitleは指定することでメッセージボックス上のタイトルバーに文字列を表示出来ます。
省略も可能ですが、今回サンプルでは”評価方法確認”をtitleとして指定しています。
helpfile,contextは今回省略していますので、解説は割愛します。
個人的には使用頻度もあまり高くなく、省略することも多い部分ですね。
◆クリックしたボタンで処理を分岐する
メッセージボックスはクリックされたボタンに応じた値を返します。
今回サンプルで使用している「はい」は「vbYes」、「いいえ」は「vbNo」となります。
それをIf文を使って判定していますので、
If MsgBox(“評価対象は「両側規格」ですか?”, vbYesNo + vbInformation, _
“評価方法確認”) = vbYes Then
このように記述しています。
また戻り値としては「vbYes」が「6」、「vbNo」が「7」となっているので、数値を指定して条件分岐してもOKです。この場合は、
If MsgBox(“評価対象は「両側規格」ですか?”, vbYesNo + vbInformation, _
“評価方法確認”) = 6 Then
このようにvbYesの部分が「6」になります。
後は条件分岐に従ってメッセージボックスの表示と対応したシートを表示させているのみですので、この辺りは特に問題ないかと思います。
◆参考
本題とは関係ありませんが、今回サンプルに使用している工程能力算出表は表内白抜き部分に評価したい数値を入れれば工程能力が計算されるもので、確か10年ぐらい前に新入社員教育用に作ったものだった気がします。
今時需要は無いかもしれませんが、ダウンロード出来るようにリンクを貼っておきますので、用途がありそうでしたら、ご参考までに。(ちなみに本記事のVBAサンプルは含みません)
3.まとめ
メッセージボックスを使って対話型とするのは使い勝手を向上させる上で、とても有用なので利用頻度も高いと思います。今回は「はい」「いいえ」に特化して書いていますが、ボタン種類にありますように他にもたくさんありますので、用途に応じて使用していくことで柔軟性の高いプログラムになりますから、機会あればぜひご検討くださいませ。
以上、メッセージボックスボタンの処理分岐を行う(Y/N)についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo