Excelと仲良くなろう!VBAマクロのダイアログで対話的に処理を実行する方法【サンプル有り】

はじめに

「場合によって実行するVBAマクロの処理を分岐させたい!」と思ったことはありませんか?

様々な処理を一つ一つ別々に書いて実行するのは非効率です。

使いたい処理をユーザーに問いかけて、処理を分岐させるというのが有効な手段となると思いますが、どのような手段があるのでしょうか?

MsgBox関数を紹介する本記事の目的

Excel VBA を使う上でユーザーの要求によって処理を分岐させたり、処理を実行する前に確認が必要なときなど、対話的に処理を実行したいときはVBAに実装されているMsgBox関数を使うと便利です。

また、MsgBox関数へのユーザーの返答結果で処理を分岐させるには、返答をVbMsgBoxResultへ格納することで、その後ifやCaseといった条件分岐を使うことができるので便利です。

本記事では、このMsgBox関数と、その返答をVbMsgBoxResult列挙型に格納して処理を分岐させるVBAマクロをご紹介いたします。

MsgBox関数を実行する処理の流れ

MsgBox関数を使うことで、ユーザーの要求を求めるプロンプトを表示することができます。
このプロンプトは下記に詳述するようにボタンやタイトルなど、関数内で指定することができます。
このプロンプトを表示させユーザーからの返答をVbMsgBoxResult列挙型に格納して、返答内容から処理を分岐させることを考えます。

MsgBox関数に使用する関数・プロパティなど

MsgBox 関数
MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])

Prompt ダイアログ ボックスにメッセージとして表示される文字列式。
buttons 表示させるボタンの数と種類を指定する。
title 省略可能。 ダイアログ ボックスのタイトル バーに表示される文字列式。
helpfile ダイアログ ボックスに状況依存のヘルプを提供するときに使用するヘルプ ファイルを識別する文字列式。
context ヘルプ作成者によって適切なヘルプ トピックに割り当てられたヘルプ コンテキスト番号を示す数式。

MsgBox関数のサンプルコード

シンプルに返答を求めるだけだと以下のコードになります。

Sub Sample1()
    MsgBox "処理を実行します!よろしいですか?"
End Sub

実行結果

返答内容を列挙型に格納して処理を分岐させる応用版は以下になります。

Sub Sample2()
    Dim ans As VbMsgBoxResult
    ans = MsgBox("処理を続行しますか?", vbYesNo + vbQuestion)
    If ans = vbYes Then
        MsgBox "処理を続けます", vbInformation
    Else
        MsgBox "処理を中止します", vbCritical
    End If
End Sub

 

終わりに

今回はExcelVBAから対話的に処理を行いたいときによく使われるMsgBox関数をご説明しました。
とりあえずシンプルなパターンをご紹介しましたが、Usageで紹介したとおり、多くのプロパティを指定できますので、用途に応じて使い分けることで様々な使い分けができます。
興味がある方はリンクのリファレンスを一度ご確認ください。