メッセージボックスにメッセージを表示します。クリックしたボタンに応じた値を返します。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文
MsgBox(prompt[,buttons][,title][,helpfile,context])
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
prompt | メッセージボックスに表示されるメッセージ | 省略不可 |
buttons | メッセージボックスに表示されるボタンの種類や個数、 使用するアイコンのスタイルなどを指定 |
省略可 |
title | メッセージボックスのタイトル | 省略可 |
helpfile | メッセージボックスにヘルプを設定する為のファイル名 | 省略可 |
context | ヘルプボックスに指定したコンテキスト番号 | 省略可 |
◆Sub セルの削除()
MsgBox "アクティブセルを削除します。", vbOKCancel + vbExclamation,
"セルの削除"
ActiveCell.Delete
End Sub
組み込み定数 | 内容 | 値 | ボタン |
vbOKOnly | OKボタンを表示 Sub MsgBox01() MsgBox "セルを塗りつぶす。", vbOKOnly, "セルを塗る" ActiveCell.Interior.ColorIndex = 3 End Sub |
0 | |
vbOKCancel | OKボタンとキャンセルボタンを表示 Sub MsgBox02() MsgBox "セルを塗りつぶす。", vbOKCancel, "セルを塗る" ActiveCell.Interior.ColorIndex = 4 End Sub |
1 | |
vbYesNo | 「はい」ボタンと「いいえ」ボタンを表示 Sub MsgBox03() MsgBox "セルを塗りつぶす。", vbYesNo, "セルを塗る" ActiveCell.Interior.ColorIndex = 5 End Sub |
4 |
組み込み定数 | 内容 | 値 | ボタン |
vbOKOnly + vbCritical | OKボタン + 警告アイコン Sub MsgBox04() MsgBox "セルを塗りつぶす。", vbOKOnly + vbCritical, "セルを塗る" ActiveCell.Interior.ColorIndex = 5 End Sub |
16 | |
vbOKOnly + vbQuestion |
OKボタン+ 問い合わせのアイコン Sub MsgBox05() MsgBox "セルを塗りつぶす。", 0 + vbQuestion, "セルを塗る" ActiveCell.Interior.ColorIndex = 5 End Sub |
32 | |
vbYesNo + vbExclamation |
「はい」ボタンと「いいえ」ボタン+注意のアイコン Sub MsgBox06() MsgBox "セルを塗りつぶす。", 4 + 48, "セルを塗る" ActiveCell.Interior.ColorIndex = 5 End Sub |
48 | |
vbOKOnly + vbInfomation |
OKボタンを表示+情報のアイコン Sub MsgBox07() MsgBox "セルを塗りつぶす。", vbOKOnly + 64, "セルを塗る" ActiveCell.Interior.ColorIndex = 5 End Sub |
64 |
※1 組み込み定数は、VBAなどのアプリケーション側であらかじめ定義されている定数です。
※2 組み込み定数の変わりに「値」を引数として指定できます。
MsgBoxでは、「OK」や「キャンセル」などのボタンをクリックした時に戻り値を返します。
この戻り値を使って、クリックしたボタンに応じて処理を分岐させることが出来ます。
◆MsgBox関数の戻り値の例
ボタン | 組み込み定数 | 戻り値 |
OK | vbOK | 1 |
キャンセル | vbCancel | 2 |
はい | vbYes | 6 |
いいえ | vbNo | 7 |
例題<メッセージボックスの戻り値を使った処理の分岐>
「OK」をクリックすると選択したセル範囲を塗つぶします。
「キャンセル」をクリックするとMsgBox「塗つぶしをキャンセル」を表示して処理を中止します。
Sub msgboxの戻り値() Dim mymsg As Integer mymsg = MsgBox("選択したセルを塗りつぶしますか?", vbOKCancel + vbExclamation, "塗りつぶし確認") If mymsg = 1 Then Selection.Interior.ColorIndex = 10 Else MsgBox "塗つぶしをキャンセル" End If End Sub |
メッセージとテキストボックスを表示します。
※inputBox関数で、扱うことの出来るのは文字列になります。
InputBox関数で、帰ってきた文字列を数値に変換するには、
Val(文字列)を使用します。Val関数→文字列を数値に変換します。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文
InputBox(Prompt[,title][,default][,xpos][,ypos][,helpfile,context])
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
prompt | メッセージボックスに表示されるメッセージ | 省略不可 |
title | メッセージボックスのタイトル | 省略可 |
defalt | ユーザーが何も入力しない時に、テキストボックスに規定値として表示する |
省略可 |
xpos | 画面左側からダイアログボックスの左端までの距離を指定 単位は、twip(1cmは、約567twip) 省略すると画面の中央に表示 |
省略可 |
ypos | 画面上側からダイアログボックスの上端までの距離を指定 単位は、twip(1cmは、約567twip) 省略すると画面上端1/3に表示 |
省略可 |
helpfile | メッセージボックスにヘルプを設定する為のファイル名 | 省略可 |
context | ヘルプボックスに指定したコンテキスト番号 | 省略可 |
◆Sub InputBox01()
Dim fcode As String
fcode = InputBox("フォントの色を数値で指定して下さい。1・2・3・4",
"フォントカラーの変更", 3, 8000, 4000)
If fcode = "" Then
MsgBox "キャンセルします。"
Else
Selection.Font.ColorIndex = fcode
End If
End Sub
◆Val関数を使用した場合。
※文字列を数値に変換します。
------------------------
構文
Val(文字列)
-----------------------
Sub InputBox02()
Dim fcode As String
Dim henk As Integer
fcode = InputBox("フォントの色を数値で指定して下さい。1・2・3・4",
"フォントカラーの変更", 3, 8000, 4000)
henk = Val(fcode)
Selection.Font.ColorIndex = henk
End Sub
※Sub InputBox02()の場合キャンセルしても「メッセージボックス」は表示されません。
※キャンセルをすると長さが「0」の文字列「””」が返されます。
下のプログラム(InputBox03())で、キャンセルを選択するとエラーになります。
エラーが出ないようにするには、上記のようなプログラムにする必要があります。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
エラーが出ます。
Sub InputBox03()
Dim fcode As String
fcode = InputBox("フォントの色を数値で指定して下さい。1・2・3・4",
"フォントカラーの変更", 3, 8000, 4000)
Selection.Font.ColorIndex = fcode
End Sub
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
練習問題
InputBox関数を使用して、「印刷部数を指定」するプログラム
印刷部数の指定プログラム | 解説 |
Sub 印刷部数の指定() Dim myprint As String Dim mybusu As Integer myprint = InputBox("何部印刷しますか?", "印刷部数指定", 1) mybusu = Val(myprint) If mybusu <> 0 Then ActiveSheet.PrintOut copies:=mybusu Else MsgBox "印刷をキャンセルします。" End If End Sub |
Sub 印刷部数の指定 変数myprintを宣言する(文字列型) 変数mybusuを宣言する(整数型) InputBoxの値を変数myprintに代入します。 変数myprintの値をval関数を使用して変数mybusuに代入します。 If 変数mybusuが 0以外の場合は、 Then 変数mybusuの値を印刷部数として指定し Else それ以外の場合は、 メッセージを表示します。 End If End Sub |
※Copies→印刷部数 (copies:=10 →印刷部数10枚)
InputBox、MsgBoxに表示するメッセージが複数行にわたる場合、指定した位置でメッセージを改行することが出来ます。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文
Chr(文字コード)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
例 <文字コード>
Chr(9) | タブ |
Chr(10) | ラインフォールド |
Chr(13) | キャリッジリターン |
Sub 改行()
Dim fcode As String
fcode = InputBox("フォントの色を数値で指定して下さい。" & Chr(13) & "1・2・3・4", "フォントカラーの変更", 3, 8000, 4000) ’テキストボックスに入力したフォントの数値を、変数「fcode」代入する。
If fcode = "" Then ’もし空白だったら、メッセージボックスを表示します。
MsgBox "キャンセルします。"
Else ’それ以外の場合は、
Selection.Font.ColorIndex = fcode ’「fcode」の値を選択されたフォントの色を変更します。
End If
End Sub
練習問題
InputBoxを使用して、シートの追加し、シート名を入力するプログラムを作成します。
シートの追加とシート名の入力 | 解 説 |
Sub シートを追加してシート名を入力() Dim mysname As String Dim i As Integer Dim wscnt As Integer mysname = InputBox("請求月を入力して下さい。", "シート名の入力") mysname = mysname & "月分請求書" wscnt = Worksheets.Count For i = 1 To wscnt If mysname = Worksheets(i).Name Then MsgBox "同名シートがあります" Worksheets(i).Activate Exit Sub End If Next Worksheets.Add ActiveSheet.Name = mysname End Sub |
Sub シートを追加してシート名を入力() 変数 mysname を宣言 変数 i を宣言 変数 wscnt を宣言 inputboxを表示し、入力した内容を変数mysnameに代入する。 mysname+月分請求書をmysnameに代入する。 ワークシートの枚数を数え、変数「wscnt」に代入する。 ワークシートを1から「wscnt」まで繰り返す IF ワークシートの名前が「mysname」と同じ場合は、 MsgBoxを表示する。 Worksheets(i)を選択状態にする。 Exit Sub End If Next 新たにワークシートを加え シート名を「mysname」にする。 End Sub |
Sub シートの追加してシート名を入力02() | 解 説 |
Sub シートの追加してシート名を入力02() Dim mysname As String Dim i As Integer Dim wscnt As Integer mysname = InputBox("請求月を入力して下さい。", "シート名の入力") If mysname = "" Then MsgBox "シート名を入力して下さい。" Else wscnt = Worksheets.Count For i = 1 To wscnt If mysname = Worksheets(i).Name Then MsgBox "同名シートがあります" Worksheets(i).Activate Exit Sub End If Next Worksheets.Add ActiveSheet.Name = mysname End If End Sub |
上記プログラムの場合inputBoxが空白の場合でも、「月分請求書」というシート名で、シートが、追加されます。 このプログラムは、シート名が空白の場合は、MsgBoxを表示して「シート名を入力して下さい。」とメッセージを表示するようにしてあります。 プログラムの追加部分は、赤字で、表示してあります。 |
※Excelに搭載されている関数を「ワークシート関数」と呼びます。
次のプロシージャは、、ExcelのVLOOKUP関数の使用例です。
Sub Vlookup関数()
Dim 商品名 As String
商品名 = Application.WorksheetFunction.VLookup(Range("B11"), Range("A3:B9"),
2)
MsgBox "商品名は、" & 商品名 & "です。"
End Sub