VBA – 「はい / いいえ」メッセージボックス(MsgBox)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 8月 1, 2022

このチュートリアルでは、VBAのMsgBox関数を使用して、ユーザーにメッセージボックスを表示する方法(「はい/いいえ」メッセージボックスを含む)を説明します。また、InputBoxes記事も併せてお読みください。

VBAのMsgBox関数

VBAでは、シンプルなMsgBoxを簡単に表示することができます。

MsgBox "これはメッセージボックスです"

vba messagebox jp

しかし、単純なOKのメッセージボックスを表示するだけでなく、もっといろいろなことができます。具体的に説明する前に、複雑な例を簡単に見てみましょう。

VBAのYesNoメッセージボックス

以下では、メッセージボックスを作成します。

  • タイトル  “タイトル1” とプロンプト “テキスト1”
  • クエスチョンマークアイコン
  • 単純な “OK ” ではなく、”はい/いいえ” を選択可能
  • デフォルトのボタン = “いいえ”
Dim answer As Integer

answer = MsgBox("テキスト1", vbQuestion + vbYesNo + vbDefaultButton2, "タイトル1")

vba yes no messagebox jp

メッセージボックスは、ユーザーの選択に応じて、vbYesまたはvbNoを返します。そして、その選択に基づいて異なるアクションを実行することができます。

If answer = vbYes Then
  MsgBox "はい"
Else
  MsgBox "いいえ"
End If

次のセクションでは、メッセージボックスを作成する際に利用できるすべてのオプションについて説明します。次に、MsgBox関数の構文を紹介し、最後に他のメッセージボックスの例について説明します。

VBAメッセージボックスのオプション

下の画像を見てください。メッセージボックスを作成する際に利用できるオプションが(ほぼ)すべて表示されています。アイコンやボタンに注目してください。

vba write messagebox code

これはAutoMacroのプレミアムVBAアドインの「MessageBox Builder」の画面です。MessageBox Builderを使うと、メッセージボックスを素早くデザインして、コードをモジュールに挿入することができます。また、他の多くのコードビルダー、広範なVBAコードライブラリ、およびコーディングツールが含まれています。VBA開発者にとっては必需品です。

MsgBox関数の構文

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

prompt (必須) – メッセージボックスに表示するテキストです。

buttons – 表示するボタンを選択します。省略された場合は、「OKonly」となります。ここでは、表示するアイコンとデフォルトのボタンも指定できます。

title – メッセージボックスの上部に表示されるタイトルです。省略した場合は、現在のアプリケーションの名前が表示されます(例:Microsoft Excel)。

helpfile – ユーザーが「ヘルプ」ボタンをクリックしたときにアクセスできるヘルプファイルを指定します。指定する場合は、コンテキスト(以下)も追加する必要があります。

context – 該当するヘルプトピックに割り当てられたヘルプコンテキスト番号を表す数値式です。

helpfileとcontextの引数は、無視しても構わないでしょう。それらが使われているのを見たことがありません。

メッセージボックスのタイトルとプロンプトをカスタマイズする

MsgBox関数では、タイトルやプロンプトメッセージを次のようにカスタマイズすることができます。

Msgbox "プロンプト",, "タイトル"

例を見てみましょう。

Sub MsgBoxPromptTitle()
  MsgBox "ステップ1完了。OKをクリックしてステップ2を実行します。",, "ステップ1/5"
End Sub

vba messagebox okonly jp

重要! テキストを引用符で囲むことを忘れないようにしてください。

メッセージボックスの改行

vbNewLineを使って、メッセージボックスのプロンプトに改行を加えることもできます。

Sub MsgBoxPromptTitle_NewLine()
  MsgBox "ステップ1完了。" & vbNewLine & "OKをクリックしてステップ2を実行します。", , "ステップ1/5"
End Sub

vba messagebox linebreak jp

テキストを結合するために&記号を使用していることに注意してください。テキストでの&の使い方や、その他の改行方法については、テキストの結合に関する記事で詳しく説明しています。

MsgBoxのアイコン

VBAでは、メッセージボックスにあらかじめ用意された4つのアイコンのいずれかを追加することができます。

定数 アイコン
vbInformation vba information msgbox icon
vbCritical vba critical msgbox icon
vbQuestion vba question msgbox icon
vbExclamation vba exclamation msgbox icon

Icon定数は、buttonの引数の中に入れる必要があります。

Sub MsgBoxQuestionIcon()
  MsgBox "質問アイコンの例", vbQuestion
End Sub

これにより、質問アイコン付きのデフォルトの「OK」メッセージボックスが生成されます。

vba msgbox icon jp

入力すると、VBAエディタに利用可能なオプションが表示されることに注目してください。

vba messagebox syntax jp

アイコンやボタンの正確な構文や名称を覚えておく必要がないので便利です。 それでは、各メッセージボックスのアイコンのデモを行います。

MsgBox アイコン – 情報

Sub MsgBoxInformationIcon()
  MsgBox "情報アイコンの例", vbInformation
End Sub

vba msgbox information icon jp

MsgBox アイコン – クリティカル

Sub MsgBoxCriticalIcon()
  MsgBox "クリティカルアイコンの例", vbCritical
End Sub

vba critical message box jp

MsgBox アイコン – 質問

Sub MsgBoxQuestionIcon()
  MsgBox "疑問符アイコンの例", vbQuestion
End Sub

vba msgbox icon question jp

MsgBox アイコン – 感嘆符

Sub MsgBoxExclamationIcon()
  MsgBox "感嘆符アイコンの例", vbExclamation
End Sub

msgbox exclamation jp

以下では、異なるボタンレイアウトのメッセージボックスを生成することについて説明します。ボタンレイアウトの指定とアイコンの種類の指定を同時に行う場合は、ボタンレイアウトの後に「+」でアイコンの種類を追加します。

Sub MsgBoxQuestionIcon()
  MsgBox "続けますか?", vbOKCancel + vbQuestion
End Sub

vba msgbox question jp

MsgBox 変数

これまで、主にデフォルトの「OK」メッセージボックスを使って作業してきました。OK」メッセージボックスには、1つのオプションしかありません。OK’ を押すと、コードが続行されます。 しかし、他のボタンのグループ化を指定することもできます。OK / キャンセル、はい / いいえなどです。 その場合、どのボタンが押されたかによって、異なる動作をさせたいと思うでしょう。 例を見てみましょう。 以下は、今回生成するメッセージボックスです。

vba yes no msgbox compressed jp

これがコード全体です(次に分解していきます)。

Sub MsgBoxVariable()

Dim answer As Integer
answer = MsgBox("続けますか?", vbQuestion + vbYesNo)

  If answer = vbYes Then
    MsgBox "はい"
  Else
    MsgBox "いいえ"
  End If

End Sub

まず、メッセージボックスの出力を整数型変数に代入します。

Dim answer As Integer

answer = MsgBox("続けますか?", vbQuestion + vbYesNo)

次に、どのボタンが押されたかに応じて、If-Elseで何をするかを決定します。

If answer = vbYes Then
  MsgBox "はい"
Else
  MsgBox "いいえ"
End If

MsgBox関数は整数値(1~7)を返すので、変数を整数型として定義しています。 しかし、整数値を使う代わりに、定数(例:vbOK、vbCancelなど)を使うことができます。 この表を見て、すべての選択肢を確認してください。

ボタン 定数
OK vbOK 1
キャンセル vbCancel 2
中止 vbAbort 3
リトライ vbRetry 4
無視する vbIgnore 5
はい vbYes 6
いいえ vbNo 7

それでは、各ボタンを見てみましょう。

OKメッセージボックス – vbOKOnly

messagebox okonly jp

VBAの標準的なメッセージボックスです。

Sub MsgBox_OKOnly()

Dim answer As Integer
answer = MsgBox("vbOKOnlyの例", vbOKOnly)

End Sub

OK/キャンセル メッセージボックス – vbOKCancel

messagebox ok cancel jp

Sub MsgBox_OKCancel()

Dim answer As Integer
answer = MsgBox("vbOKCancelの例", vbOKCancel)

  If answer = vbOK Then
    MsgBox "OK"
  Else
    MsgBox "キャンセル"
  End If

End Sub

はい/いいえ メッセージボックス – vbYesNo

messagebox yes no jp

Sub MsgBox_YesNo()

Dim answer As Integer
answer = MsgBox("vbYesNoの例", vbYesNo)

  If answer = vbYes Then
    MsgBox "はい"
  Else
    MsgBox "いいえ"
  End If

End Sub

はい/いいえ/キャンセル メッセージボックス – vbYesNoCancel

messagebox yes no cancel jp

Sub MsgBox_YesNoCancel()

Dim answer As Integer
answer = MsgBox("vbYesNoCancelの例", vbYesNoCancel)

  If answer = vbYes Then
    MsgBox "はい"
  ElseIf answer = vbNo Then.
    MsgBox "いいえ"
  Else
    MsgBox "キャンセル"
  End If

End Sub

中止/再試行/無視 メッセージボックス – vbAbortRetryIgnore

messagebox abort retry ignore jp

Sub MsgBox_AbortRetryIgnore()

Dim answer As Integer
answer = MsgBox("vbAbortRetryIgnoreの例", vbAbortRetryIgnore)

  If answer = vbAbort Then
    MsgBox "中止"
  ElseIf answer = vbRetry Then
    MsgBox "再試行"
  Else
    MsgBox "無視"
  End If

End Sub

リトライ/キャンセル メッセージボックス – vbRetryCancel

messagebox retry cancel jp

Sub MsgBox_RetryCancel()

Dim answer As Integer
answer = MsgBox("vbRetryCancelの例", vbRetryCancel)

  If answer = vbRetry Then
    MsgBox "再試行"
  Else
    MsgBox "キャンセル"
  End If

End Sub

VBA メッセージボックスの使用例

マクロを実行する前にメッセージボックスで確認する

このコードは、マクロを呼び出す前に、はい/いいえメッセージボックスを表示します。「はい」がクリックされた場合はマクロが実行され、「いいえ」がクリックされた場合、マクロは実行されません。

Sub Msgbox_BeforeRunning()

  Dim answer As Integer
  answer = MsgBox("Macro1を実行しますか?", vbQuestion + vbYesNo)

  If answer = vbYes Then Call Macro1

End Sub

vba confirmation box run macro jp

はい / いいえ メッセージボックス – Exit Sub

ここでは、マクロの実行を継続するかどうかをユーザーに確認します。「いいえ」がクリックされた場合、コードはSubプロシージャを終了し、そうでない場合はプロシージャが続行されます。

Sub Msgbox_BeforeRunning()

  Dim answer As Integer
  answer = MsgBox("続けますか?", vbQuestion + vbYesNo)

  If answer = vbNo Then Exit Sub
  
  '任意の処理

End

vba yes no exit sub jp

Access VBAのメッセージボックス

これまでの例はすべて、Access VBAでもExcel VBAとまったく同じように動作します。 vba yes no msgbox

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples