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

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

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

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

EnjoyExcel
EnjoyExcel

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

例えば間違えて×ボタンを押してしまった際にこんなダイアログボックスを見たことありませんか?

「ほんとに消しても良いですか?」というメッセージボックスです。

これを出してあげるとデータを間違えて消してしまったという事も少なくなりますよね。

加えて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文の書き方ですね。

メッセージボックス

コードのフォーマットです。以下のように書きます。

メッセージボックスの使い方です
  • MsgBox  prompt , [Buttons],[Title],[HelpFile],[Context]

[ ] の中は省略可能です。promptだけは必須です。

prompt

メッセージボックスに表示させる文字です。

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

Buttons

ボタンの種類やアラートマークの設定をします。

今回はOKとCancelを表示させたかったのでvbOKCancelにしています。 

+vbExclamationで警告メッセージを出しています。

上の画像に置き換えると「△の中に!マークがある表示」ですね。

Title

メッセージボックスのタイトルです。

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

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

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

ボタンの仕様

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

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

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

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

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

ご自身で使いやすいものを決めておくと良いです。

いざ使う時に迷わずコードに展開しやすいです。

メッセージボックスの文章と合わせてご検討ください。

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

IF文

次にIF文です。IF文も形が決まっています。

If  条件 Then

 '条件がTrueだった時の処理

Else

 '条件がFalseだった時の処理

End If

これに当てはめればOK。

ワークシート関数でIF文書いている人達は結構イメージしやすいのではと思います。

枠が決まっているので関数より見易い気がしませんか。

IF(条件,Trueの時,Falseの時)という関数を縦に書いただけという感じを持っています。

今回のコードの仕様です

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

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

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

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

まとめ

ワークシート関数の様にIF文を重ねて書いたりすることも可能です。

IF文が理解出来るとコードの幅が広がりやれることも増えます。

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

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

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

Enjoy Excel

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

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

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