MsgBox は、メッセージとボタンを表示し、押されたボタンを数値で返す VBA の関数です。 2番目の引数に「ボタンの種類+アイコン+既定ボタン」の定数を足して渡し、戻り値を vbYes や vbCancel と比べて処理を分けます。

この記事では、足し算に使う定数と戻り値を1枚の早見表にまとめ、はい・いいえの分岐、改行の入れ方、入力を受け取る InputBox のキャンセル判定までを、コピーして使えるコードで説明します。InputBox 関数と Application.InputBox メソッドの違いと選び方も比較表にしました。

確認環境:構文・定数の値・戻り値は、Microsoft Learn の Office VBA リファレンス(英語版)の MsgBox 関数、InputBox 関数、Application.InputBox メソッド、Miscellaneous constants、VarType 関数の各ページを 2026-10-06 に開いて照合しました。定数を足した合計値は Python 3.11 で検算しています。

この記事の結論

はい・いいえで分岐する形です。

If MsgBox("保存しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
    ' はい のときの処理
Else
    ' いいえ のときの処理
End If

InputBox 関数のキャンセルを見分ける形です。

Dim ans As String
ans = InputBox("名前を入力してください", "入力")
If StrPtr(ans) = 0 Then
    ' キャンセル
ElseIf ans = "" Then
    ' 何も入力せずに OK
Else
    ' 入力あり
End If

Application.InputBox メソッドなら、キャンセルのとき戻り値が False になります。

Dim v As Variant
v = Application.InputBox("数量を入力してください", "入力", Type:=1)
If VarType(v) = vbBoolean Then
    ' キャンセル(False が返っている)
Else
    ' v に数値が入っている
End If
  • ボタン・アイコン・既定ボタンは、各グループから1つずつ選んで + で足します。
  • 戻り値は vbOK=1、vbCancel=2、vbAbort=3、vbRetry=4、vbIgnore=5、vbYes=6、vbNo=7 です。数値ではなく定数名で比べます。
  • 数値やセル範囲を受け取りたいとき、キャンセルを公式の記載どおりに判定したいときは Application.InputBox を選びます。

MsgBoxのボタン・アイコン・戻り値早見表

値は Microsoft Learn の MsgBox 関数のページの記載です。A・B・C の各グループから1つずつ選び、値を足したものが buttons 引数になります。

グループ 定数 値 表示されるもの
A:ボタン vbOKOnly 0 OK(省略時の既定)
A:ボタン vbOKCancel 1 OK、キャンセル
A:ボタン vbAbortRetryIgnore 2 中止、再試行、無視
A:ボタン vbYesNoCancel 3 はい、いいえ、キャンセル
A:ボタン vbYesNo 4 はい、いいえ
A:ボタン vbRetryCancel 5 再試行、キャンセル
B:アイコン vbCritical 16 警告(Critical Message)アイコン
B:アイコン vbQuestion 32 問い合わせ(Warning Query)アイコン
B:アイコン vbExclamation 48 注意(Warning Message)アイコン
B:アイコン vbInformation 64 情報(Information Message)アイコン
C:既定ボタン vbDefaultButton1 0 1番目のボタンが既定
C:既定ボタン vbDefaultButton2 256 2番目のボタンが既定
C:既定ボタン vbDefaultButton3 512 3番目のボタンが既定
C:既定ボタン vbDefaultButton4 768 4番目のボタンが既定
戻り値の定数 値 押されたボタン
vbOK 1 OK
vbCancel 2 キャンセル
vbAbort 3 中止
vbRetry 4 再試行
vbIgnore 5 無視
vbYes 6 はい
vbNo 7 いいえ

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「VBA MsgBoxの使い方|ボタン・戻り値一覧とInputBox判定」

MsgBoxの構文と引数

MsgBox(prompt, [buttons], [title], [helpfile, context])
引数 必須 内容 省略したとき
prompt 必須 表示するメッセージ。長さの上限はおよそ 1024 文字(文字の幅による) ―
buttons 省略可 ボタンの種類・アイコン・既定ボタン・モーダルの種類を足した数値 0(OK ボタンだけ)
title 省略可 タイトルバーの文字列 アプリケーション名が表示される
helpfile 省略可 ヘルプファイル。指定するときは context も必要 ―
context 省略可 ヘルプのコンテキスト番号。指定するときは helpfile も必要 ―

表示するだけなら、かっこなしで1行書けば済みます。押されたボタンで処理を分けるときは、かっこを付けて戻り値を受け取ります。

Sub MsgBoxBasic()
    Dim r As Long

    ' 表示するだけ(戻り値は使わない)
    MsgBox "処理が終わりました。", vbInformation, "完了"

    ' 戻り値を受け取る(かっこを付ける)
    r = MsgBox("処理を続けますか?", vbOKCancel + vbQuestion, "確認")
    If r = vbOK Then
        MsgBox "続けます。"
    Else
        MsgBox "中止しました。"
    End If
End Sub

ボタンとアイコンを足し算で指定する

よく使う組み合わせと、その合計値です。合計の数値を直接書いても動きますが、定数を + でつないで書くと、何を表示するのかが読み取れます。

用途 buttons の書き方 合計 返る可能性のある値
お知らせ vbOKOnly + vbInformation 64 vbOK
続行の確認 vbOKCancel + vbExclamation 49 vbOK、vbCancel
はい・いいえ vbYesNo + vbQuestion 36 vbYes、vbNo
はい・いいえ(いいえを既定に) vbYesNo + vbQuestion + vbDefaultButton2 292 vbYes、vbNo
削除の確認(いいえを既定に) vbYesNo + vbExclamation + vbDefaultButton2 308 vbYes、vbNo
保存して閉じるかの確認 vbYesNoCancel + vbQuestion 35 vbYes、vbNo、vbCancel
3択でキャンセルを既定に vbYesNoCancel + vbQuestion + vbDefaultButton3 547 vbYes、vbNo、vbCancel
やり直しの確認 vbRetryCancel + vbCritical 21 vbRetry、vbCancel
中止・再試行・無視(無視を既定に) vbAbortRetryIgnore + vbCritical + vbDefaultButton3 530 vbAbort、vbRetry、vbIgnore

既定ボタンを「いいえ」にする

既定ボタンは、Enter キーを押したときに選ばれるボタンです。削除のように取り消しにくい操作の確認では、2番目の「いいえ」を既定にしておくと、Enter を続けて押しても処理が進みません。

Sub ConfirmDelete()
    If MsgBox("選択した行を削除します。よろしいですか?", _
              vbYesNo + vbExclamation + vbDefaultButton2, "削除の確認") = vbYes Then
        MsgBox "削除の処理をここに書きます。"
    End If
End Sub

3つのボタンを Select Case で分ける

Sub ConfirmSave()
    Select Case MsgBox("変更を保存しますか?", vbYesNoCancel + vbQuestion, "確認")
        Case vbYes
            ' 保存の処理をここに書く
        Case vbNo
            ' 保存しないで先へ進む
        Case vbCancel
            Exit Sub
    End Select
    MsgBox "次の処理へ進みます。"
End Sub

MsgBox 関数のページには、キャンセルボタンがあるダイアログでは、Esc キーを押すとキャンセルを押したのと同じ結果になると書かれています。vbOKCancel・vbYesNoCancel・vbRetryCancel を使うときは、vbCancel の分岐を必ず用意します。

そのほかの buttons の定数

定数 値 内容
vbApplicationModal 0 アプリケーションモーダル。応答するまでそのアプリケーションの操作を続けられない
vbSystemModal 4096 システムモーダル
vbMsgBoxHelpButton 16384 ヘルプボタンを追加する
vbMsgBoxSetForeground 65536 メッセージボックスを最前面のウィンドウにする
vbMsgBoxRight 524288 文字を右寄せにする
vbMsgBoxRtlReading 1048576 ヘブライ語・アラビア語のシステムで右から左に表示する

メッセージを改行する(vbCrLf・vbNewLine・vbLf)

メッセージの途中に改行の定数を & でつなぎます。

Sub MsgBoxNewLine()
    MsgBox "取り込みが終わりました。" & vbCrLf & _
           "件数:120 件" & vbCrLf & vbCrLf & _
           "続けて集計しますか?", vbYesNo + vbQuestion, "確認"
End Sub
定数 中身 説明(Miscellaneous constants のページの記載)
vbCrLf Chr(13) + Chr(10) キャリッジリターンとラインフィードの組み合わせ
vbNewLine Chr(13) + Chr(10)。Macintosh では Chr(13) 実行している環境に合った改行
vbCr Chr(13) キャリッジリターン
vbLf Chr(10) ラインフィード

MsgBox 関数のページでは、prompt の行は Chr(13)、Chr(10)、Chr(13) & Chr(10) のどれでも区切れると説明されています。つまり MsgBox の改行は、4つのどの定数でも書けます。

条件 選ぶもの
Windows の Excel で使う vbCrLf
Windows と Mac の両方で同じコードを使う vbNewLine
1文字の改行として扱いたい(文字数を数える、Replace で取り除く) vbLf
空行を1行入れたい 改行の定数を2つ続ける(vbCrLf & vbCrLf)

1つのブックの中では、どれか1つに決めておくと読みやすくなります。

InputBoxで入力を受け取り、キャンセルを判定する

InputBox 関数は、入力欄のあるダイアログを表示し、入力された文字列を返します。

InputBox(prompt, [title], [default], [xpos], [ypos], [helpfile, context])
引数 内容 省略したとき
prompt メッセージ(必須)。上限はおよそ 1024 文字 ―
title タイトルバーの文字列 アプリケーション名
default 入力欄に最初から入れておく文字列 入力欄は空
xpos・ypos 画面の左端・上端からの距離(単位は twip) 横は中央、縦は画面の上からおよそ3分の1の位置

InputBox 関数のページには、OK を押すと入力欄の内容が返り、キャンセルを押すと長さ0の文字列("")が返ると書かれています。つまり、戻り値を "" と比べるだけでは、「キャンセル」と「何も入力せずに OK」が同じ結果になります。

2つを同じ扱いにしてよい場合

「空なら何もしない」で足りる処理は、この形で十分です。

Sub AskName()
    Dim ans As String
    ans = InputBox("シート名を入力してください", "シートの追加", "集計")
    If ans = "" Then Exit Sub        ' キャンセル、または空のまま OK
    MsgBox "シート名:" & ans      ' ここにシートを追加する処理を書く
End Sub

キャンセルと「空で OK」を見分ける場合

広く使われているのが、文字列変数に受けてから StrPtr 関数で調べる書き方です。キャンセルのときは 0、空のまま OK を押したときは 0 以外になることを利用します。

Sub AskMemo()
    Dim ans As String
    ans = InputBox("メモを入力してください(空欄も可)", "メモ")
    If StrPtr(ans) = 0 Then
        MsgBox "キャンセルされました。"
        Exit Sub
    End If
    If ans = "" Then
        MsgBox "空欄で登録します。"
    Else
        MsgBox "入力内容:" & ans
    End If
End Sub

StrPtr は InputBox 関数のページには出てこない関数です。Microsoft Learn に書かれている内容だけで組みたい場合は、次の Application.InputBox メソッドを使うと、キャンセルを False で受け取れます。

InputBox関数とApplication.InputBoxメソッドの違いと選び方

Excel には、VBA の InputBox 関数とは別に、Application オブジェクトの InputBox メソッドがあります。InputBox(...) と書けば関数、Application.InputBox(...) と書けばメソッドが呼ばれます。

Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
比べる点 InputBox 関数 Application.InputBox メソッド
書き方 InputBox("...") Application.InputBox("...")
使える場所 VBA 全般 Excel
戻り値 文字列 Variant(Type 引数で種類を指定できる)
キャンセルのとき 長さ0の文字列 "" False
空のまま OK との見分け 戻り値だけでは同じ "" になる キャンセルは False(Boolean)なので型で見分けられる
入力の種類の指定 なし(常に文字列) Type 引数で数値・文字列・論理値・セル範囲などを指定
セル範囲の選択 できない Type:=8 で Range オブジェクトを受け取れる
タイトルを省略したとき アプリケーション名 Input
prompt の長さ およそ 1024 文字まで 255 文字まで(超えるとプロンプトが表示されず、エラー 2015 が返る)
位置の引数と単位 xpos・ypos(twip) Left・Top(ポイント)
入力欄の制限 255 文字まで受け付け、戻り値は 254 文字に切り詰められる。改行は入力できない ―

Type 引数に指定できる値です。

Type の値 受け取るもの
0 数式
1 数値
2 文字列(テキスト)
4 論理値(True または False)
8 セル参照(Range オブジェクト)
16 #N/A などのエラー値
64 値の配列

Type を省略すると文字列が返ります。数値と文字列の両方を受け付けたいときは Type:=1 + 2 と足して指定します。

条件 選ぶもの
文字列を1つ受け取るだけで、空欄とキャンセルを同じ扱いにしてよい InputBox 関数
数値だけを受け付けたい Application.InputBox(Type:=1)
セル範囲をマウスで選んでもらいたい Application.InputBox(Type:=8)
キャンセルと「空のまま OK」を分けたい Application.InputBox(戻り値の型を調べる)
Excel 以外の Office アプリでも同じコードを使う InputBox 関数
255 文字を超える長い説明を表示したい InputBox 関数

数値を受け取る

Sub AskQuantity()
    Dim v As Variant
    v = Application.InputBox("数量を入力してください", "数量", 1, Type:=1)
    If VarType(v) = vbBoolean Then
        MsgBox "キャンセルされました。"
        Exit Sub
    End If
    MsgBox "数量:" & v
End Sub

キャンセルの判定は、値を False と比べるのではなく、VarType で型を調べています。 数量に 0 が入力される場合もあるので、「Boolean 型かどうか」で見分けると、0 とキャンセルを取り違えません。VarType 関数は Boolean 型のとき vbBoolean(11)を返します。

文字列を受け取り、空のまま OK と見分ける

Sub AskComment()
    Dim v As Variant
    v = Application.InputBox("コメントを入力してください(空欄も可)", "コメント", Type:=2)
    If VarType(v) = vbBoolean Then
        MsgBox "キャンセルされました。"
    ElseIf v = "" Then
        MsgBox "空欄で登録します。"
    Else
        MsgBox "コメント:" & v
    End If
End Sub

セル範囲を選んでもらう

Application.InputBox メソッドのページには、Type が 8 のときは Range オブジェクトが返るので、Set ステートメントで代入すると書かれています。キャンセルのときは False が返り Range オブジェクトにならないため、代入の行を On Error で囲み、範囲が入ったかどうかを Nothing で確かめます。

Sub AskRange()
    Dim rng As Range

    On Error Resume Next
    Set rng = Application.InputBox("集計する範囲を選択してください", "範囲の選択", Type:=8)
    On Error GoTo 0

    If rng Is Nothing Then
        MsgBox "キャンセルされました。"
        Exit Sub
    End If
    MsgBox "選択されたセルの数:" & rng.Cells.Count
End Sub

入力されるまで繰り返す例

MsgBox と Application.InputBox を組み合わせた、1以上の数値が入るまで聞き直す例です。

Sub AskUntilValid()
    Dim v As Variant

    Do
        v = Application.InputBox("1 以上の数量を入力してください", "数量", Type:=1)
        If VarType(v) = vbBoolean Then
            MsgBox "入力を中止しました。", vbInformation, "数量"
            Exit Sub
        End If
        If v >= 1 Then Exit Do
        If MsgBox("1 以上の値が必要です。入力し直しますか?", _
                  vbRetryCancel + vbExclamation, "数量") = vbCancel Then Exit Sub
    Loop

    MsgBox "数量 " & v & " で登録します。", vbInformation, "数量"
End Sub

つまずきやすい点と直し方

症状 原因 直し方
r = MsgBox "続けますか?", vbYesNo が構文エラーになる 戻り値を受け取るのに、かっこが付いていない r = MsgBox("続けますか?", vbYesNo) と書く
MsgBox("完了", vbInformation) だけの行が構文エラーになる 戻り値を使わない行で、複数の引数をかっこで囲んでいる かっこを外して MsgBox "完了", vbInformation と書く
Esc を押したときの動きが決まっていない キャンセルボタンのあるダイアログで vbCancel の分岐が無い Case vbCancel または Else を用意する
InputBox をキャンセルしたのに、空の文字列のまま後続の処理が動く キャンセルで "" が返っている If ans = "" Then Exit Sub を入れる
Application.InputBox の Type:=8 で、キャンセルすると止まる False を Set で代入しようとしている On Error Resume Next で囲み、If rng Is Nothing で判定する
Application.InputBox でメッセージが表示されない Prompt が 255 文字を超えている メッセージを短くする
アイコンが2つ指定されて意図と違う表示になる 同じグループの定数を2つ足している(例:vbCritical + vbQuestion = 48 = vbExclamation) 各グループから1つだけ選ぶ

確かめて分かったこと

Microsoft Learn の各ページを読み比べて分かった、見落としやすい点です。

  1. InputBox 関数のキャンセルは、公式の記載では「長さ0の文字列を返す」までです。 空のまま OK を押した場合と戻り値の内容は同じになります。
  2. Application.InputBox のタイトルを省略すると「Input」になります。 InputBox 関数と MsgBox はアプリケーション名です。タイトルは省略せずに書くと表示がそろいます。
  3. 位置の単位が違います。 InputBox 関数の xpos・ypos は twip、Application.InputBox の Left・Top はポイントです。同じ数値を渡しても同じ位置にはなりません。
  4. Application.InputBox の Prompt は 255 文字までです。 MsgBox と InputBox 関数のおよそ 1024 文字より短いので、長い説明を移すときに気をつけます。
  5. InputBox 関数の入力欄は 255 文字まで受け付け、戻り値は 254 文字に切り詰められます。 改行も入力できません。長い文章の入力には向かないので、セルやユーザーフォームに入力してもらう形にします。
  6. 同じグループの定数を足すと、別の定数と同じ値になります。 vbCritical(16)と vbQuestion(32)を足すと 48 で、vbExclamation と同じ値です。vbOKCancel(1)と vbAbortRetryIgnore(2)を足すと 3 で、vbYesNoCancel と同じ値になります。

よくある質問

Q. MsgBox の戻り値とは? A. 押されたボタンを表す 1〜7 の数値です。vbOK=1、vbCancel=2、vbAbort=3、vbRetry=4、vbIgnore=5、vbYes=6、vbNo=7 で、If MsgBox(...) = vbYes Then のように定数名で比べます。

Q. MsgBox で改行するには? A. メッセージの途中に & vbCrLf & を入れます。MsgBox は vbCrLf・vbNewLine・vbCr・vbLf のどれでも改行として扱うので、ブックの中で1つに決めて使います。

Q. InputBox でキャンセルされたか判定するには? A. InputBox 関数は "" が返るので、空欄と同じ扱いでよければ If ans = "" Then Exit Sub と書きます。空のまま OK と分けたいときは、Application.InputBox を使い、VarType(v) = vbBoolean ならキャンセルと判定します。

Q. InputBox 関数と Application.InputBox の違いは? A. Application.InputBox は Excel 専用のメソッドで、Type 引数で数値やセル範囲を受け取れ、キャンセルのとき False を返します。InputBox 関数は常に文字列を返し、キャンセルのときは長さ0の文字列を返します。

Q. 「いいえ」を最初から選ばれた状態にするには? A. buttons に vbDefaultButton2 を足します。vbYesNo + vbQuestion + vbDefaultButton2(合計 292)と書くと、2番目の「いいえ」が既定ボタンになります。

まとめ

  • MsgBox の buttons は「ボタン+アイコン+既定ボタン」を各グループから1つずつ足す。はい・いいえの確認は vbYesNo + vbQuestion。
  • 戻り値は vbOK=1〜vbNo=7。 戻り値を使うときは、かっこを付けて If MsgBox(...) = vbYes Then と書く。
  • 取り消しにくい操作の確認は vbDefaultButton2 で「いいえ」を既定にする。
  • 改行は & vbCrLf &。 Windows と Mac の両方で使うコードは vbNewLine。
  • InputBox 関数はキャンセルで "" を返す。 空欄と同じ扱いでよければ If ans = "" Then Exit Sub。
  • 数値・セル範囲の入力と、キャンセルの確実な判定は Application.InputBox。 キャンセルは VarType(v) = vbBoolean、Type:=8 は Set と Is Nothing で受ける。

参考・出典

  • Microsoft Learn「MsgBox function」「InputBox function」「Miscellaneous constants」「VarType function」(Office VBA Reference、learn.microsoft.com、2026-10-06 に確認)
  • Microsoft Learn「Application.InputBox method (Excel)」(2026-10-06 に確認)

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「VBA MsgBoxの使い方|ボタン・戻り値一覧とInputBox判定」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?