MsgBoxを使いこなそう。

MsgBox関数は、メッセージを表示する時に使う関数ですが、工夫次第で使い道がいろいろあります。

1.メッセージを表示する。  

 これが、一番基本的な使い方になります。
 例えば、次のようなプロシージャを作ったとします。
 この場合、「処理が終わりました。」というメッセージを表示するだけですが、
 処理に時間がかかるプロシージャだと、このメッセージが出てくると安心できます。

Sub test()

MsgBox "処理が終わりました。"

End Sub 

2.処理の分岐方向を探る。

 上の使い方を応用すると、プロシージャが分岐して処理を進めるとき、どの分岐を通って処理が進んでいるのか、調べることができます。
 作ったプロシージャがエラーで止まってしまうとき、その原因を特定するときに使うと便利です。
 例えば、下のプロシージャだと、番号が表示されるので、どこを通っているのかがすぐにわかります。

Sub test()

If a>0 Then
  If b>0 Then
    MsgBox "1"
  Else
    MsgBox "2"
Else
  If b>0 tThen
    MsgBox "3"
  Else
    MsgBox "4"
  End If
End If

End Sub

3.ユーザーに選択させる。

 MsgBoxは、メッセージを表示させるだけのものではありません。
 ユーザーに選択させることもできます。
 下のプロシージャの場合、「処理を続けますか?」とメッセージが出て、『OK』か『キャンセル』か
 どちらかのボタンを押せるようになっています。

Sub test()

Dim t As Integer ←@

t=MsgBox("処理を続けますか?",vbOKCancel) ←A

MsgBox t

End Sub 

@ 変数の型を宣言する命令です。今回は、整数型でtという変数名で宣言しています。
  (扱える数値の範囲は、−32768〜32767です。)

A vbOKCancel の部分が、ボタンの指定です。この書式にすると、戻り値があるので、
  それを変数tに代入しています。

  この場合、OKを押すと1が、Cancelを押すと2が返ってきます。

4.ユーザーの選択で処理を分岐する。

 上の使い方をもっと発展させると、押したボタンによって処理を分岐させることができます。

Sub test()

Select Case MsgBox("データのチェックをしてから、処理を行いますか?",vbYesNoCancel) ←@
  Case Is = vbYes
    Call データチェック
    Call 処理
  Case Is = vbNo
    Call 処理
  Case Is = vbCancel
    MsgBox "処理を中断します。"
End Select

End Sub
@ Select文を使うと、いろいろな戻り値に対応して、処理を分岐させることができます。

  Yesを押すと、プロシージャ「データチェック」を実行し、プロシージャ「処理」を実行します。
  Noを押すと、プロシージャ「処理」だけを実行します。
  Cancelを押すと、「処理を中断します。」のメッセージが出ます。

 ※データチェック・処理というプロシージャは、架空のプロシージャで実際にはありません。