Excel VBA InputBox(インプットボックス)の使い方と関数とメソッドの違い

ExcelVBA-基礎編

今回は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
タイトルとURLをコピーしました