InputBoxメソッド

InputBox 関数と似たインタフェースとして Application.InputBox があります。これは関数ではありません(ApplicationオブジェクトのInputBoxメソッドです)が、InputBox関数とだいたい同じような機能を提供していますのでここで説明します。

スポンサーリンク

InputBox関数との相違点

Application.InputBox は InputBox 関数と同様、マクロ実行中にユーザーからのデータ入力を受け付けるダイアログボックスです。
InputBox 関数との主な違いは入力データタイプを指定する引数 Type が指定可能になっているところです。また、ダイアログボックス上のボタン配置なども若干異なります。

InputBox関数、InputBoxメソッドの主な相違点
相違点 InputBox関数 InputBoxメソッド
入力データのタイプ指定 不可能 可能
入力キャンセル時の戻り値 値0の文字列 False
ボタン配置 右上 右下

InputBoxメソッド使用方法

構文
Application.InputBox(Prompt [, Title] [, Default] _
    [, Left] [, Top] [, HelpFile] [, HelpContextID] [, Type])

【戻り値】 バリアント型 (Variant)
引数名 省略 説明
Prompt × 必須入力です。ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。 改行するにはvbCr、vbLf、vbCrLfのいずれかを使用します。
Title ダイアログ ボックスのタイトルを指定します。 省略すると、既定値の “入力” がタイトル バーに表示されます。
Default テキスト ボックスに既定値として表示する文字列式を指定します。
Left パソコン画面の左上隅を基準として、ダイアログ ボックスの X 座標をポイント (印刷する文字のサイズ (高さ) を指定する基本単位。)単位で指定します。
Top パソコン画面の左上隅を基準として、ダイアログ ボックスの Y 座標をポイント単位で指定します。
HelpFile この引数は、表示するダイアログ ボックスの説明を、ヘルプを使って表示するときに指定します。 使用するヘルプ ファイルの名前を示す文字列式を指定します。 引数 helpfile を指定した場合は、引数 context も指定する必要があります。
Context ヘルプ トピックに指定したコンテキスト番号を表す数式を指定します。 引数 context を指定した場合は、引数 helpfile も指定する必要があります。
Type 返されるデータの型を指定します。 省略すると、ダイアログ ボックスは文字列 (テキスト) を返します。
引数Typeに指定可能な値
説明
0 数式
1 数値
2 文字列 (テキスト)
4 論理値 (True または False)
8 セル参照 (Range オブジェクト)
16 #N/A などのエラー値
64 数値配列

引数Typeには次の値のいずれか 1 つまたは合計値を指定できます。例えば、文字列と数値を入力可能にしたい場合は、引数Typeの値を 1 + 2 = 3 に設定します。

InputBoxメソッド使用例

引数Prompt、Title、Defaultの表示場所

引数の表示場所を確認する例です。

Sub sample_ef012_01()
    Dim strData    As String

    strData = Application.InputBox( _
                    "ここが引数promptです。" & vbLf & "(必須入力)", _
                    "ここが引数titleです。", _
                    "ここが引数defaultです。")
End Sub
ダイアログボックスの表示画面
ダイアログボックスの表示画面

デフォルト値とタイプの設定

省略可能引数のうち、名前付き引数を使用してDefaultとTypeに値を設定する例です。Type に3を設定すると、数値(1)と文字列(2) を入力することができます。

Sub sample_ef012_02()
    Dim varData     As Variant

    varData = Application.InputBox( _
                    "数値または文字列を入力してください。", _
                    Default:=123, _
                    Type:=3)        '数値(1) + 文字列(2)
End Sub
名前付き引数を使用した例
名前付き引数を使用した例

数値のみを受け付ける

Typeに1(数値)を指定して、数値のみを受け付ける例です。キャンセルボタンを押された場合の処理を追加することで、さまざまな場面で使用できると思います。

Sub sample_ef012_03()
    Dim varData     As Variant

    '入力キャンセルされるとブール値が返ってくるので、
    'バリアント型変数で受けます。
    varData = Application.InputBox( _
                    "数値を入力してください。", Type:=1)

    If TypeName(varData) = "Boolean" Then
        MsgBox "入力がキャンセルされました。", vbExclamation
    Else
        MsgBox "入力された数値は『" & varData & "』です。", vbInformation
    End If
End Sub

 MsgBox関数 TypeName関数

上記サンプルマクロを実行し、まずは キャンセル ボタンを押下してみます。

[キャンセル]または[×]ボタンを押下
[キャンセル]または[×]ボタンを押下

キャンセルされた旨のメッセージが表示されました。

入力がキャンセルされました。
入力がキャンセルされました。

再度実行し、今度は数値ではなく文字列を入力してみます。

文字列を入力して[OK]ボタンを押下
文字列を入力して[OK]ボタンを押下

InputBoxメソッド自体のチェック機能によりエラーが表示されました。

エラー表示
エラー表示

上記で OK ボタンを押下すると、再度ダイアログが表示されます。

ダイアログボックス再表示
ダイアログボックス再表示

最後は数値を入力します。

数値を入力して[OK]ボタンを押下した場合
数値を入力して[OK]ボタンを押下した場合

入力された数値が正しく表示されました。

入力された値は123です。
入力された値は123です。

セルアドレスを受け付ける

Type に8を設定してセルの参照を取得し、そのセルへ1からの連番を編集する例です。

Sub sample_ef012_04()
    On Error Resume Next
    Dim RangeArea   As Range
    Dim wRange      As Range
    Dim i           As Integer

    'セル範囲(オブジェクト)の参照をSetステートメントで格納します。
    Set RangeArea = Application.InputBox( _
                    "連番を入力するセル範囲を選択してください。", Type:=8)

    '上記の命令ではキャンセルに対応できないので、エラーをトラップします。
    If Err.Number > 0 Then
        MsgBox "処理がキャンセルされました。", vbExclamation
        End     '処理終了
    End If

    '連番を編集
    i = 1
    For Each wRange In RangeArea
        wRange.Value = i
        i = i + 1
    Next
End Sub

 Setステートメント On Errorステートメント
 For Each…Next 
MsgBox関数

上記サンプルマクロを実行すると、入力ダイアログが表示されるので、参照先のセルをマウスでドラッグして選択します。一度選択した後、Ctrl キーを押しながら再度セルをドラッグすると複数のセル範囲を選択できます。

参照先のセルをマウスで選択
参照先のセルをマウスで選択

セル参照後 OK ボタンを押下すると、選択範囲のセルに連番が設定されます。

セルを参照して[OK]ボタン押下
セルを参照して[OK]ボタン押下
タイトルとURLをコピーしました