【VBAスタンダード対策】Application.InputBox メソッドと Type 引数を攻略!
ユーザーにデータ入力を促すダイアログボックス。VBA組み込みの InputBox 関数とは異なり、Application.InputBox メソッド では Type 引数を指定することで、マウスによるセル範囲の選択や入力データ型の制限が可能です。記述ルールと正解の選択肢を押さえましょう。
1. 問題:マウスによるセル範囲の取得と Type 引数
【 問題 】 下記のコードは、ダイアログボックスを表示してユーザーにマウスでワークシート上のセル範囲を選択させ、選択されたセル範囲(Rangeオブジェクト)をオブジェクト変数 rng に格納しようとしています。空欄 ( A ) に入る正しい記述はどれでしょうか?
Sub SelectCellRange()
Dim rng As Range
On Error Resume Next
( A ) Application.InputBox(Prompt:="セルを選択してください", Type:=8)
On Error GoTo 0
If Not rng Is Nothing Then
MsgBox "選択されたセル: " & rng.Address
End If
End Sub
Dim rng As Range
On Error Resume Next
( A ) Application.InputBox(Prompt:="セルを選択してください", Type:=8)
On Error GoTo 0
If Not rng Is Nothing Then
MsgBox "選択されたセル: " & rng.Address
End If
End Sub
① rng =
② Set rng =
③ rng.Value =
④ Set rng.Address =
2. 正解:InputBox メソッドの代入記述に関する正解
正解: ② Set rng =
3. 解説:Application.InputBox メソッドと Type:=8 の重要ルール
Application.InputBox メソッドで Type:=8 を指定すると、戻り値としてセル範囲を表す Range オブジェクトが返されます。
[ Application.InputBox の構造とポイント ]
1. Type:=8 の場合は Set キーワードが必須!
2. InputBox 関数(VBA組み込み)との決定的な違い
・InputBox 関数:戻り値は常に「文字列(String)」。セル選択は不可。
・Application.InputBox メソッド:
3. キャンセル時のエラー回避(On Error Resume Next)
1. Type:=8 の場合は Set キーワードが必須!
Type:=8 で返されるデータは「Range オブジェクト(参照型)」です。VBAではオブジェクト変数(rng)にオブジェクトを代入する際、必ず頭に Set を記述しなければなりません(①のように Set を省くと「オブジェクト変数または With ブロック変数が設定されていません」というエラーになります)。2. InputBox 関数(VBA組み込み)との決定的な違い
・InputBox 関数:戻り値は常に「文字列(String)」。セル選択は不可。
・Application.InputBox メソッド:
Type:=8 を指定することで「マウスによるセル選択」が可能となり、Rangeオブジェクトを取得できる。3. キャンセル時のエラー回避(On Error Resume Next)
Type:=8 のダイアログでユーザーが「キャンセル」ボタンを押すと、Rangeオブジェクトではなく False が返されるため型エラーが発生します。そのため、コード内のように On Error Resume Next でエラーを回避するのが定石です。ここが試験に出る!: スタンダード試験では、「Type:=8(セル範囲)には Set が必要」「Type:=1(数値)や Type:=2(文字列)などの基本型には Set は不要」という、代入時の Set の要否と Type 引数の値(数値:1、文字列:2、セル範囲:8)の組み合わせが頻繁に狙われます。
4. まとめ
「セル範囲を選択させるなら Set rng = Application.InputBox(..., Type:=8) 」。このパターンを押さえておけば、マクロ実行時にユーザーへ集計対象セルを自由に選択させるようなインタラクティブで柔軟なツールを作成できるようになります。
PR