親父の隠れ家

親父の隠れ家

三十路を迎える親父が隠れて記事を書き始めました。

【VBA】MsgBox関数を使ってみよう(2)

前回の(1)ではMsgBox関数を使って文字列の表示とOKボタンのみがメッセージボックスとして表示する方法について書かせて頂きましたが、今回はそんなMsgBox関数に色々くっつけてもう少し味気のあるものにしてみたいと思います。

oyajinokakurega.hatenablog.com

 

f:id:CMY0630:20170623181719p:plain

(前回のメッセージボックス)

 

f:id:CMY0630:20170624000911p:plain

(今回作るのはこんな感じでアイコンやら改行やらします)

 

メッセージボックスの枠が違うのはExcelのver違いなのでお気になさらず。

(2つ端末使っているので…)

 

 

ではいってみよう。

 

 

まずは中身を見てみよう

まず先程の例で使ったメッセージボックスの中身(VBA)を見てみましょう。

f:id:CMY0630:20170624001726p:plain

Sub test()
  MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation
End Sub

 

前回の「MsgBox "表示させたい文字列"」よりも随分長くなったように感じるかと思います。

 

僕もそう思います。

パッと見て「&」とか文字化けかよとか思いますもん。

 

 

けれども1つ1つを見ていくと大したことないので続けますね。

 

 

「&」ってなんぞや

早速文字化けかと思われがちな「&」についてですが、これは実は演算子

 

カッコつけて言うと文字列連結演算子

簡単に言うと文字列を連結するときに使う演算子

 

「&」以外にも「+」が同様の演算子です。

 

例えば

A="1173"  B="3373"

 

A&Bは11733373となります。A+Bも同じです。

 

 

vbCrLfは何なんだ?

これも文字化けかと思いますよね。大文字と小文字が入り混じってオシャレさんぶってる匂いも微かに感じる。

 

このオシャレさんは改行コード

 

オシャレでもなんでもなかった。

vbはオマケということで、CrLfは「キャリッジリターン・ラインフィード」の略とか言われているようです。タイプライター時代の名残でしょうか。

 

 

 

MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります"

 

訳すと

 

メッセージボックス「今回はこんな感じ!(連結)(改行)(連結)随分見栄えが変わります

 

といったところでしょうか。

 

 

OK以外のボタンを付けたい

有無を言わせない雰囲気が醸し出される「OK」オンリー。

選択の余地が欲しいものです。

 

冒頭の例では「はい」「いいえ」「キャンセル」といった3つの選択肢をご用意。

欲張りました。

 

他にはどんなボタンがあるかというと…

 

・vbOKOnly

→「OK」ボタンのみ

・vbOKCancel

→「OK」と「キャンセル」ボタン

・vbAbortRetryIgnore

→「中止」「再試行」「無視」ボタン

・vbYseNoCancel

→「はい」「いいえ」「キャンセル」ボタン(今回のやつ)

・vbYesNo

→「はい」「いいえ」ボタン

・vbRetryCancel

→「再試行」と「キャンセル」ボタン

 

この英語達を定数というのだけど、実は値というもの存在して上から「0」「1」「2」「3」「4」「5」と割り振られているんですが、値に関してはあまりオススメしないので覚えておかなくても良いかと思います。

 

 

オシャレにアイコンでも付けとく?

オシャレかどうかは置いといて、アイコンがあると表示されているメッセージが何なのか分かり易くなることは間違いないです。

 

vbInformationの他に何があるのかというと…

 

・vbCritical

→「警告」です。赤丸に×みたいな。

・vbQuestion

→「?」です。

・vbExclamation

→「!」です。

vbInformation

→「i」です。(今回のやつ)

 

こちらも英語を定数といい、やっぱり上から値があって「16」「32」「48」「64」となっています。16の2倍、3倍、4倍…て、これもオススメはしないので頭の片隅くらいで良いとは思います。

 

ですがせっかくなので例を書き残しておこうかと思います。

 

(例1)冒頭のやつ

MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation

 

(例2)値を使ってみる その1

MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", 3 + 64

 

(例3)値を使ってみる その2

MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", 67

 

例1~3のどれでも結果は同じなのでお試しあれ。

f:id:CMY0630:20170624000911p:plain

 

値(例2、3)を用いた書き方をオススメしない理由についてですが単純に読みにくいからです。カッコイイ言い方をするなら可読性が低下する…とか?

 

要は保守するのは人間なので読みにくいのはどうなのよ…というだけです。

 

いきなり「67」とか言われても困っちゃいますよね。

何と何を足したんだ?って。

 

なので定数で書いておく方が良いかと思うわけです。

 

 

まとめ

パッと見ると文字化け小難しいことを書いているようですが分解して見るとただ組み合わさっているだけなことが分かると思います。

 

MsgBox "今回はこんな感じ!" & vbCrLf & "随分見栄えが変わります", vbYesNoCancel + vbInformation

 

「今回はこんな感じ!(改行)随分見栄えが変わります(ボタンは「はい」「いいえ」「キャンセル」)(アイコンはお知らせ系なので「i」にしよう)」

 

定数や値という言葉に混乱しないよう、とりあえず形で覚えてしまうのも手かと思います。