[教えて!VBA] 第9回 フォントやボタンをカスタマイズできるメッセージボックスを作成するにはどうすればいいの??

概要

この記事について

かんたんな概要と結論

独自のメッセージボックスを使ってカスタマイズを行うためには、
ユーザーフォームという機能を利用する必要があります。

ユーザーフォームを使って、URLリンクを貼ったり、
ボタンの数を増やしたりすることができます。

こんにちは、dedeです。

この記事では、
VBAマクロに関する質問のうち、
皆が疑問に思っているトピックについて解説いたします。

今回は、 フォントやボタンをカスタマイズできるような、独自のメッセージボックスを作成する方法
を解説いたします。

※この記事は、Office VBAマクロのうち
Excel VBAマクロに関するトピックです。

レベル:中級者向け

標準のメッセージボックスの機能

標準のメッセージボックスを利用するには、
VBA.Interaction のメンバーであるMsgBox関数を使用します。

1MsgBox (prompt, [ buttons, ] [ title, ] [ helpfile, context ])

標準のメッセージボックスには各種の機能がありますが、
その種類は限られています。

詳しくは、公式に記載があります。

例えば、
次のように「はい」「いいえ」の選択肢ボタンを表示したり、
警告アイコンやエラーアイコンを付記することはできます。

標準のメッセージボックス

やりたいこと

上記の標準機能では、
次のようなことができません。

  • フォントをカスタマイズする(色の変更など)
  • URLリンクを貼り付ける
  • 選択肢ボタンの他に、別の処理を行うボタンを配置する

これらを実現するために、
Excel VBAのユーザーフォーム機能を利用します。

【ユーザーフォームとは?】

ボタンやテキストボックスなどのコントロールを自由に配置してカスタマイズできる画面です。
詳細な利用方法は こちら

実装する

レベル1. 独自のメッセージフォームを構築

まず、独自メッセージのためのフォームを作成します。

独自メッセージのためのフォーム

その後、フォームにラベルやボタンなどの部品(コントロールと呼びます)を設置します。

メッセージボックスの部品設置

最後にフォームのコードウィンドウ上にコードを記入します。

 1'//OKボタン
 2Private Sub CommandButton_OK_Click()
 3    '//結果を現在表示中のシートに記載
 4    ActiveSheet.Range("B5").Value = "結果です。"
 5    ActiveSheet.Range("B6").Value = "ああいいううええおお"
 6    '//フォームを閉じる
 7    Unload Me
 8End Sub
 9
10
11'//キャンセルボタン
12Private Sub CommandButton_Cancel_Click()
13    '//フォームを閉じる
14    Unload Me
15End Sub
16
17

OKボタン押下時には結果をシートに記入しまてからフォームを閉じますが、
キャンセルボタン押下時には結果処理をキャンセルし、フォームを閉じます。

以下、デモです。

  1. シートに独自メッセージ呼び出し用のボタンを設置します。

呼び出し用のボタン

このボタンを押すと独自メッセージが呼び出されます。
ボタンには次のように呼び出し用のプログラムを設定します。

1Private Sub CommandButton_ShowMessage_Click()
2    '//独自メッセージを表示
3    UserForm_MyMessage.Show
4End Sub
5

今回はデモなのでシート上のボタンの押下で呼び出しというようにしていますが、
呼び出したい場所でUserForm_MyMessage.Showを記述すればよいだけなので、
実際上はどのようなプログラムでもメッセージを表示させることができます。

  1. ボタンを押下して独自メッセージを表示させます。

独自メッセージを表示

  1. メッセージボックス上のOKボタンを押下すると、シートに結果の文字を表示します。

OKボタンを押下

レベル2. フォントをカスタマイズ

独自メッセージボックス上の文字はラベルというコントロールに記述されており、
ラベルの文字は色を変えたり大きさを変えたりすることができます。

フォントをカスタマイズ

「メールの添付」の文字のためのラベルを新しく挿入し、
文字色を大きさ、太さを変更しました。

レベル3. URLリンクを配置

ラベルには、
URLリンクも配置することができます。

URLリンクを配置

上では、URLとしてexample.comを設定します。

ラベルをクリックした際のイベントとして次のようにコードを書きます。

1
2'//URL記載ラベルのクリックイベント
3Private Sub Label_URLLink_Click()
4    ThisWorkbook.FollowHyperlink Address:="http://example.com"
5End Sub
6

以下、デモです。

  1. メッセージボックスを表示し、URLリンクをクリックすると……

URLリンクをクリック

  1. example.comのサイトがブラウザで開かれます。

リンクを開く

レベル4. ボタンを増やし、メッセージの機能を追加する

「OK」「キャンセル」「はい」「いいえ」などの選択肢ボタンの他に、
具体的な動作を表すボタンを追加することもできます。

このようにすれば、メッセージボックスに特有の機能を持たせることができます。

ボタン追加

上の図では、現在表示中のシートではなく、
「結果シート」というシートに文字を書き込むボタンを追加しています。

ボタン押下時のイベント処理は次のようなコードとして記述します。

1'//結果シートに書きこむボタン
2Private Sub CommandButton_WriteResultSheet_Click()
3    '//結果を結果シートに記載
4    Worksheets("結果シート").Range("B2").Value = "結果です。"
5    Worksheets("結果シート").Range("B3").Value = "ああいいううええおお"
6    '//フォームを閉じる
7    Unload Me
8End Sub
9

ボタンの数は常識的な範囲ではいくつでも配置できる(上限があったかどうかは把握しておりませんが)ので、
実装の方法次第で、非常に多機能なメッセージボックスに仕上げることも可能です。

以下、デモです。

  1. 結果シートには何も記入されていない初期状態です。

結果シート初期状態

  1. 「結果シートに書き込む」ボタンを押下します。

結果シートに書き込むボタンを押下

  1. OKボタンを押したときとは異なり、結果シートに結果の文字が書き込まれ、フォームが閉じます。

結果シートに書き込み

ソースファイルについて

デモで使用したソースファイルについて、
こちらからダウンロードできます。

終わりに

メッセージボックスのカスタマイズを行うと、
注意させたい文言を赤文字で書いたり、
業務上重要なサイトをURLリンクで貼り付けたりできるので、
VBAマクロの便利さをより向上させることができるでしょう。

関連記事

comments powered by Disqus