MsgBox関数 はユーザーとコンピュータが、いわば対話をするようなもので、非常にありがたい存在の関数です。
入力ミスがあった時に、「入力が間違っています」と注意を喚起してくれたり、「今10件のデータが見つかりましたけど、まだ検索を続行しますか?」といった質問を投げかけてくれたりします。
マクロを組む際は、そのマクロを使用する人の立場にたって、エラーを防ぐ意味でも必要な注意を表示させることは大切なことです。
だからと言って使いすぎはマイナスですので注意してください。
基本的メッセージ
会社の決算月を確認する画面です。

ケース 1
決算月が未入力になっています。
この状態で kakunin のマクロを動かすと、「決算月が未入力です!」となります。
OKを押すまで次に進みません。
ケース 2
決算月が 1~ 12月の範囲を超えています。
よって「決算月が間違っています」となります。
OKを押すまで次に進みません。
勿論正常に月が入力されていれば、このメッセージは表示されません。
Sub kakunin()
Dim KD As Long
KD = Range(“C3”).Value ‘①
If KD = 0 Then ‘②
MsgBox “決算月が未入力です!”
ElseIf KD < 1 Or KD > 12 Then ‘③
MsgBox “決算月が間違っています”
End If
End Sub
① KDが決算月を表す変数で、C3セルの値を代入します。
ケース1の場合は、未入力ですので KD=0 となります。
ケース2の場合は、KD=13 となります。
② KDがゼロの場合は、「決算月が未入力です!」のメッセージが出ます。
③ KDが13の場合は、1から12(1月から12月)の範囲外ですので、 「決算月が間違っています」のメッセージが出ます。
最もベーシックなMsgBox関数の使い方です。
実務では結構頻繁に使われます。
選択肢付きメッセージ
MsgBox関数の戻り値で、処理を分岐することができます。

マクロを実行すると、「はい」「いいえ」を求めるメッセジが表示されます。

Sub kakunin2()
‘① 戻り値の変数
Dim MG As Long
‘② MGに Yes か No かの戻り値が入れられる
MG = MsgBox(“仕入れを続行しますか?”, vbYesNo)
‘③ Yes の場合
If MG = vbYes Then
MsgBox “仕入れを続行します”
Else ‘④ No の場合
MsgBox “仕入れを中止します”
End If
End Sub
「はい」「いいえ」の選択により戻り値が異なります。
それによって、分岐処理が分かれます。
表示されるボタンの種類と戻り値は次の通りです。
◆ ボタンの種類
定数 | 値 | 表示されるボタン |
vbOKOnly | 0 | [OK] ボタンのみ表示 |
vbOKCancel | 1 | [OK]ボタンと [キャンセル] ボタンを表示 |
vbAbortRetryIgnore | 2 | [中止] [再試行] [無視] の3つのボタンを表示 |
vbYesNoCancel | 3 | [はい] [いいえ] [キャンセル] の3つのボタンを表示 |
vbYesNo | 4 | [はい] [いいえ] の2つのボタンを表示 |
vbRetryCancel | 5 | [再試行 [キャンセル] の2つのボタンを表示 |
「定数」とは内容を明らかにするためのものです。
たとえば「はい」「いいえ」を求める vbYesNo の場合、
MsgBox (“仕入れを続行しますか?”,4)
でも問題なく表示されますが、数字だけでは何のボタンかわかりません。
MsgBox (“仕入れを続行しますか?”, vbYesNo) ならば容易に推測できます。
定数とはそのようなものです。
◆ MegBox関数の戻り値
ボタン | 定数 | 値 |
「OK」 | vbOK | 1 |
「キャンセル」 | vbCancel | 2 |
「中止」 | vbAbort | 3 |
「再試行」 | vbRetry | 4 |
「無視」 | vbIgnore | 5 |
「はい」 | vbYes | 6 |
「いいえ」 | vbNo | 7 |
「戻り値」とは MsgBox から帰ってくる答えと考えてください。
上記の例の場合
Dim MG As Long
MG = MsgBox(“仕入れを続行しますか?”, vbYesNo)
If MG=vbYes Then
になっています。
本来は 「If MG=6 then」となるべきです。
だから MG という変数のデータ型は「数字(Long)」になっているのです。
しかしそれではわかりにくいので、あえて定数を使って
If MG=vbYes Then
となっているのです。