VBAで便利なMsgBox関数があります。私の身近にMsgBoxを関数ではなくメソッドだと思っている人がいたので要点を簡潔に解説します。
目次
「関数」とは何かについての認識を合わせておく
VBAにおける関数は何かの入力値に対して、値を返すものです。VBAの場合、関数といえばSum関数のように、引数に対して何らかの値を返す、一つの構文です。
そもそもメソッドなら、オブジェクトにくっついていないとおかしい
私の身近にいる人でMsgBoxをメソッドだと思っていた人は、下の例のように戻り値を受け取らないMsgBox関数の使い方しか知りませんでした。
Sub 単に表示させるだけ() MsgBox "こんにちは" End Sub
しかし、これをもってメソッドだと思ってしまうのも間違いです。メソッドはオブジェクトが持っているSubプロシジャやFunctionプロシジャのようなものです。よってメソッドは必ずSheets.Addのように何かのオブジェクトにくっついて使います。
MsgBoxにカッコをつける場合とつけない場合
カッコをつけないとエラーになる場合
関数なら戻り値を受け取れるはずなので、下記の様に書き換えてみます。
Sub これはエラーになる() Dim MsgBoxの戻り値を受け取る変数 MsgBoxの戻り値を受け取る変数=MsgBox "こんにちは" End Sub
関数は普通()が付いていますよね。だから、()をつければエラーになりません。
Sub これはエラーにならない() Dim MsgBoxの戻り値を受け取る変数 MsgBoxの戻り値を受け取る変数 = MsgBox("こんにちは") End Sub
カッコをつければ戻り値を受け取らなくてもエラーにはならない
初めの「単に表示させるだけ」のプロシジャがエラーにならなかったのは、戻り値を使わないので()を省略できただけです。MsgBoxが関数である事に変わりはありません。というわけで、()をつけて、戻り値を受け取らなくてもエラーにはなりません。
Sub これもエラーにならない() MsgBox ("こんにちは") End Sub
MsgBoxの戻り値を確かめる
関数なので戻り値があります。調べてみます。
Sub MsgBoxの戻り値を実験する() Debug.Print MsgBox("こんにちは") '1が返る Debug.Print MsgBox("こんにちは", vbYesNo) 'Yesを押すと6が返る Debug.Print MsgBox("こんにちは", vbYesNo) 'Noを押すと7が返る End Sub
このようにMsgBoxは整数を返します。よって、戻り値を利用すればユーザーの反応によってその後の処理を分岐させることができます。戻り値は整数なのでLong型で宣言した変数で受けてあげればOKです。
まとめ
この記事の内容をまとめると、下記の様になります。
- MsgBoxは関数
- MsgBox関数は引数を受けないときはカッコの省略が可能
- MsgBox関数は引数を受けるときはカッコの省略が不可
- MsgBox関数はカッコをつけておけばエラーにはならない
恥ずかしい思いをしなくて済むよう、いつも使っている簡単な構文の理解を曖昧にしないようにして、レベルアップしていきましょう!
<お知らせ>
Excel VBAでクラスやオブジェクトの概念と使い方を丁寧に解説し、ワンランク上の実力を目指すガイドが電子書籍になりました。この本で本物の実力を身に付けて一皮むけてみませんか?
books.rakuten.co.jp