プログラムを対話形式で実行する。  Fom183

MsgBoxとInputBox

MsgBox関数

メッセージボックスにメッセージを表示します。クリックしたボタンに応じた値を返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

構文

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


・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

prompt メッセージボックスに表示されるメッセージ 省略不可
buttons メッセージボックスに表示されるボタンの種類や個数、
使用するアイコンのスタイルなどを指定
省略可
title メッセージボックスのタイトル 省略可
helpfile メッセージボックスにヘルプを設定する為のファイル名 省略可
context ヘルプボックスに指定したコンテキスト番号 省略可

◆Sub セルの削除()
MsgBox "アクティブセルを削除します。", vbOKCancel + vbExclamation, "セルの削除"
ActiveCell.Delete
End Sub

MsgBox関数のボタンとアイコン
組み込み定数 内容 ボタン
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関数で、扱うことの出来るのは文字列になります。
 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が 以外の場合は、 Then
 変数mybusuの値を印刷部数として指定し

Else それ以外の場合は、
メッセージを表示します。
End If

End Sub

※Copies→印刷部数 (copies:=10 →印刷部数10枚)

指定した位置でメッセージを改行する場合

InputBox、MsgBoxに表示するメッセージが複数行にわたる場合、指定した位置でメッセージを改行することが出来ます。

Chr関数
指定した文字コードに対応する文字を示す値を返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

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を表示して「シート名を入力して下さい。」とメッセージを表示するようにしてあります。

プログラムの追加部分は、赤字で、表示してあります。

VBAでVLOOKUP関数を使う。

※Excelに搭載されている関数を「ワークシート関数」と呼びます。

次のプロシージャは、、ExcelのVLOOKUP関数の使用例です。

Sub Vlookup関数()
Dim 商品名 As String
商品名 = Application.WorksheetFunction.VLookup(Range("B11"), Range("A3:B9"), 2)
MsgBox "商品名は、" & 商品名 & "です。"
End Sub