ExcelVBA Step_6_1 対話型プロシジャー

MsgBox 関数を使ってボタンを表示

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の戻り値と組み込み定数》
ボタン組み込み定数
OKvbOK1
キャンセルvbCancel2
中止vbAbort3
再試行vbRetry4
無視vblgnore5
はいvbYes6
いいえvbNo7

《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メニューの「表示」→「オブジェクトブラウザ」をクリック、または「オブジェクトブラウザ」ボタンをクリックします。

《オブジェクトブラウザ画面》


《オブジェクトブラウザで組み込み定数を調べる方法》

  1. 「オブジェクトブラウザ」ボタンをクリックします。
  2. 「プロジェクトライブラリ」ボックスから「Excel」を選択します。
  3. 「クラス」ペインから「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

《実行結果》