VBAオジサンのらくがき帳

InputBoxについて

2021-06-29 00:00:00

Excel VBAで使用できるInputBoxには、InputBox関数とApplicationオブジェクトのInputBoxメソッドがあります。InputBox関数の方はなじみのある方も多いと思いますので、InputBoxメソッドについてInputBox関数との違いを簡単に説明したいと思います。

InputBox関数

まずInputBox関数について下のサンプルを見てみます。この関数には他にもいくつか設定できるパラメータがありますが今回は説明を省略します。

s = InputBox("値を入力してください")

このコードを実行して、フォームに値を入力すれば変数「s」に値(文字列)が設定されます。(キャンセルの場合は空の文字列が設定されます。)

InputBoxメソッド(Applicationオブジェクト)

InputBoxメソッドではデータの直接入力だけでなくセルを選択して設定することができるという違いがあります。またTypeを指定することにより返ってくる値のタイプを指定することができます。なお、キャンセルを押した時には空文字列ではなくFalseが返ってくるというところも異なります。

例えば文字列(Type:=2)を指定して、直接フォームに入力するかわりに下のようにセルを選択すると、セルの値を文字列として取得することができます。

s = Application.InputBox("値を入力してください", Type:=2)

Rangeオブジェクトの指定(Type:=8)も可能で、選択したセルをRangeオブジェクトとして取得することができます。オブジェクトが返ってくるので値の設定にはSetをつけなくてはいけません。

Dim r As Range
Set r = Application.InputBox("値を入力してください", Type:=8)
r.Value = "ABC"

TypeにRangeを指定した場合、キャンセルされた時のこと(FalseをRangeオブジェクトに設定できなくてエラーになる)を考えて、エラーの処理を入れておくのがよいと思います。たとえば下のような対応ができると思いますが、これが最適かどうかは自信がありません。

On Error Resume Next
Set r = Application.InputBox("値を入力してください", Type:=8)
On Error GoTo 0
If r Is Nothing Then Exit Sub