簡単1分 【需要確認アンケート】ExcelVBAの勉強会について アンケートはこちら

VBA-11マクロ内でMsgBoxとIfステートメントを組み合わせる

このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています

MsgBox(メッセージボックス)とIf文を組み合わせて使う

Excelでデータを作成している際に間違えてワークシート右上の×ボタンをクリックしてしまった事はありませんか?

そんなときはこの様なダイアログボックス(ポップアップメッセージ)が出るはずです。

EnjoyExcel

「本当に〇〇しても良いですか?」
という様なダイアログボックスを表示させることができます。

メリットとしては作業時の気付きが増えます。
タイミング良く出せば作業の間違いを減らすことができますよ。

ExcelVBAではメッセージボックスを表示させることも出来ますが作る事もできます。MsgBox関数を使います。

メッセージボックスのメリットは作業者の気付きが増えるという事です。

早速勉強していくのですがここで1つ提案です。せっかくなのでIf文も一緒に勉強していただきます。

メッセージボックスとの相性が良いというのが最大の理由です。以降で紹介するコードを見ると理由が分かります。

前回の記事

メソッドについて勉強しました。Excelファイルを使ってプロパティ、メソッドについて説明しています。

クリア、コピー&ペースト等を使ってコードの解説をしています。

前回記事:メソッドを理解する

今は完全に理解出来なくても良いです。自然に分かる様になってきますのでまずは勉強を進めましょう。

目次(各項目へのリンク機能付き)

本記事での課題

今回の課題です。本記事と次の記事は非常に重要です。

EnjoyExcel

課題:
メッセージボックスとIf文を使ってみよう

初心者向けエクセルマクロ学習シリーズ

メッセージボックスとIf文について

Microsoft のドキュメントへのリンクを用意しておきます。これでそれぞの機能はおおよそ理解できます。

Microsoft のドキュメントは分かりにくいという方はこのまま以降の記事をご覧ください。(別途解説しています)

VBAのIf文はワークシート関数のIfとほぼ同じ機能です。よって馴染みのある方も多いです。

呼び方としては「Ifステートメント」と呼ばれる事もあります。少し長いので以降はIf文と書いていきます。

事例:コードを紹介

まずはコードを紹介します。コード画面右上のアイコンを押していただくとコードをコピーする事ができます。

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
VB

コードを実行すると何が起きるのか

実行ボタンを押した後に以下画像のようにメッセージボックスを出すことにします。

OKならOKの処理を行いキャンセルならキャンセルの処理を行うというコードを書いてみます。

エクスクラメーションマークなどのアイコンが表示されるとアプリケーションっぽくなりますよね。

同時にIf文について勉強できるのでこの仕様を採用してみました。それでは建付けを説明します。

解説

ではコードを解説していきます。キーとなる要素は2つです。

  1. メッセージボックス
  2. If文(Ifステートメント)

2つの要素を中心に解説を進めていきます。

1_メッセージボックス

コードのフォーマット(構文)です。以下のように書きます。引数は5つで1つ目のPromptが必須です。

[ ] の中は省略可能です。しかしPromptをはじめButtonsとTitleは非常に使用頻度が高いです。

よってTitleまでの引数は必須と考えてください。HelpFileとContentについては最初は不要です。

MsgBox  Prompt , [Buttons],[Title],[HelpFile],[Context]

Prompt

メッセージボックスに表示させる文字です。ユーザーに読んでもらう文字を記入します。

上の画像に置き換えると「実行しますか?」という文字になります。

Buttons

アイコンやボタンの仕様、ボタンの戻り値の設定をします。

アイコン(アラートマーク)

アイコン(アラートマーク)のリストです。必要に応じて使ってみてください。

番号定数使い時画像
1vbCritical16処理に問題がある時に使いましょう
2vbQuestion32問い合わせしたい時に使いましょう
3vbExclamation48警告したい時に使いましょう
4vbInformation64情報を伝える時に使いましょう
状況によってマークを付与してあげるとユーザー満足度向上につながります
ボタンの仕様

今回はコード内でVbOKCancelというコードを書いています。

このコードで「OKボタン」と「キャンセルボタン」を用意しています。

標準は無いです。複数仕様がありますのでご自身の環境にあったものを選んで使ってください。

番号定数内容
1vbOKOnly0「OK」ボタンのみ
2vbOKCancel1「OK」ボタンと「キャンセル」ボタン
3vbAbortRetryIgnore2「中止」ボタンと「再試行」ボタンと「無視」ボタン
4vbYesNoCancel3「はい」ボタンと「いいえ」ボタンと「キャンセル」ボタン
5vbYesNo4「はい」ボタンと「いいえ」ボタン
ボタンの種類を決めるためのコードです。
ボタンの戻り値

下のテーブルの様にボタン毎に戻り値が決まっています。

番号定数戻り値説明
1vbOK1OK
2vbCancel2キャンセル
3vbAbort3中止
4vbRetry4再試行
5vbIgnore5無視
6vbYes6はい
7vbNo7いいえ
ボタンの種類と戻り値の一覧です。戻り値は全て整数です。

今回のコードではボタンの仕様に対してvbOKCancelを使っています。

よって演算後の戻り値は「vbOK」であれば「1」、代わって「vbCancel」であれば「2」という事になります。

Title

メッセージボックスのタイトルです。入力した文字列がメッセージボックスのタイトルになります。

以下画像にあるメッセージボックスの左上に「テスト」という文字が表示されていますね。これがタイトルです。

メッセージボックスのタイトルの場所を指示

HelpFile と Context は最初は覚えなくても良いです。興味ある方は調べてみてください。

今回のコードの仕様について-1

今回はOKとCancelを表示させたかったのでボタンの仕様は「vbOKCancel」にしています。 

+vbExclamationで「注意してください」というイメージの警告メッセージを出しています。

上の画像に置き換えると「△の中に!マークがある表示」ですね。エクスクラメーションマークといいます。

2_If文

次にIf文です。ワークシート関数でもお馴染みの機能ですよね。いわゆる分岐処理です。

If文もプログラムの中でフォーマット化されているのである程度形が決まっています。

If  条件 Then
 '条件がTrueだった時の処理
Else
 '条件がFalseだった時の処理
End If
VB

まずはこの型に当てはめればOK。コードを都度考えなくても良いです。簡単ですよね。

コードを用意する度に検討が必要な要素は以下3つです。

  1. 条件(演算子を用いた演算など)
  2. 条件がTrueだった時の処理(条件を判定したあとの処理)
  3. 条件がFalseだった時の処理(条件を判定したあとの処理)

ワークシート関数よりVBAの方が理解しやすい

あくまで私見ですがワークシート関数よりもVBAの方が見易いと思いませんか?

ワークシート関数では条件分岐の関数を横に書きますがVBAでは条件分岐のコードを縦に書きます。

VBAの方が改行もされており整理した状態でIf文の各要素が並ぶことになります。

今回のコードの仕様について-2

メッセージボックスでOKボタンが押されると演算が行われ変数「回答」に1が代入されます。

その後セルA1に「OKですよ」と表示されます。

メッセージボックスでキャンセルボタンが押されて変数「回答」に2が代入された時はどうでしょうか。

答えはセルA1に「Cancelですよ」と表示されるというコードになっています。

応用編

Ifステートメントの中にIfステートメントを用意する事もできます。トータルで用意できる選択肢が増えます。

ExcelVBA【Ifのネスト&For】マクロ内で分岐とループを組み合わせる-4

MsgBox関数には「保存」ボタンが無いです。うまくアレンジして「保存」ボタンの仕様を再現しています。

VBA|MsgBoxの「保存」ボタンを使わずにデータをSaveする

メッセージボックスとIfステートメントは色々な作業に使います。

VBAを使ってPDFを出力するという作業の中でも使ってみました。

VBA×PDF|ワークブック内の全てのデータを1つのファイルで保存

まとめ

メッセージボックスの作り方と使い方についてIf文を交えて勉強していただきました。

If文が理解出来るとコードの幅が広がりやれることや表現の方法が増えます。

少し難しいですが以下記事を読んでいただくと条件分岐と繰り返し処理をマスター出来ます。

【エラーにならない】 VBA条件分岐完全ガイドコードのテンプレを紹介

なによりIf文はマクロの記録では再現出来ないコードになります。

これが書けるだけで普通の方が出来ない事が出来るという事になります。

次はループ処理です。ループ処理もマクロの記録では書けない特殊なコードです。

使えるようになると格段にできることが増えますよ。みんなで勉強してスキルアップしましょう。

次の記事:繰り返し処理を理解する

参考:関連記事

本シリーズはこちらの記事とも連携しています。

マクロは何から勉強するのか|学習をサポートするためのロードマップを作成

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!