Excel VBA メッセージを表示する

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

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

構文

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

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

msgbox

buttonsの設定値

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

定  数 表示するボタン
 vbOKOnly 0  [OK]
 vbOKCancel 1  [OK] [キャンセル]
 vbAbortRetryIgnore 2  [中止] [再試行] [無視]
 vbYesNoCancel 3  [はい] [いいえ] [キャンセル]
 vbYesNo 4  [はい] [いいえ]
 vbRetryCancel 5  [再試行] [キャンセル]

 

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

定  数 表示するアイコン
 vbCritical 16  警告メッセージアイコン
 vbQuestion 32  問い合わせメッセージアイコン
 vbExclamation 48  注意メッセージアイコン
 vbInformation 3  情報メッセージアイコン

 

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

定  数 ボタンの選択状態
 vbDefaultButton1 0  第1ボタンを選択
 vbDefaultButton2 256  第2ボタンを選択
 vbDefaultButton3 512  第3ボタンを選択
 vbDefaultButton4 768  第4ボタンを選択

 

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

定  数 モーダルの状態
 vbApplicationModal 0  アプリケーション モーダルに設定
 vbSystemModal 4096  システム モーダルに設定

 

その他のグループ

定  数 内  容
 vbMsgBoxHelpButton 16384  ヘルプ ボタンを追加
 VbMsgBoxSetForeground 65536  最前面のウィンドウとして表示
 vbMsgBoxRight 524288  テキストを右寄せで表示
 vbMsgBoxRtlReading 1048576  テキストを右から左の方向で表示

 

上記の各グループから値を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

 

戻り値

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

定  数 説  明
 vbOK 1  [OK]
 vbCancel 2  [キャンセル]
 vbAbort 3  [中止]
 vbRetry 4  [再試行]
 vbIgnore 5  [無視]
 vbYes 6  [はい]
 vbNo 7  [いいえ]

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

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

 

< スポンサードリンク >



サブコンテンツ

このページの先頭へ