
メッセージボックスとIF文を組み合わせて使う
今回はメッセージボックスとIF文について勉強していきます。
以前勉強したボタンと連動する作業になります。

ボタンを押した際「本当に〇〇しても良いですか?」のようなダイアログボックスを出します。
作業中に間違えてワークシート右上の×ボタンをクリックした事はありませんか?
そんなときはこの様なダイアログボックスが出るはずです。
「ほんとに消しても(終了しても)良いですか?」という内容のメッセージボックスです。
ExcelVBAを使えばこのようなメッセージボックスを作る事ができます。
メッセージボックスを出してあげるとデータを間違えて消してしまったという事も少なくなりますよね。
早速勉強していきましょう。ここで1つ提案です。せっかくなのでIF文も一緒に勉強していただきます。
理由はメッセージボックスとの相性が良い為です。記事を読んでいただくと理由が分かります。
VBAのIF文はワークシート関数のIFとほぼ同じ機能です。よって馴染みのある方も多いです。
呼び方としてはIfステートメントと呼ばれる事もあります。少し長いので以降はIF文と書いていきます。
前回の記事
メソッドについて勉強しました。Excelファイルを使ってプロパティ、メソッドについて説明しています。
クリア、コピー&ペースト等を使ってコードの解説をしています。
今は完全に理解出来なくても良いので先に進みましょう。
本記事での課題
今回の課題です。本記事と次の記事は非常に重要です。

メッセージボックスとIF文を使ってみよう
メッセージボックスとIF文について
実行ボタンを押した後に以下のようにメッセージボックスを出すことにします。

エクスクラメーションマークなどのアイコンが表示されるとアプリケーションっぽくなりますよね。
同時にIF文について勉強できるので採用してみました。それでは建付けを説明します。
実行ボタンを押したら上記のようにメッセージボックスを出します。
OKならOKの処理を行いキャンセルならキャンセルの処理を行うというコードを書いてみます。
事例:コードを紹介
まずはコードを紹介します。
Option Explicit
Sub メッセージボックスとIF文()
'変数を定義(分かりやすくする為に日本語で書きます)
Dim 回答 As Long
'回答という変数にOKかNGの値を代入する。OKだと1、NGだと2が返ってくる。
回答 = MsgBox("実行しますか?", vbOKCancel + vbExclamation, "実行確認")
'もし変数「回答」が1だったら・・・
If 回答 = 1 Then
'指定のセルに OKですよ と表示
Range("A1").Value = "OKですよ"
'回答が1ではなかったら・・・
Else
'指定のセルに Cancelですよ と表示
Range("A1").Value = "Cancelですよ"
End If
End Sub
キーとなるのは2つ。メッセージボックスの書き方とIF文の書き方ですね。
メッセージボックス
コードのフォーマットです。以下のように書きます。引数は5つで1つ目のPromptが必須です。
[ ] の中は省略可能ですが赤くマーキングした3つは使用頻度が高いので覚えましょう。
- MsgBox prompt , [Buttons],[Title],[HelpFile],[Context]
prompt
メッセージボックスに表示させる文字です。ユーザーに読んでもらう文字を記入します。
上の画像に置き換えると「実行しますか?」という文字になります。
Buttons
ボタンの種類やアラートマークの設定をします。
今回はOKとCancelを表示させたかったのでvbOKCancelにしています。
+vbExclamationで「注意してください」というイメージの警告メッセージを出しています。
上の画像に置き換えると「△の中に!マークがある表示」ですね。エクスクラメーションマークです。
アラートマークのリストです。必要に応じて使ってみてください。
番号 | 定数 | 値 | 使い時 | 画像 |
---|---|---|---|---|
1 | vbCritical | 16 | 処理に問題がある時に使いましょう | ![]() |
2 | vbQuestion | 32 | 問い合わせしたい時に使いましょう | ![]() |
3 | vbExclamation | 48 | 警告したい時に使いましょう | ![]() |
4 | vbInformation | 64 | 情報を伝える時に使いましょう | ![]() |
Title
メッセージボックスのタイトルです。入力しておけばタイトルを付ける事ができます。
上の画像に置き換えると「テスト」という文字です。
HelpFile と Context は私も分かりません。(すいません)
多分使わないと思いますが興味ある方は調べてみてください。
ボタンの仕様
今回はコード内でVbOKCancelというコードを書いています。
このコードで「OKボタン」と「キャンセルボタン」を用意しています。
標準は無いです。複数仕様がありますのでご自身の環境にあったものを選んで使ってください。
番号 | 定数 | 値 | 内容 |
---|---|---|---|
1 | vbOKOnly | 0 | 「OK」ボタンのみ |
2 | vbOKCancel | 1 | 「OK」ボタンと「キャンセル」ボタン |
3 | vbAbortRetryIgnore | 2 | 「中止」ボタンと「再試行」ボタンと「無視」ボタン |
4 | vbYesNoCancel | 3 | 「はい」ボタンと「いいえ」ボタンと「キャンセル」ボタン |
5 | vbYesNo | 4 | 「はい」ボタンと「いいえ」ボタン |
ボタンの戻り値
下のテーブルの様にボタン毎に戻り値が決まっています。文字列である定数を選択いただいてもOKです。
メッセージボックスのボタンは色々な種類があります。
命令+回答をフォーマット化しておくと迷わず使う事ができて良いです。
番号 | 定数 | 戻り値 | 説明 |
---|---|---|---|
1 | vbOK | 1 | OK |
2 | vbCancel | 2 | キャンセル |
3 | vbAbort | 3 | 中止 |
4 | vbRetry | 4 | 再試行 |
5 | vbIgnore | 5 | 無視 |
6 | vbYes | 6 | はい |
7 | vbNo | 7 | いいえ |
今回のコードではボタンの仕様に対してvbOKCancelを使っています。
よって演算後の戻り値は「1」、もしくは「2」という事になります。
IF文
次にIF文です。ワークシート関数でもお馴染みの機能です。いわゆる分岐処理です。
IF文もプログラムの中でフォーマット化されているので形が決まっています。
If 条件 Then
'条件がTrueだった時の処理
Else
'条件がFalseだった時の処理
End If
これに当てはめればOK。コードを都度考えなくても良いです。簡単ですよね。
ワークシート関数でIF文を書いている人達はイメージしやすい仕様になっています。
コードを用意する際に変更が入るのは以下3つです。
- 条件(演算子を用いた演算など)
- 条件がTrueだった時の処理(条件を判定したあとの処理)
- 条件がFalseだった時の処理(条件を判定したあとの処理)
VBAの方がワークシート関数より見易い
ワークシートでは条件分岐の関数を横に書いてますがVBAでは条件分岐のコードを縦に書きます。
VBAの方が改行もされて整理した状態でIf文を見ることが出来ますよね。
あくまで私見ですがむしろVBAの方が見易い気がしませんか。
IF(条件,Trueの時,Falseの時)という関数を縦に見易く並べているという感じを持っています。
今回のコードの仕様です
メッセージボックスでOKボタンが押されると演算が行われ変数「回答」に1が代入されます。
その後セルA1に「OKですよ」と表示されます。
メッセージボックスでキャンセルボタンが押されて変数「回答」に2が代入された時はどうでしょうか。
答えはセルA1に「Cancelですよ」と表示されるというコードになっています。
応用編
Ifステートメントの中にIfステートメントを用意する事もできます。
Ifステートメントで用意できる選択肢が増えます。
応用編ExcelVBA【Ifのネスト&For】マクロ内で分岐とループを組み合わせる-4
MsgBox関数には「保存」ボタンが無いです。うまくアレンジして「保存」ボタンを再現しています。
応用編VBA|メッセージボックスの「保存」ボタンを使わずにデータをSaveする
メッセージボックスとIfステートメントは色々な作業に使います。
VBAを使ってPDFを出力するという作業の中でも使ってみました。
まとめ
メッセージボックスの作り方と使い方をIF文を交えて勉強していただきました。
IF文についてはワークシート関数の様にIF文を重ねて書いたりすることも可能です。
IF文が理解出来るとコードの幅が広がりやれることや表現の方法が増えます。
少し難しいですが以下記事を読んでいただくと条件分岐と繰り返し処理をマスター出来ます。
条件分岐&繰り返し処理【エラーにならない】 VBA条件分岐完全ガイドコードのテンプレを紹介
なによりIF文はマクロの記録では再現出来ないコードになります。
これが書けるだけで普通の方が出来ない事が出来るという事になります。
- メッセージボックスの使い方
- IF文の建付け
- MsgBoxとIF文は相性が良い

Enjoy Excel
では次はループ処理です。これもマクロの記録では書けないコードです。
みんなで勉強してスキルアップしましょう。
参考:関連記事
本シリーズはこちらの記事とも連携しています。