Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » Application.InputBoxメソッドでRangeだけを

Application.InputBoxメソッドでRangeだけを

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

このサイト・インストラクターのネタ帳のアクセスログを眺めていて、
「application inputbox range 判定」
という検索キーワードでのアクセスがあることに気づきました。

Excel VBA(Visual Basic for Applications)の、Application.InpuBoxメソッドで、

Application.InputBoxメソッドでRangeだけを

指定されたのがRangeオブジェクトかどうかを判定するには、どのようなコードを書けばいいのかを探していらしたのでしょうか。

[スポンサードリンク]

Application.InputBoxメソッドの戻り値をRangeに限定するサンプルマクロ

参考になりそうな、簡単なSubプロシージャをご紹介しておきます。

Sub Application_InputBoxメソッドの戻り値の型を確認する()
 Dim rng As Range

 On Error Resume Next
 Set rng = Application.InputBox( _
   Prompt:="セルを選択してください。", _
   Type:=8)
 On Error GoTo 0
 If rng Is Nothing Then Exit Sub

 MsgBox TypeName(rng)
End Sub

上記のプロシージャを実行すると、
「セルを選択してください。」
というインプットボックスが表示され、セルを指定すると、
「Range」
とメッセージボックスに表示されます。

サンプルマクロの解説

ApplicationオブジェクトのInputBoxメソッドの引数・Typeに「8」を指定しているので、インプットボックスで指定できるのは、セル参照か、セルと判定できる「A1:A5」のような文字列だけです。

セルと判定できない文字列が指定された場合には
「入力した参照が正しくないか、または必要な参照が入力されていません。マウスを使って参照を入力するには、入力先のボックスをクリックし、参照するセルをクリックするか、または選択する範囲をドラッグしてください。」
というメッセージが表示されます。

「application inputbox range 判定」
という検索キーワードでしたので、オブジェクト変数・rngを引数に指定したTypeName関数の戻り値をメッセージボックスに表示しています。

MsgBox TypeName(rng)

キャンセル時の対応

引数・Typeを「8」にすれば、Application.InputBoxメソッドで指定できるのは、セルに限定できますが、以下のようなプロシージャでは、

Sub samp()
 Dim rng As Range
 Set rng = Application.InputBox( _
   Prompt:="セルを選択してください。", _
   Type:=8)
End Sub

キャンセル時に、
「実行時エラー'424' オブジェクトが必要です。」
という実行時エラーが発生しています。

これを回避するために、

 Set rng = Application.InputBox( _
   Prompt:="セルを選択してください。", _
   Type:=8)

の前に、

 On Error Resume Next

を入れ、オブジェクト変数・rngが初期値のNothingのままかどうかという判定を入れています。

 If rng Is Nothing Then Exit Sub

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » Application.InputBoxメソッドでRangeだけを

「Applicationオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.