VBAで、メッセージを表示したいけど、どうやって表示すればいいんだろう…
そんな疑問を持っていませんか?
この記事では、VBAの「MsgBox」を使ってメッセージを表示したり、ユーザーからの入力を求める方法を詳しく解説します。
「MsgBox」を使うことで、Excel VBAでのユーザーインタラクションがスムーズになり、プログラムの実行を制御することができます。
使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事でできるようになること
この記事を読むことで、以下のことができるようになります。
VBAのMsgBoxとは?
MsgBoxは、Excel VBAでメッセージを表示や、ユーザーからの入力を求めるためのダイアログボックスを表示するために使用されます。
MsgBoxを使うことで、簡単にユーザーに情報を伝えることができ、プログラムの流れに応じて選択を求めることができます。
MsgBoxの基本構文
VBAでのMsgBoxの基本的な構文は以下の通りです。
- prompt (必須) ⇒ promptの設定方法
- 表示するメッセージを指定します。
最大で約 1024 文字まで記述することができます。
- 表示するメッセージを指定します。
- buttons (省略可能) ⇒ buttonsの種類
- メッセージボックスに表示するボタンやアイコンを指定します。
- title (省略可能) ⇒ titleの設定方法
- メッセージボックスのタイトルバーに表示する文字列を指定します。
- helpfile (省略可能) ⇒ helpfileの設定方法
- メッセージボックスに関連付けるヘルプファイルを指定するために使用されます。
現在ではあまり使用されることはありません。
- メッセージボックスに関連付けるヘルプファイルを指定するために使用されます。
- context (省略可能) ⇒ contextの設定方法
- helpfile 引数で指定したヘルプファイル内の特定のトピックを指定するために使用されます。
現在ではあまり使用されることはありません。
- helpfile 引数で指定したヘルプファイル内の特定のトピックを指定するために使用されます。
より詳しい情報は、Microsoft公式のMsgBox 関数を参照してください。
prompt (必須)の設定方法について
MsgBoxで表示するメッセージは必ず指定する必要があります。
その記載方法について紹介します。
通常のデータを入れる場合
MsgBoxで通常のメッセージを表示する場合は、単純に文字列を指定します。
Sub ShowSimpleMessage()
MsgBox "これはシンプルなメッセージです"
End Sub
このコードでは、「これはシンプルなメッセージです」というテキストが、メッセージボックスにそのまま表示されます。
また、複数の変数を結合して表示することもできます。
Sub ShowConcatenatedMessage()
Dim part1 As String
Dim part2 As String
part1 = "こんにちは、"
part2 = "MsgBoxのテストテキストです!"
MsgBox part1 & part2
End Sub
このコードでは、「こんにちは、MsgBoxのテストテキストです!」というメッセージが表示されます。
MsgBoxで改行を入れる方法
MsgBoxでメッセージを表示する際に、複数行にわたってメッセージを表示したい場合は、改行コード「vbCrLf」を使用します。
※「VBcrlf」は、VBAで改行を挿入するための定数で、「キャリッジリターン(CR)」と「ラインフィード(LF)」を組み合わせたものです。
これにより、メッセージボックスやテキストに改行を挿入することができます。
Sub ShowMessageWithLineBreak()
MsgBox "行1" & vbCrLf & "行2" & vbCrLf & "行3"
End Sub
このコードは、MsgBoxに「行1」「行2」「行3」が、
それぞれ改行された状態で表示されます。
buttons (省略可能) の設定方法について
「buttons (省略可能)」で設定できるものは、以下の通り「ボタンの種類」や「アイコン」 及び「デフォルトボタンの設定 (初期でEnterキーを押したときに動作するボタン)」を設定することができます。
buttons (省略可能)の使用例をご紹介
Sub buttons_test()
Dim userResponse As VbMsgBoxResult
userResponse = MsgBox("サンプル", vbYesNoCancel + vbInformation + vbDefaultButton2)
End Sub
このコードで「buttons (省略可能)」を設定すると、
このようなMsgBoxを表示することができます。
それでは、設定方法について解説しますね。
「選択ボタンの種類」を選べます
MsgBoxの下に表示する「選択ボタン」の種類は、以下の通りです。
定数 | ボタンの種類 | 値 | 説明 |
---|---|---|---|
vbOKOnly | 0 | [OK] ボタンを表示する(デフォルト) | |
vbOKCancel | 1 | [OK] ボタンと [キャンセル] ボタンを表示 | |
vbAbortRetryIgnore | 2 | [中止] ボタン、[再試行] ボタン、 [無視] ボタンを表示 | |
vbYesNoCancel | 3 | [はい] ボタン、[いいえ] ボタン、 [キャンセル] ボタンを表示 | |
vbYesNo | 4 | [はい] ボタンと [いいえ] ボタンを 表示 | |
vbRetryCancel | 5 | [再試行] ボタンと [キャンセル] ボタンを表示 |
これらの定数を組み合わせて、MSGBOXのボタンやアイコンの配置をカスタマイズすることができます。
「アイコンの種類」を選べます
メッセージの左側に表示できる「アイコン」の種類は、以下の通りです。
定数 | アイコン | 値 | 説明 |
---|---|---|---|
vbCritical | 16 | 警告メッセージのアイコンを表示 | |
vbQuestion | 32 | 質問メッセージのアイコンを表示 | |
vbExclamation | 48 | 警告メッセージのアイコンを表示 | |
vbInformation | 64 | 情報メッセージのアイコンを表示 |
「デフォルトボタンを設定方法」を選べます
MsgBoxが表示された際に「選択ボタン」が、デフォルトでどのボタンを選択されているか?を選択することができます。
デフォルトボタン (初期でEnterキーを押したときに動作するボタン)」を設定したい場合の定数を、以下のテーブルにまとめます。
定数 | 値 | 説明 |
---|---|---|
vbDefaultButton1 | 0 | 1 番目のボタンを既定のボタンにする |
vbDefaultButton2 | 256 | 2 番目のボタンを既定のボタンにする |
vbDefaultButton3 | 512 | 3 番目のボタンを既定のボタンにする |
vbDefaultButton4 | 768 | 4 番目のボタンを既定のボタンにする |
title (省略可能) の設定方法について
MsgBoxのタイトルバーに表示する文字列を指定します。
省略すると、タイトルバーには「Microsoft Excel」が表示されます。
titleの設定例
Sub TitleExample()
MsgBox "これはメッセージです", , "カスタムタイトル"
End Sub
このコードでは、MsgBoxに「カスタムタイトル」というタイトルが表示されます。
helpfile 省略可能の設定方法について
MsgBox にヘルプファイルを指定することができます。
「helpfile 引数」を使用すると、メッセージボックスに「ヘルプ」ボタンが表示され、ユーザーがそのボタンをクリックすると、指定されたヘルプファイルが開きます。
ただし、「helpfile 引数」 および「context 引数」は、現在のVBAプロジェクトではほとんど使用されません。
また、指定するヘルプファイル(通常は .chm ファイル)が正しく配置されていないと、ヘルプボタンは機能しません。
helpfileの設定例
Sub HelpFileExample()
MsgBox "詳細はヘルプをご覧ください", vbOKOnly, "ヘルプメッセージ", "C:\Path\To\HelpFile.chm", 1
End Sub
このコードでは、メッセージボックスに「ヘルプ」ボタンが表示され、クリックすると指定されたヘルプファイルが開きます。
しかし、現在のプロジェクトでは .chm ファイルを使用する機会が少なく、この機能を利用するケースは稀です。
適切なヘルプファイルがない場合、この機能は動作しません。
context 省略可能の設定方法について
MsgBox で指定するヘルプファイルのトピック番号を指定することができます。
これにより、特定のセクションやトピックに直接ジャンプしてヘルプ内容を表示することが可能です。
ただし、「helpfile 引数」 および「context 引数」は、現在のVBAプロジェクトではほとんど使用されません。
この機能を利用するケースは非常に稀で、また指定されたヘルプファイルがない場合、この機能は動作しません。
contextの設定例
Sub ContextExample()
MsgBox "詳細はヘルプをご覧ください", vbOKOnly, "ヘルプメッセージ", "C:\Path\To\HelpFile.chm", 100
End Sub
このコードでは、メッセージボックスに指定されたトピック番号(100)が関連付けられており、ヘルプファイル内の該当セクションが開かれるようになっています。
しかし、現在のプロジェクトでこの機能を使うことはほとんどなく、適切なヘルプファイルとトピックが存在しない場合、この機能は期待通りに動作しません。
MsgBoxで条件分岐をする方法
VBAのMsgBoxを使用して「条件分岐」を行うこともできます。
たとえば、「はい」「いいえ」の選択肢を提示し、ユーザーが「はい」を選択した場合は処理を続行し、「いいえ」を選択した場合は処理を中止する、といった条件分岐を簡単に実現できます。
以下は、その具体的なコード例です。
Sub DisplayUserChoice()
Dim userResponse As VbMsgBoxResult
userResponse = MsgBox("処理を続行しますか?", vbYesNo + vbQuestion, "確認")
If userResponse = vbYes Then
MsgBox "処理を続行します。"
'// 処理を続けるコードをここに記述
Else
MsgBox "処理を中止しました。"
'// 処理を中止するコードをここに記述
End If
End Sub
このコードでは、ユーザーが「はい」を選択した場合は処理が続行され、「いいえ」を選択した場合は処理が中止されます。
MsgBox関数は、ユーザーの選択結果を「VbMsgBoxResult型」の変数に格納し、その結果に基づいて処理を分岐させています。
注釈: 「VbMsgBoxResult型」は、MsgBox関数の戻り値として定義される型で、ユーザーが選択したボタンに応じた数値を格納します。この数値を使って処理を分岐させることができます。
前の例では「vbYes」を条件として使用しましたが、「数値」でも同様に条件を設定することが可能です。
次の見出しで、MsgBoxでユーザーが選択した結果がどのような数値で返されるかを解説します。
ユーザーの選択結果を変数に格納する場合の戻り値
MsgBoxでユーザーが選択した結果は、以下のような数値で返されます。
選択肢 | 数値 (VbMsgBoxResult) | 説明 |
---|---|---|
OK | 1 | [OK] ボタンが押された |
Cancel | 2 | [キャンセル] ボタンが押された |
Abort | 3 | [中止] ボタンが押された |
Retry | 4 | [再試行] ボタンが押された |
Ignore | 5 | [無視] ボタンが押された |
Yes | 6 | [はい] ボタンが押された |
No | 7 | [いいえ] ボタンが押された |
通常、「VbMsgBoxResult型」を使用して結果を処理しますが、必要に応じて「数値型(Number型)」で扱うことも可能です。
この場合、数値そのものを使って結果を判断することになりますが、「VbMsgBoxResult型」で扱う方がコードの可読性が高くなります。
Msgboxがよく使用される場面
MsgBoxは以下のような場面で頻繁に使用されます。
ユーザーの確認が必要な場面
ユーザーに確認を求める際、例えばデータを削除する前に確認を行う場合に使用します。
Sub ConfirmDeletion()
Dim userResponse As VbMsgBoxResult
userResponse = MsgBox("本当にデータを削除しますか?", vbYesNo + vbExclamation, "確認")
If userResponse = vbYes Then
MsgBox "データを削除しました。"
'// データ削除のコードをここに記述
Else
MsgBox "削除をキャンセルしました。"
'// キャンセル処理のコードをここに記述
End If
End Sub
処理が完了した際の通知
処理が完了したことを通知するために、MsgBoxを使用します。
Sub NotifyCompletion()
MsgBox "処理が完了しました。", vbInformation, "完了"
End Sub
MsgBoxを使用する際の注意ポイント
MsgBoxを使用する際には、いくつかの注意ポイントがあります。
これらを意識することで、予期せぬトラブルを避けることができます。
- メッセージ内容が長すぎないようにする
- MsgBoxに表示されるメッセージが長すぎると、ユーザーが内容を理解するのに時間がかかり、操作性が低下します。
短くて要点をまとめたメッセージを心がけましょう。
- MsgBoxに表示されるメッセージが長すぎると、ユーザーが内容を理解するのに時間がかかり、操作性が低下します。
- 必要以上にMsgBoxを多用しない
- MsgBoxを頻繁に表示すると、ユーザーにとって煩わしいと感じることがあります。
重要な場面でのみ使用し、他の場面ではステータスバーやセルにメッセージを表示するなどの代替手段を検討しましょう。
- MsgBoxを頻繁に表示すると、ユーザーにとって煩わしいと感じることがあります。
Msgboxを使用してみよう
ここからは、Msgboxの具体的な使用例を紹介します。
使用例1: 簡単なメッセージを表示する
VBAでメッセージボックスを使用して、ユーザーに簡単な通知を表示する方法を紹介します。
主な使用用途
処理が完了したことをユーザーに知らせたい場合や、情報を提供するために使用します。
Sub SimpleMessageBox()
MsgBox "処理が完了しました。", vbInformation, "通知"
End Sub
- STEP1メッセージボックスの表示
MsgBox関数を使用して、メッセージボックスを表示します。
このメッセージボックスには、「処理が完了しました。」というメッセージが表示され、情報アイコンが付いています。
また、タイトルバーには「通知」と表示されます。
処理結果
このコードで使用している機能
- なし
1行ずつ解説
- Sub SimpleMessageBox()
- この行で、新しいサブルーチン(マクロ)「SimpleMessageBox」を定義しています。
これを実行すると、指定されたタスクが実行されます。
- この行で、新しいサブルーチン(マクロ)「SimpleMessageBox」を定義しています。
- MsgBox “処理が完了しました。”, vbInformation, “通知”
- MsgBox関数は、指定されたメッセージを表示するダイアログボックスを表示します。
ここでは、以下の要素を指定しています。"処理が完了しました。"
: ユーザーに表示するメッセージ。- vbInformation: メッセージボックスに情報アイコン(”i”)を表示する定数。
"通知"
: メッセージボックスのタイトルバーに表示される文字列。
- MsgBox関数は、指定されたメッセージを表示するダイアログボックスを表示します。
- End Sub
- この行で、Sub SimpleMessageBoxのサブルーチンが終了することを示しています。
これでサブルーチンのすべての処理が完了します。
- この行で、Sub SimpleMessageBoxのサブルーチンが終了することを示しています。
このコードを使用すると、VBAで処理が完了したことをユーザーに通知するメッセージボックスを簡単に表示できます。
特に、ユーザーに重要な情報を知らせる必要がある場合や、プロセスの終了を確認させたい場合に便利です。
使用例2: Yes/Noでユーザーに確認を求める
ユーザーにYes/Noで確認を求め、その選択に応じて処理を続行するか中止する方法を紹介します。
Sub UserChoiceExample()
Dim response As VbMsgBoxResult
response = MsgBox("本当に終了しますか?", vbYesNo + vbQuestion, "確認")
If response = vbYes Then
MsgBox "プログラムを終了します。"
'// 終了処理のコード
Else
MsgBox "キャンセルされました。"
'// キャンセル処理のコード
End If
End Sub
- STEP1確認メッセージボックスの表示
MsgBox関数を使用して、ユーザーにYes/Noの選択肢を持つ確認メッセージボックスを表示します。
- ラベルユーザーの選択に基づく処理の分岐
ユーザーが「はい」を選択した場合は処理を続行し、「いいえ」を選択した場合は処理を中止します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub UserChoiceExample()
- この行で、「UserChoiceExample」という新しいサブルーチン(マクロ)を定義しています。
このサブルーチンは、ユーザーに確認を求め、その応答に基づいて処理を行います。
- この行で、「UserChoiceExample」という新しいサブルーチン(マクロ)を定義しています。
- Dim response As VbMsgBoxResult
- ここでは、「response」という変数を定義しています。
この変数は「VbMsgBoxResult型」であり、ユーザーの選択結果(「はい」「いいえ」など)を格納します。
- ここでは、「response」という変数を定義しています。
- response = MsgBox(“本当に終了しますか?”, vbYesNo + vbQuestion, “確認”)
- MsgBox関数を使用して、ユーザーに「本当に終了しますか?」という確認メッセージを表示します。
このメッセージボックスには、「はい(Yes)」と「いいえ(No)」のボタンが表示されます。
また、アイコンは質問アイコン(vbQuestion)で、タイトルバーには「確認」と表示されます。
ユーザーが選択した結果は、変数「response」に格納されます。
- MsgBox関数を使用して、ユーザーに「本当に終了しますか?」という確認メッセージを表示します。
- If response = vbYes Then
- Ifステートメントを使用して、ユーザーの選択結果が「はい(Yes)」であるかどうかを確認します。
変数「response」の値が「vbYes(「はい」)」に等しい場合に、次の行のコードが実行されます。
- Ifステートメントを使用して、ユーザーの選択結果が「はい(Yes)」であるかどうかを確認します。
- MsgBox “プログラムを終了します。”
- ユーザーが「はい」を選択した場合、MsgBox関数を使用して「プログラムを終了します。」というメッセージを表示します。
- ‘// 終了処理のコード
- ここには、実際にプログラムを終了するためのコードが記述されます。
この行はコメントアウトされており、実際の終了処理はここに追加する必要があります。
- ここには、実際にプログラムを終了するためのコードが記述されます。
- Else
- IfステートメントのElse部分です。
ユーザーが「いいえ(No)」を選択した場合に、次の行のコードが実行されます。
- IfステートメントのElse部分です。
- MsgBox “キャンセルされました。”
- ユーザーが「いいえ」を選択した場合、MsgBox関数を使用して「キャンセルされました。」というメッセージを表示します。
- ‘// キャンセル処理のコード
- ここには、キャンセル時の処理コードを記述します。
この行もコメントアウトされており、実際のキャンセル処理はここに追加します。
- ここには、キャンセル時の処理コードを記述します。
- End If
If
ステートメントの終了を示します。
ここで条件分岐の処理が完了します。
- End Sub
- この行で、UserChoiceExampleサブルーチンの定義が終了します。
これにより、サブルーチンのすべての処理が完了します。
- この行で、UserChoiceExampleサブルーチンの定義が終了します。
このコードは、ユーザーに対してプログラムの終了を確認するメッセージボックスを表示し、その選択に基づいて処理を行います。
MsgBox関数を使用してユーザーからの入力を取得し、その結果を「Ifステートメント」で評価することで、簡単にプログラムのフローを制御できます。
このような確認メッセージは、誤操作を防ぐための重要な手段であり、特に重要な操作(例: プログラムの終了やデータの削除など)において、ユーザーに最終確認を促すことで、安全性と信頼性を高めることができます。
実際のシナリオでは、このサブルーチンをベースにして、適切な終了処理やキャンセル処理のコードを追加することで、ユーザーの意図に応じた柔軟なプログラムを構築することが可能です。
まとめ
MsgBoxを活用することで、Excel VBAでのユーザーインタラクションが簡単に実現でき、プログラムの操作性が向上します。
正しい使い方を学び、効果的に使用することで、ユーザーにとっても使いやすいプログラムを作成できるようになります。
ポイントのおさらい
この記事の内容を実践することで、VBAでのユーザーインタラクションが効果的に行え、プログラムの操作性が向上することを期待できます。
まずは、サンプルコードを試してみて、自分のプロジェクトに取り入れてみてください。