VBAIfステートメントとメッセージボックス2つの機能を組み合わせる

お知らせこの記事は初心者用マクロ学習講座|勉強範囲を限定&12本の動画で早く効果を実感の関連記事です

Ifステートメントとメッセージボックスは相性抜群です

Ifステートメントというのは関数のIf文と同じ機能です。型が少しだけ違うだけで考え方は一緒です。コードだけ紹介すると話は終わってしまいます。

よってもう少し内容を充実させるためにメッセージボックスと組み合わせて使い方動画を作ってみました

自分だけで使う時はメッセージボックスを使わなくても良いのですが他者やグループで使う事を想定するとメッセージボックスを用意した方が親切です。

  • 実行します。よろしいですか?
  • 本当に削除しますか?
  • ○○が空欄です。記入後実行ボタンを押してください。

こんな感じで都度メッセージを表示させることが出来ると自分以外の人がデータを触ってもエラーが出にくくなります。

マクロ
マクロ

対話型のデータを用意する事が出来るとアプリケーション感も出ますね

では今回はメッセージボックスとIfステートメントを絡めた動画を用意しましたのでご覧ください。その後要点だけピックアップして解説していきます。

メッセージボックスは色々な要素を設定出来ます。体系的に見られるようにリストを沢山使って出来るだけ見易く記事を書いています。是非ご覧ください。

記事の難易度

ほぼ3に近い2です。2.8ぐらいの設定です。

記事の難易度
易しい
1
2
3
4
5
難しい

オンラインミーティング

メッセージボックスやIfステートメントは型が決まっているとはいえ最初は難しいです。分かりにくい点はオンラインミーティングでも説明する様に準備しています。

全国可オンラインでエクセルマクロ(VBA)を勉強してみませんか。お友達との参加も可能です。 (VBAで定時に帰ろう) 岐阜のエクセルの生徒募集・教室・スクールの広告掲示板|ジモティー
【ジモティー】投稿ご覧いただきありがとうございます。エクセルVBAに興味を持たれている様ですね。・来年から社会人になる学生さん・MOS等資格を目指している… (VBAで定時に帰ろう) 岐阜のエクセルの生徒募集・教室・スクールの広告掲示板|ジ...

前回記事

前の記事VBAのForNextステートメントで複数セルの仕事を1秒で片付ける

繰り返し処理について解説しています

この記事を読むとわかる事

Ifステートメントを使って条件毎に処理を分けられるようになります。

記事からわかる事
  1. メッセージボックスの使い方が分かります
  2. Ifステートメントの使い方が分かります
対話型のデータになる

マクロ

加えてメッセージボックスとIfステートメントの組み合わせで処理を分ける事が出来る様になります。

2分動画

動画はシリーズ内の動画と合わせて500円で販売しています。詳しくはこちらをご覧ください。

マクロ
マクロ

メッセージボックスとIfステートメントを一緒に使うコードの動画です

メッセージボックスとIfステートメントを一緒に使う動画を用意しました

動画の中からさらに要点を絞って解説していきます。

メッセージボックス

身近なところだとExcelを使い終わる際に画面右上の×ボタンを押す事がありますよね。その際以下の様なメッセージボックスが出ます。(Excelのバージョンにより多少内容に差があります)

データを保存するか確認するためのメッセージボックスです

これはデフォルトで用意されているメッセージボックスです。ある程度想定される作業についてはExcelは最初からメッセージボックスを用意してくれています。

マクロではこのメッセージボックスを自作する事が出来ます。コードでは以下の様に指示をします。

MsgBox関数

MsgBox “prompt” , “buttons” , “title”

動画の中では以下の様な使い方をしています。

a = MsgBox("セルA2は「おはよう」と書いてありますか?", vbYesNo + vbExclamation, "確認")

MsgBoxのあとにかっこが入ります。これはこのコードから得られる戻り値を変数aに代入する為のかっこです。メッセージボックスだけで使う時はかっこは必要無いです。ご注意ください。

引数は3つです。本当はもう少し数がありますがここでは3つにします。

引数詳細
prompt必ず指定します 表示させたい文字をダブルクォーテーションで囲みます 
buttons省略出来ます 省略するとOKボタンのみ表示されます ボタンの仕様は別のリストで紹介します 
title省略出来ます 省略するとMicrosoft Excelの表記が入ります 
メッセージボックスで指定する引数と詳細です

先程紹介したメッセージボックスを使いコードで指定する引数がどこに展開されるのかを見てください。これでイメージが膨らむはずです。

実際のメッセージボックスと引数の関連が分かる画像です

メッセージボックスの種類

ボタンは省略するとOKボタンのみ表示されます。それだけだと実際の業務には対応出来ない事が多いです。色々な仕様に対応する為ボタンの仕様には種類がありますので紹介します。

加えてメッセージボックス左に表示される黄色の三角に「!」マーク(エクスクラメーションマーク)の画像のようにアイコンを表示させる事も可能です。

動画内のメッセージボックス用のコードです。以下リストと見比べながら動画を見るとより理解が進むはずです。チャレンジしてみてください。

a = MsgBox("セルA2は「おはよう」と書いてありますか?", vbYesNo + vbExclamation, "確認")
ボタン

ここでは6種類をリスト化します。

定数内容
vbOKOnly0「OK」ボタンのみ
vbOKCancel1「OK」ボタンと「キャンセル」ボタン
vbAbortRetryIgnore2「中止」ボタンと「再試行」ボタンと「無視」ボタン
vbYesNoCancel3「はい」ボタンと「いいえ」ボタンと「キャンセル」ボタン
vbYesNo4「はい」ボタンと「いいえ」ボタン
vbRetryCancel5「再試行」ボタンと「キャンセル」ボタン
ボタンは色々な仕様で表示する事が出来ます。
アイコン

ここでは4種類をリスト化します。

定数内容
vbCritical16警告(赤丸内に白のバツ)
vbQuestion32問い合わせ(青丸内に白のはてな)
vbExclamation48注意(黄色三角内に黒のエクスクラメーションマーク)
vbinformation64情報(青丸内に白のアルファベットの i )
エクスクラメーションマークは「!」です。びっくりマークの事です。
戻り値

ボタンを押された時に返す値をリストにしました。

定数説明
vbOK1OK
vbCancel2キャンセル
vbAbort3中止
vbRetry4再試行
vbIgnore5無視
vbYes6はい
vbNo7いいえ
戻り値のリストです

動画ではメッセージボックスで「はい」か「いいえ」を選択すると6か7が返ってくる仕様でした。

リストを見ると理由が分かります。メッセージボックスで「はい」を選択すると戻り値は6(定数だとvbYes)という事になります。

Ifステートメント

まず基本的な型の説明をします。動画内で使用した画像です。

Ifステートメントの型と動画で使用したコードです

基本のかたち

基本はIf、Then、Else、End if の4つのコードからなる型で出来ています。

  1. Ifの後に条件を記入します。ここでは色々な条件を提示する事が出来ます。条件を書いた後はThenで閉じてください。
  2. 次に指定した条件がTrueだった時の処理を書きます。Elseを挟み条件がFalseだった時の処理を書きます。
  3. 最後にEnd Ifを書いてIfステートメントは終了となります。

1の条件と2のTrue、Falseの処理が仕事に合わせて変わりますが基本となる型はずっと同じ配置、同じ使い方をします。

比較演算子

条件については式を用いる事が多いです。今回の a = 6 を使ってリストを作ってみます。

説明
a = 6aと6が等しい時にTrue
a < 6aが6より小さい時にTrue
a <= 6aが6以下の時にTrue
a > 6aが6より大きい時にTrue
a >= 6aが6以上の時にTrue
a <> 6aが6と等しくない時にTrue
比較演算子の使い方です。ややこしいですが慣れると強い味方です。

Ifステートメントのネスト

ワークシート関数同様Ifステートメントの中にIfステートメントを埋め込む事も可能です。そうする事で選択肢の幅を増やすことが出来ます。別記事を用意する予定です。

MsgBoxとIfステートメントの組み合わせ

メッセージボックスとIfステートメントの解説をしてきました。ここで2つの機能を合わせて考えてみます

メッセージボックスのボタンでvbYesとvbNoを使っています。よって戻り値は6 or 7を受け取る仕様です。

続いてIfステートメントです。動画では a = 6 を条件に使っています。

メッセージボックスで「はい」が選択されるとIfステートメントの条件はTrueを返します。続いてTrueの処理が走るのでセルに「おはよう」が記入されるという建付けです。

今回はメッセージボックスとIfステートメントを組み合わせて使いましたが別々に使っても良いです。またIfステートメントは繰り返し処理と一緒に使うと絶大な効果を発揮します。

このシリーズの最後に繰り返し処理とIfステートメントを合わせたコードを紹介する動画を用意しています。

コードを途中で中断したい時

コードを途中で中断したい時という表現が適切でないかもしれません。もう少し言い方を変えると「条件によってはその後の処理に進みたくない時」にどうするかを紹介します。

マクロ
マクロ

コードはWクリックで選択出来ます。その後「Ctrl+C」でコピー、「Ctrl+V」で貼付けです。

Sub 条件分岐()

Dim a As Long

a = MsgBox("セルA2は「おはよう」と書いてありますか?", vbYesNo + vbExclamation, "確認")

If a = 6 Then

    Cells(2, 2) = "おはよう"

Else
    
    MsgBox "処理を中止します", , "お知らせ"
    Exit Sub

End If

End Sub

動画と同じコードですが一部変えています。「Else」以下にメッセージボックスと「Exit Sub」というコードが書かれています。

メッセージボックスで「いいえ」を選択すると変数aに戻り値7が代入されます。変数aが7の時はIfステートメントで条件は「False」になるので今回追加したコードの処理となります。

メッセージボックスは先程説明した通りです。お知らせだけのメッセージボックスで「OK」ボタンを押して終了ですがその後に「Exit Sub」を通過します。

このコードは「ここでプロシージャから抜けます」というコードです。これで処理を中止する事が出来ます。

Exit Sub が無いとどうなるでしょうか?

メッセージボックスで「いいえ」を選択した後にIfステートメントで処理が止まらなくなるのでIfステートメントの後にコードが書いてあるとそのコードを実行してしまいます。

分岐によってその後のコードを実行したくない処理は「Exit Sub」を忘れずに書きましょう。

まとめ

長くなりましたが条件分岐について解説しました。メッセージボックスもIfステートメントも色々な要素が設定出来るので複雑に感じますがリスト化して体系的に眺めると理解が進みます。

条件やFrue、Falseの時に実行させたいコードさえ書けるようになればあとは型にはめるだけです。

本日勉強したこと
  1. メッセージボックスの使い方
  2. Ifステートメントの使い方
  3. MsgBoxとIfステートメントの組み合わせ
条件分岐は対話型

マクロ

繰り返し処理同様条件分岐もマクロの効果を体験するにはもってこいの要素ですが慣れるまでは相当難しいです。

分からない事がありましたらオンラインミーティングも可能です。ご検討ください。

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