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

▼オブジェクトブラウザーの使い方と共に、VBAのオブジェクト式の文法・オブジェクト変数について解説する、マクロ経験者向けセミナー『Excel VBA講座 オブジェクト式解説編』の開催時に、案内を希望される方はメールアドレスをご登録ください。
オブジェクト式解説編

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

[スポンサード リンク]
[スポンサード リンク]

TrackBack:0

TrackBack URL

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

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

検索

最近じっくりと読まれている記事

.