[教えて!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ボタン押下時には結果をシートに記入しまてからフォームを閉じますが、
キャンセルボタン押下時には結果処理をキャンセルし、フォームを閉じます。
以下、デモです。
- シートに独自メッセージ呼び出し用のボタンを設置します。
このボタンを押すと独自メッセージが呼び出されます。
ボタンには次のように呼び出し用のプログラムを設定します。
1Private Sub CommandButton_ShowMessage_Click()
2 '//独自メッセージを表示
3 UserForm_MyMessage.Show
4End Sub
5
今回はデモなのでシート上のボタンの押下で呼び出しというようにしていますが、
呼び出したい場所でUserForm_MyMessage.Show
を記述すればよいだけなので、
実際上はどのようなプログラムでもメッセージを表示させることができます。
- ボタンを押下して独自メッセージを表示させます。
- メッセージボックス上のOKボタンを押下すると、シートに結果の文字を表示します。
レベル2. フォントをカスタマイズ
独自メッセージボックス上の文字はラベルというコントロールに記述されており、
ラベルの文字は色を変えたり大きさを変えたりすることができます。
「メールの添付」の文字のためのラベルを新しく挿入し、
文字色を大きさ、太さを変更しました。
レベル3. URLリンクを配置
ラベルには、
URLリンクも配置することができます。
上では、URLとしてexample.comを設定します。
ラベルをクリックした際のイベントとして次のようにコードを書きます。
1
2'//URL記載ラベルのクリックイベント
3Private Sub Label_URLLink_Click()
4 ThisWorkbook.FollowHyperlink Address:="http://example.com"
5End Sub
6
以下、デモです。
- メッセージボックスを表示し、URLリンクをクリックすると……
- 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
ボタンの数は常識的な範囲ではいくつでも配置できる(上限があったかどうかは把握しておりませんが)ので、
実装の方法次第で、非常に多機能なメッセージボックスに仕上げることも可能です。
以下、デモです。
- 結果シートには何も記入されていない初期状態です。
- 「結果シートに書き込む」ボタンを押下します。
- OKボタンを押したときとは異なり、結果シートに結果の文字が書き込まれ、フォームが閉じます。
ソースファイルについて
デモで使用したソースファイルについて、
こちらからダウンロードできます。
終わりに
メッセージボックスのカスタマイズを行うと、
注意させたい文言を赤文字で書いたり、
業務上重要なサイトをURLリンクで貼り付けたりできるので、
VBAマクロの便利さをより向上させることができるでしょう。
関連記事
- [教えて!VBA] 第8回 変更前のセルの値を保持/利用するにはどうすればいいの??
- [教えて!VBA] 第7回 フォルダを開く(+ファイルを操作する)にはどうすればいいの??
- [教えて!VBA] 第6回 エクセルVBAマクロで、マクロを終了するにはどうすればいいの??
- [教えて!VBA] 第5回 ブックの最初のシートの最初のセルを選択した状態にするにはどうすればいいの??
- [教えて!VBA] 第4回 シート上の図形をコピーして他のセル上に貼り付けするにはどうすればいいの??