VBA豆知識

MsgBox メッセージボックス

 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

「はい」「いいえ」の選択により戻り値が異なります。
それによって、分岐処理が分かれます。

表示されるボタンの種類と戻り値は次の通りです。

ボタンの種類

定数表示されるボタン
vbOKOnly0[OK] ボタンのみ表示
vbOKCancel1[OK]ボタンと [キャンセル] ボタンを表示
vbAbortRetryIgnore2[中止] [再試行] [無視] の3つのボタンを表示
vbYesNoCancel3[はい] [いいえ] [キャンセル] の3つのボタンを表示
vbYesNo4[はい] [いいえ] の2つのボタンを表示
vbRetryCancel5[再試行 [キャンセル] の2つのボタンを表示

「定数」とは内容を明らかにするためのものです。

たとえば「はい」「いいえ」を求める vbYesNo の場合、
MsgBox (“仕入れを続行しますか?”,4)
でも問題なく表示されますが、数字だけでは何のボタンかわかりません。

MsgBox (“仕入れを続行しますか?”, vbYesNo) ならば容易に推測できます。

定数とはそのようなものです。

MegBox関数の戻り値

ボタン定数
「OK」vbOK1
「キャンセル」vbCancel2
「中止」vbAbort3
「再試行」vbRetry4
「無視」vbIgnore5
「はい」vbYes6
「いいえ」vbNo7

「戻り値」とは MsgBox から帰ってくる答えと考えてください。

上記の例の場合

Dim MG As Long
 MG = MsgBox(“仕入れを続行しますか?”, vbYesNo)
 If MG=vbYes Then

になっています。

本来は 「If MG=6 then」となるべきです。
だから MG という変数のデータ型は「数字(Long)」になっているのです。

しかしそれではわかりにくいので、あえて定数を使って
If MG=vbYes Then
となっているのです。