■3-4 ユーザーインターフェースとしてダイアログボックスが必要です
マクロ実行の途中でユーザーから数値や文字の入力を求めたり、処理内容の確認を求めるケースが
あります。マクロ作成において各種ダイアログボックスを自由に操ることができれば、使用者側に立った
使いやすいマクロを作ることができます。ここでは各種ダイアログボックスの使用例を詳細に説明します。




(1)メッセージボックス設置の引数値/戻り値一覧表
MsgBox関数はダイアログボックスにメッセージを表示します。単にメッセージの表示に使用することもあ
りますが、各種ボタンを配置しユーザーが次の処理を選択する手段としても使用されます。
各種ボタン設置の引数値は表4に示します。選択されたボタンが押された時の戻り値を表5に示します。
【表4 MsgBox 関数の引数の値】
定数 内容
  省略 [OK] ボタンのみを表示します。
vbOKOnly 0 (既定値) [OK] ボタンのみを表示します。
vbOKCancel 1 [OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore 2 [中止]、[再試行]、[無視] の 3 つのボタンを表示します。
vbYesNoCancel 3 [はい]、[いいえ]、[キャンセル] の 3 つのボタンを表示します。
vbYesNo 4 [はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel 5 [再試行] ボタンと [キャンセル] ボタンを表示します。
vbCritical 16 警告メッセージ アイコンを表示します。
vbQuestion 32 問い合わせメッセージ アイコンを表示します。
vbExclamation 48 注意メッセージ アイコンを表示します。
vbInformation 64 情報メッセージ アイコンを表示します。
※ メッセージアイコンはボタン指定番号を加算することにより表示。

【表5 MsgBox 関数の戻り値】
定数 内容 (選択されたボタン)
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]

[1]MsgBox関数のマクロ実行例
このマクロ実行例画面4は、表示ボタンを「組み込み定数」で「vbYesNoCancel」を指定で、
(1aマクロでは”3”)3個のボタンを表示です。

画面13MsgBox関数のマクロ実行例

Sub メッセージ1()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", vbYesNoCancel, "見本")
    Select Case ync
        Case vbYes
            MsgBox "「はい」ボタンが押されました"
        Case vbNo
            MsgBox "「いいえ」ボタンが押されました"
        Case vbCancel
            MsgBox "「キャンセル」ボタンが押されました"
        End Select
End Sub
----------------------------------------------------------
Sub メッセージ1a()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", 3, "見本")
        If ync = 6 Then
            MsgBox "「はい」ボタンが押されました"
        ElseIf ync = 7 Then
            MsgBox "「いいえ」ボタンが押されました"
        ElseIf ync = 2 Then
            MsgBox "「キャンセル」ボタンが押されました"
        End If
End Sub


[2]MsgBox関数の名前付き引数の使用例
引数の指定を、名前付き引数で記入の場合は表示順序は変えて記述できます。(マクロ実行例は画面14参照)

画面14名前付き引数の使用例


Sub メッセージ2a()
Dim msg As String
Dim ync As Integer
    msg = "完了の項目を消去します。" & vbCrLf & _
                "(消去後は元に戻せません)"
    ync = MsgBox(msg, 1, "確認")
        If ync = 1 Then
            MsgBox "「OK」ボタンが押されました"
        Else
            MsgBox "「キャンセル」ボタンが押されました"
        End If
End Sub
----------------------------------------------------------
Sub メッセージ2b()
Dim msg As String
Dim ync As Integer
    msg = "完了の項目を消去します。" & vbLf & _
                "(消去後は元に戻せません)"
    ync = MsgBox(Title:="確認", Buttons:=1, Prompt:=msg)
        If ync = 1 Then
            MsgBox "「OK」ボタンが押されました"
        Else
            MsgBox "「キャンセル」ボタンが押されました"
        End If
End Sub


[3]戻りなしの「OK」ボタンのみのメッセージ例
下記マクロの「メッセージ3a/3b/3c」の3例とも戻り値がありません。(OKボタンのみを表示例は、
画面15参照)。マクロ「メッセージ3c」は特殊ケースでButtons:="3"を指定した関係で3個のボタン付きです
が戻り値はありません。 

画面15 戻りなしのメッセージ表示例


Sub メッセージ3a()
    MsgBox "「はい」ボタンが押されました"
End Sub
----------------------------------------------------------
Sub メッセージ3b()
    MsgBox "「はい」ボタンが押されました", Title:="処理選択"
End Sub
-------------------------------------------------
Sub メッセージ3c()
    MsgBox "「はい」ボタンが押されました", Title:="処理選択", Buttons:="3"
End Sub


[4]文字表示にフォーマットで表示型指定のメッセージ例
メッセージボックスに表示されるデータは、表示形式を指定で見やすくできます。(マクロ実行例は画面16参照)

画面16文字表示にフォーマット指定のメッセージ例


Sub メッセージ4a()
Dim ymd As Date
    ymd = Now
    MsgBox Format(ymd, "ggge""年""m""月""d""日")
End Sub
----------------------------------------------------------
Sub メッセージ4b()
Dim ymd As Date
    ymd = Now
    MsgBox Format(ymd, "yyyy/m/d")
End Sub
----------------------------------------------------------
Sub メッセージ4c()
Dim ymd As Date
    ymd = Now
    MsgBox Format(ymd, "m/d")
End Sub
----------------------------------------------------------
Sub メッセージ4d()
Dim suuzi As Long
    suuzi = 12345678
    MsgBox Format(suuzi, "#,###")
End Sub
----------------------------------------------------------
Sub メッセージ4e()
Dim suuzi As String
   aa = 123 / 1200
   MsgBox (FormatPercent(aa, 2))   '  %表示、2は少数点以下2桁
 
End Sub


[5]5種類のメッセージアイコン表示例
 表示方法は引数の値をプラスすれば指定できます(定数で指定の場合は2種類を+で区切って記述)。

@警告メッセージ アイコンを表示(画面17参照)
画面17警告メッセージ アイコンを表示例


Sub メッセージ5a()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", 19, "見本")
End Sub
---------------------------------------------------------------------
Sub メッセージ5a1()
Dim ync As Integer
ync = MsgBox("ボタンを選択してください", vbCritical + vbYesNoCancel, "見本")
End Sub

A2]問い合わせメッセージ アイコンを表示(画面18参照)
画面18問い合わせメッセージ アイコンを表示例


Sub メッセージ5b()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", 35, "見本")
End Sub


B3]注意メッセージ アイコンを表示(画面19参照)
画面19注意メッセージ アイコンを表示例


Sub メッセージ5c()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", 51, "見本")
End Sub

C情報メッセージ アイコンを表示(画面20参照)
画面20情報メッセージ アイコンを表示例


Sub メッセージ5d()
Dim ync As Integer
    ync = MsgBox("ボタンを選択してください", 67, "見本")
End Sub


【参考341】 メッセージをステータスバーへ表示でマクロは中断しません
メッセージボックスは確認ボタンが表示され、必ずストップしてしまうため動作を止めないでメッセージを
表示したい場合は、ステータスバーへ表示する方法もあります。以下はステータスへ記述例。

Application.StatusBar = "------画像変換中------"
 




(2)インプットボックス使用例
マクロの実行中に「数値」や「文字」の入力を求めるダイアログが、InputBox関数またはInputBoxメソッドです。


[1]InputBox関数とInputBoxメソッドの相違点
InputBox関数
 ・入力されたデータは全て「文字列」とて取得されます。「キャンセル」ボタンが押された場合は「””」が返ります。

・記述例: 
 戻り値代入の変数 = InputBox("メッセージ", "表題", "ボックスへ表示値") 
「ボックスへ表示値」→何も入力しない場合に、テキスト ボックスに既定値  として表示されます。
 表示場所は、画面の左端からと画面の上端からを引数で指定できます。

InputBoxメソッド
・入力されたデータを「数値」「文字列」「セル参照」などとして取得できます。
  「キャンセル」ボタンが押された場合は「False」(理論値)が返ります。

・記述例: 
tuki (戻り値代入)= Application.InputBox(msg, "月の指定", mm, Type:=1)
  例:mm変数→何も入力しない場合に、テキスト ボックスに既定値として表示
  例:Type:=1→ 返されるデータ型の指定(表6参照)(省略時は文字列)
  表示場所は、X座標、Y座標をポイント単位で指定できます。
【表6 InputBox メソッドで返されるデータ型の指定】



[2]InputBox関数使用マクロ例
本例はユーザーに月の入力をして頂くマクロ例で、インプットボックスを開いた時マクロ実行時のその
月がボックスに表示しています。(表示例は画面21参照

画面21 InputBox関数ダイアログ表示例


'インプット関数例
Sub インプット1()
Dim tuki As String
    mm = Month(Date)
    msg = "ブラフを作成する[月]を入力してください。"
    tuki = InputBox(msg, "月の指定", mm)
    If tuki = "" Then
        Exit Sub
    ElseIf IsNumeric(tuki) = False Then
        MsgBox "月を(数字)入力して下さい"
    Else
        MsgBox "「" & tuki & "」が入力されました"
    End If
End Sub


[3]InputBoxメソッド使用マクロ例
本例もユーザーに月の入力をして頂くマクロですが、こちらはInputBoxメソッドを使用し、入力は数値に
限定してあるので数値以外の入力が有った場合はメッセージを表示します(実行例は画面22参照)
画面22 「数値」以外が入力された場合の表示例



Sub インプット2()
Dim tuki As Integer
    mm = Month(Date)
    msg = "ブラフを作成する[月]を入力してください。"
    tuki = Application.InputBox(msg, "月の指定", mm, Type:=1)
    If tuki > 0 And tuki < 13 Then
        MsgBox "「" & tuki & "」が入力されました"
    ElseIf tuki = 0 Then
        Exit Sub
    Else
        MsgBox "月を(数字)入力して下さい"
    End If
End Sub



【戻る】    【Top画面】   【HPへ】