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

お知らせ記事には広告が含まれておりますがExcelのスキルUPに繋がる様コンテンツ自体は手を抜かずに作成しております

WinスクールにはVBAの講座が5つ用意されています

メッセージボックスとIF文を組み合わせて使う

今回はメッセージボックスとIF文について勉強していきます。

以前勉強したボタンと連動する作業になります。

EnjoyExcel
EnjoyExcel

ボタンを押した際「本当に〇〇しても良いですか?」のようなダイアログボックスを出します。

作業中に間違えてワークシート右上の×ボタンをクリックした事はありませんか?

そんなときはこの様なダイアログボックスが出るはずです。

「ほんとに消しても(終了しても)良いですか?」という内容のメッセージボックスです。

ExcelVBAを使えばこのようなメッセージボックスを作る事ができます

メッセージボックスを出してあげるとデータを間違えて消してしまったという事も少なくなりますよね。

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

理由はメッセージボックスとの相性が良い為です。記事を読んでいただくと理由が分かります。

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

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

前回の記事

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

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

今は完全に理解出来なくても良いので先に進みましょう。

本記事での課題

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

EnjoyExcel
EnjoyExcel
課題

メッセージボックスと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で「注意してください」というイメージの警告メッセージを出しています。

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

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

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

Title

メッセージボックスのタイトルです。入力しておけばタイトルを付ける事ができます。

上の画像に置き換えると「テスト」という文字です。

HelpFileContext は私も分かりません。(すいません)

多分使わないと思いますが興味ある方は調べてみてください。

ボタンの仕様

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

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

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

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

下のテーブルの様にボタン毎に戻り値が決まっています。文字列である定数を選択いただいてもOKです。

メッセージボックスのボタンは色々な種類があります。

命令+回答をフォーマット化しておくと迷わず使う事ができて良いです。

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

今回のコードではボタンの仕様に対して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文が理解出来るとコードの幅が広がりやれることや表現の方法が増えます。

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

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

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

本日勉強したこと
  1. メッセージボックスの使い方
  2. IF文の建付け
  3. MsgBoxとIF文は相性が良い
対話型のデータが出来た

Enjoy Excel

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

みんなで勉強してスキルアップしましょう。

参考:関連記事

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

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

タイトルとURLをコピーしました