ExcelVBA Step_6_1 対話型プロシジャー |
MsgBox関数を使うと、さまざまなボタンを配置して処理を選択することができます。
《構文》
MsgBox(Prompt,Buttons,Title,Helpfile,Context)
|
《サンプルプログラム》
Sub ボタンの表示()
MsgBox "注意メッセージ", vbOKOnly + vbExclamation
MsgBox "警告メッセージ", vbOKOnly + vbCritical
MsgBox "問い合わせメッセージ", vbOKOnly + vbQuestion
MsgBox "情報メッセージ", vbOKOnly + vbInformation
End Sub
|
《実行結果》
上記のサンプルの中の vbOKOnlyや、vbExclamationpを組み込み定数といいます。
組み込み定数とは、プロパティや引数に代入するために、VBAにあらかじめ用意されているキーワードのことです。
MsgBox 関数は、ユーザーが選択したボタンを「数値」で返します。もしユーザーが「はい」ボタンを選択するとMsgBox関数は6を返すのです。
組み込み定数には、ExcelのVBAで用意されたもの(xlの文字で始まる)と、Visual Basic で用意されたもの(vbの文字で始まるもの)があります。
《MsgBoxの戻り値と組み込み定数》
ボタン | 組み込み定数 | 値 |
OK | vbOK | 1 |
キャンセル | vbCancel | 2 |
中止 | vbAbort | 3 |
再試行 | vbRetry | 4 |
無視 | vblgnore | 5 |
はい | vbYes | 6 |
いいえ | vbNo | 7 |
《MsgBoxを使ったサンプルプロシージャ》
Sub セルデータ削除を確認する()
'準備:Sheet1シートのセルにダミーデータを入力しておく
Dim myButton As Integer '整数型変数宣言
Dim myMSG As String '文字列型変数宣言
Dim myTitle As String
'ダイアログボックスに表示するメッセージとタイトルを変数に代入
myMSG = "すべてのセルデータを削除してよろしいですか?"
myTitle = "データ削除確認"
'ダイアログボックスを表示
'戻り値を取得するために、引数を囲む
myButton = MsgBox(myMSG, vbYesNo + vbExclamation, myTitle)
If myButton = vbYes Then 'Yes だったら
Worksheets("sheet1").Activate 'Sheet1をアクティブに
Cells.ClearContents 'セルデータをすべて削除
End If
End Sub
|
《実行結果》
オブジェクトブラウザというツールを使うと、VBAで現在使用可能なオブジェクトクラスとそのクラスに含まれる機能要素(プロパティ,メソッド,イベント,関数,プロシージャ,など)の情報を表示することができます。(検索ボタンを使って調べることができる)
VBAに共通する機能や、MSエクセル固有の機能なども調べることができます。
オブジェクトブラウザを起動するには、VBEメニューの「表示」→「オブジェクトブラウザ」をクリック、または「オブジェクトブラウザ」ボタンをクリックします。
《オブジェクトブラウザ画面》

《オブジェクトブラウザで組み込み定数を調べる方法》
- 「オブジェクトブラウザ」ボタンをクリックします。
- 「プロジェクトライブラリ」ボックスから「Excel」を選択します。
- 「クラス」ペインから「Constants」を選択します。
Excelの組み込み定数が表示されます。
InputBoxメソッドは、テキストボックスが配置されたダイアログボックスを表示して、ユーザーが任意に入力したデータを取得するものです。
《構文》
Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
|
Inputメソッドは、必ずApplicationオブジェクトに対して使用します。省略すると、Visual BasicのInputBox関数が呼び出されます。
《引数》
Prompt | メッセージを指定します(省略はできない) |
Title | タイトルを指定します(省略可能) |
Default | ダイアログボックスを表示したときに、入力ボックスに初期値を表示するときに値を指定します。 |
Left | 画面の左上隅を基準として、ダイアログ ボックスの X 座標をポイント単位で指定します(省略可能) |
Top | ダイアログ ボックスの Y 座標をポイント単位で指定します。(省略可能) |
HelpFile | 引数 HelpFile および 引数 HelpContextID が共に指定されていれば、ダイアログ ボックス内に [ヘルプ] ボタンが表示されます。(省略可能) |
HelpContextID | 引数 HelpFile で指定したヘルプ ファイル内のヘルプ トピックのコンテキスト ID 番号を指定します。 |
Type | 入力するデータの型を数値で指定します。
ここで指定したデータ型と異なるデータが入力されたときには、ダイアログボックスを閉じるときにエラーが発生します。(省略可能)※省略する場合は文字列(2) |
《データ型に指定できる種類》
意味 | 値(Type:=) |
数式 | 0 |
数値 | 1 |
文字列 | 2 |
論理値(True か False) | 4 |
セル参照(Rangeオブジェクト) | 8 |
#N/A などのエラー値 | 16 |
数値配列 | 64 |
《サンプルプログラム》
Sub 入力データの取得()
'入力ボックスに印刷部数を入れて、印刷を実行する
'印刷したくない場合は「キャンセル」ボタン、もしくはゼロ入力
'このプロシージャを実行するには売上集計ブックの「売上集計」シートが必要
Dim myPrintMaisu As Integer '整数型変数宣言
Dim myMsg As String, myTitle As String '文字型変数宣言
myMsg = "印刷部数を入力してください" '文字列を変数に代入
myTitle = "売上集計印刷"
myPrintMaisu = Application.InputBox(Prompt:=myMsg, Title:=myTitle, _
Default:=1, Type:=1) '入力した内容を取得
If myPrintMaisu <> 0 Then
Worksheets("売上集計").PrintOut Copies:=myPrintMaisu
Else
MsgBox "印刷指定はキャンセルされました"
End If
End Sub
|
《実行結果》
《サンプルプログラム》
Sub 入力ボックス_2()
'このプロシージャを実行するには売上集計ブックが必要です。
'売上集計シート 1 のセル B5 から始まるリストの中で、入力ボックスに
'入力された文字をキーに、一番左のフィールドでフィルターをかけます。
Dim myCode As String
myCode = Application.InputBox("区分を入力してください(A〜C)")
If myCode <> "False" Then
Worksheets("売上集計").Activate
'AutoFilterメソッド、Fieldの引数1は一番左のフィールド
Range("B6").AutoFilter Field:=1, Criteria1:=myCode
End If
End Sub
|
《実行結果》