今回はInputBoxの使い方についてご説明します。
InputBoxはユーザーに値を入力してもらう際に使用すると非常に便利です。
詳細な設定をすることで、入力の制限や説明などを表示することで入力値の統一なども期待できます。
InputBoxはInputBox関数とInputBoxメソッドの2種類あります。
それぞれの違いと、基本的な使い方をご説明します。
1.InputBox関数とInputBoxメソッドの違い
InputBox関数はVBAの関数の一つです。
InputBoxメソッドはExcelのAppicationです。
InputBox関数はWord、Access、PowerPointなど他のOfficeでも使用できますが、InputBoxメソッドはExcel専用のAppicationで、他のOfficeには使えません。
記述方法はそれぞれ次の様に記述します。
InputBoxメソッド = Application.InputBox("文字列")
InputBox関数 = InputBox("文字列")
また、記述方法が違う以外にも、入力出来る文字のタイプを指定する引数のTypeを指定できるかどうか、ボタンの位置等の違いがあります。
2.InputBox関数
まずはInputBox関数についてご説明します。
記述方法は次の通りです。
InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])
InputBox関数の引数一覧
引数名 | 省略/必須 | 説明 |
Prompt | 必須 | 入力ダイアログボックス内に表示するメッセージの文字列を指定します。 「vbCr、vbLf、vbCrLf」を使用する事で改行できます。 |
Title | 省略可能 | 入力ダイアログボックスのタイトルバーに表示する文字列を指定します。 省略するとApplication名が表示されます。 |
Default | 省略可能 | 入力用のテキストボックスに既定値で表示する文字列を指定します。 |
XPos | 省略可能 | 入力ダイアログボックスを表示する位置のX座標を指定します。 |
YPos | 省略可能 | 入力ダイアログボックスを表示する位置のY座標を指定します。 |
HelpFile | 省略可能 | ダイアログボックスに状況依存のヘルプを設定するために使用する、 ヘルプファイルの名前を指定します。 |
Context | 省略可能 | ヘルプトピックに指定したコンテキスト番号を表す数式を指定します。 |
引数の説明を見ただけでは、使い方がわかりにくいので、サンプルコードです。
InputBox関数のサンプルコード
「Prompt」「Title」「Default」
「Prompt」、「Title」、「Default」をそれぞれの場所に文字列として表示します。
Sub Sample1()
Dim GetStr As String
GetStr = InputBox("Prompt", "Title", "Default")
End Sub
「XPos」「YPos」
省略すると中央に表示されますが、指定する事で表示位置を指定できます。
Sub Sample2()
Dim GetStr As String
GetStr = InputBox("Prompt", "Title", "Default", XPos:=3000, YPos:=3000)
End Sub
キャンセル処理と結果を取得する
InputBoxというくらいですので、テキストボックスに何かしらの値を入力する事が前提ではありますが、×ボタンやキャンセル、未入力でOKボタンが押されることももちろんあります。
キャンセルされた判定は「StrPtr関数」で取得します。
未入力でOKした場合は取得した値が空白かどうかで判定します。
それらの結果を取得するサンプルコードです。
Sub Sample3()
Dim GetStr As String
GetStr = InputBox("Prompt", "Title")
'■キャンセル判定
If StrPtr(GetStr) = 0 Then
MsgBox "キャンセルされました。"
'■未入力判定
ElseIf GetStr = "" Then
MsgBox "未入力です。"
'■正常に入力
Else
MsgBox GetStr
End If
End Sub
ここで注意が必要です。
ひらがなの文字列を入植してもらった場合に、「未確定」状態でOKを押されても値を取得出来ません。
Enter等で確定しないと正常に値を取得できません。
3.InputBoxメソッド
つぎはInputBoxメソッドについてご説明します。
記述方法は次の通りです。
Application.InputBox (Prompt[,Title] _
[,Default][,Left] _
[,Top][,HelpFile] _
[,HelpContextID][,Type])
InputBoxメソッドの引数一覧
引数名 | 省略/必須 | 説明 |
Prompt | 必須 | 入力ダイアログボックス内に表示するメッセージの文字列を指定します。 「vbCr、vbLf、vbCrLf」を使用する事で改行できます。 |
Title | 省略可能 | 入力ダイアログボックスのタイトルバーに表示する文字列を指定します。 省略すると既定値の「入力」が表示されます。 |
Default | 省略可能 | 入力用のテキストボックスに既定値で表示する文字列を指定します。 |
Left | 省略可能 | 入力ダイアログボックスを表示する位置のX座標を指定します。 |
Top | 省略可能 | 入力ダイアログボックスを表示する位置のY座標を指定します。 |
HelpFile | 省略可能 | ダイアログ ボックスに状況依存のヘルプを設定するために使用する、 ヘルプファイルの名前を指定します。 |
HelpContextID | 省略可能 | ヘルプトピックに指定したコンテキスト番号を表す数式を指定します。 |
Type | 省略可能 | 返されるデータ型を指定します。 省略するとダイアログ ボックスは、文字列を返します。 |
引数の説明を見ただけでは、使い方がわかりにくいので、サンプルコードです。
InputBoxメソッドのサンプルコード
「Prompt」「Title」「Default」
「Prompt」、「Title」、「Default」をそれぞれの場所に文字列として表示します。
Sub Sample4()
Dim GetStr As String
GetStr = Application.InputBox("Prompt", "Title", "Default")
End Sub
InputBox関数では右上の方にボタンがありましたが、InputBoxメソッドでは下にボタンが表示されます。
「Left」「Top」
X座標とY座標を指定する事で表示位置を指定できます。
という説明がありますが、Excel2003では適用されるようですがExcel2010以降適用されないという情報を拝見しました。
Excel2016では下記コードを記述して実行してみましたが、中央に表示されました。
Sub Sample5()
Dim GetStr As String
GetStr = Application.InputBox("Prompt", "Title", "Default", Left:="300", Top:="500")
End Sub
「Type」
InputBox関数にはない引数の「Type」です。
こちらは引数を指定することで、入力できるテキストのタイプを指定することが可能です。
値 | 説明 |
0 | 数式 |
1 | 数値 |
2 | 文字列 |
4 | 論理値(True/False) |
8 | セル(Rangeオブジェクト) |
16 | #N/Aなどのエラー値 |
64 | 数値配列 |
数値のサンプルコード
Sub Sample6()
Dim GetStr As String
GetStr = Application.InputBox("Prompt", "Title", Type:=1)
End Sub
Typeに数値の1を指定した場合、上記の様に数値を指定することが出来ます。
ただし、数値以外を入力すると次のように「数値が正しくありません。」と表示されます。
セル(Rangeオブジェクト)のサンプルコード
今までのサンプルコードと違い、変数をRange型にしています。
さらにInputBoxの取得もRangeオブジェクトを取得するために「Set」を記述しています。
Sub Sample7()
Dim GetRange As Range
Set GetRange = Application.InputBox("Prompt", "Title", Type:=8)
GetRange = 100
End Sub
この様にInputBoxが表示されてから、範囲を指定する事で選択したセルが取得出来ます。
上記のコードでは指定されたセルに「100」と入力しますので、OKボタンを押すと次のようになります。
キャンセル処理と結果を取得する
InputBoxというくらいですので、テキストボックスに何かしらの値を入力する事が前提ではありますが、×ボタンやキャンセル、未入力でOKボタンが押されることももちろんあります。
キャンセルされた判定は「StrPtr関数」で取得します。
未入力でOKした場合は取得した値が空白かどうかで判定します。
それらの結果を取得するサンプルコードです。
キャンセル処理と未入力処理はSelect Caseでキャンセルは「False」、未入力は「””」で判定します。
Sub Sample8()
Dim GetStr As String
GetStr = Application.InputBox("Prompt", "Title")
'■キャンセル判定
Select Case GetStr
Case False
MsgBox "キャンセルされました。"
End
'■未入力判定
Case ""
MsgBox "未入力です。"
'■正常に入力
Case Else
MsgBox GetStr
End Select
End Sub
Typeを8に指定した場合は、上記のコードではデータ型が違うためキャンセルやエラーを回避出来ません。
ですので、次のようにエラー処理を組み込みます。
Sub Sample9()
Dim GetRange As Range
On Error GoTo エラー処理
Set GetRange = Application.InputBox("Prompt", "Title", Type:=8)
Exit Sub
エラー処理:
MsgBox "キャンセルされました。"
End Sub