Excel VBA ダイアログボックスでメッセージを表示させるには「MsgBox関数」を使います

MsgBox関数は、ダイアログ ボックスにメッセージを表示し、どのボタンがクリックされたかを示す値を返します

構文

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

prompt = メッセージの文字
buttons = ボタンの種類
title = ダイアログボックスのタイトル
helpfile と context は私は使いません

msgbox

buttonsの設定値

第1のグループはボタンの種類です

定  数表示するボタン
 vbOKOnly0 [OK]
 vbOKCancel1 [OK] [キャンセル]
 vbAbortRetryIgnore2 [中止] [再試行] [無視]
 vbYesNoCancel3 [はい] [いいえ] [キャンセル]
 vbYesNo4 [はい] [いいえ]
 vbRetryCancel5 [再試行] [キャンセル]

 

第2のグループはアイコンの種類です

定  数表示するアイコン
 vbCritical16 警告メッセージアイコン
 vbQuestion32 問い合わせメッセージアイコン
 vbExclamation48 注意メッセージアイコン
 vbInformation3 情報メッセージアイコン

 

第3のグループはどのボタンを選択状態にするかです

定  数ボタンの選択状態
 vbDefaultButton10 第1ボタンを選択
 vbDefaultButton2256 第2ボタンを選択
 vbDefaultButton3512 第3ボタンを選択
 vbDefaultButton4768 第4ボタンを選択

 

第4のグループはボックスがモーダルかどうかを指定します

定  数モーダルの状態
 vbApplicationModal0 アプリケーション モーダルに設定
 vbSystemModal4096 システム モーダルに設定

 

その他のグループ

定  数内  容
 vbMsgBoxHelpButton16384 ヘルプ ボタンを追加
 VbMsgBoxSetForeground65536 最前面のウィンドウとして表示
 vbMsgBoxRight524288 テキストを右寄せで表示
 vbMsgBoxRtlReading1048576 テキストを右から左の方向で表示

 

上記の各グループから値を1つずつ選択して加算した合計値を指定します

 

  • ダイアログボックスのタイトルは「MSGタイトル」
  • メッセージの内容は、「メッセージを右寄せで表示」
  • ボタンの種類は、vbYesNoCancel [はい] [いいえ] [キャンセル]
  • アイコンの種類は、vbQuestion 問い合わせメッセージアイコン
  • ボタンの選択状態は、vbDefaultButton3 3番目のボタンを選択
  • モーダルの状態は、vbSystemModal システムモーダルの状態
  • その他のグループから、vbMsgBoxRight 文字を右寄せ

これを設定してみると

Sub test()
  Dim msg As Integer
  msg = MsgBox(“メッセージを右寄せで表示”, _
     vbYesNoCancel + _
     vbQuestion + _
     vbDefaultButton3 + _
     vbSystemModal + _
     vbMsgBoxRight, “MSGタイトル”)
End Sub

これを実行してみると下図のようになります

msgbox

ちなみに、定数の値を指定しみてたらどうなるのかな?と思い試してみました

vbYesNoCancel の値は 3
vbQuestion の値は 32
vbDefaultButton3 の値は 512
vbSystemModal の値は 4096
vbMsgBoxRight の値は 524288

3 + 32 + 512 + 4096 + 524288 = 528931 なので

Sub test()
  Dim msg As Integer
  msg = MsgBox(“メッセージを右寄せで表示”, 528931, “MSGタイトル”)
End Sub

結果は、定数と同じでした

msgbox

 

戻り値

どのボタンをがクリックされたかを示す値が返されます

定  数説  明
 vbOK1 [OK]
 vbCancel2 [キャンセル]
 vbAbort3 [中止]
 vbRetry4 [再試行]
 vbIgnore5 [無視]
 vbYes6 [はい]
 vbNo7 [いいえ]

先ほどのプロシージャに追加してみます

Sub test()
  Dim msg As Integer
  msg = MsgBox(“メッセージを右寄せで表示”, ?
     vbYesNoCancel + _
     vbQuestion + _
     vbDefaultButton3 + _
     vbSystemModal + _
     vbMsgBoxRight, “MSGタイトル”)

 

  If msg = vbYes Then
     MsgBox “[はい] がクリックされました”
  ElseIf msg = vbNo Then
     MsgBox “[いいえ] がクリックされました”
  ElseIf msg = vbCancel Then
     MsgBox “[キャンセル] がクリックされました”
  End If
End Sub

[はい] がクリックされると

vbyes

[いいえ] がクリックされると

vbno

[キャンセル] がクリックされると

vbcancel

戻り値が必要ない場合は、下記のように記述するだけです

Sub test()
  MsgBox “メッセージ”
End Sub

 

メモ

メッセージを改行したい場合は

  • キャリッジリターン (Chr(13))
  • ラインフィード (Chr(10))

を使います

Sub test()
  MsgBox “メッセージ” & Chr(13) & “改行しました”
End Sub

chr

 

 

< スポンサーリンク >