InputBox 関数と似たインタフェースとして Application.InputBox があります。これは関数ではありません(ApplicationオブジェクトのInputBoxメソッドです)が、InputBox関数とだいたい同じような機能を提供していますのでここで説明します。
InputBox関数との相違点
Application.InputBox は InputBox 関数と同様、マクロ実行中にユーザーからのデータ入力を受け付けるダイアログボックスです。
InputBox 関数との主な違いは入力データタイプを指定する引数 Type が指定可能になっているところです。また、ダイアログボックス上のボタン配置なども若干異なります。
相違点 | InputBox関数 | InputBoxメソッド |
---|---|---|
入力データのタイプ指定 | 不可能 | 可能 |
入力キャンセル時の戻り値 | 値0の文字列 | False |
ボタン配置 | 右上 | 右下 |
InputBoxメソッド使用方法
引数名 | 省略 | 説明 |
---|---|---|
Prompt | × | 必須入力です。ダイアログ ボックス内にメッセージとして表示する文字列を示す文字列式を指定します。 改行するにはvbCr、vbLf、vbCrLfのいずれかを使用します。 |
Title | ○ | ダイアログ ボックスのタイトルを指定します。 省略すると、既定値の “入力” がタイトル バーに表示されます。 |
Default | ○ | テキスト ボックスに既定値として表示する文字列式を指定します。 |
Left | ○ | パソコン画面の左上隅を基準として、ダイアログ ボックスの X 座標をポイント (印刷する文字のサイズ (高さ) を指定する基本単位。)単位で指定します。 |
Top | ○ | パソコン画面の左上隅を基準として、ダイアログ ボックスの Y 座標をポイント単位で指定します。 |
HelpFile | ○ | この引数は、表示するダイアログ ボックスの説明を、ヘルプを使って表示するときに指定します。 使用するヘルプ ファイルの名前を示す文字列式を指定します。 引数 helpfile を指定した場合は、引数 context も指定する必要があります。 |
Context | ○ | ヘルプ トピックに指定したコンテキスト番号を表す数式を指定します。 引数 context を指定した場合は、引数 helpfile も指定する必要があります。 |
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
上記サンプルマクロを実行し、まずは キャンセル ボタンを押下してみます。
キャンセルされた旨のメッセージが表示されました。
再度実行し、今度は数値ではなく文字列を入力してみます。
InputBoxメソッド自体のチェック機能によりエラーが表示されました。
上記で OK ボタンを押下すると、再度ダイアログが表示されます。
最後は数値を入力します。
入力された数値が正しく表示されました。
セルアドレスを受け付ける
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 ボタンを押下すると、選択範囲のセルに連番が設定されます。