もうひとつのInputBox

文字や数値の入力をして欲しいとき、InputBox関数を使って入力を促します。
しかし、実はInputBoxには、2種類あります。

1.InputBox関数

よくあるのは、次のように入力をしてもらい、処理をしていくパターンです。
数値を入力して欲しいのに、実はこれだと文字の入力もできてしまいます。
数値で計算しようとしているところに文字が入ってくると、当然エラーを出して止まってしまいます。
それを避けるためには、入力された文字が数値がどうか判別する処理も必要になってきます。

Sub test()

  Dim n As Variant ←@

  n = InputBox("数値を入力してください。", Title:="入力モード", Default:=5) ←A

  MsgBox n

End Sub
 
@ ここでは、文字列でも数値でも扱える
  バリアント型を宣言しています。
  整数型の Integer では、キャンセルしたとき、
  戻り値が数値ではないため、エラーになって
  止まってしまうからです。

A 入力ウィンドウのタイトルを設定したり、
  デフォルト値を設定しています。
InputBox ( Prompt , [Title] , [Default] , [XPos] , [YPos] , [HelpFile] , [Context] )  ← InputBox関数の引数

2.InputBoxメソッド

もうひとつの、InputBoxメソッドを使ってみましょう。
InputBox関数と違うのは、引数にTypeがあることです。
これを使うことで、入力されるデータ型を制限することができます。
指定されたデータ型以外で入力された場合、エラーメッセージを返し、再入力を促します。

したがって、「数値だけを入力してほしい。」などとという場合には、こちらの方が便利でしょう。

Sub test()

  Dim n As Variant ←@

  n = Application.InputBox("数値を入力してください。", Title:="入力モード", Default:=5, Type:=1) ←A

  MsgBox n

End Sub
 
@ ここでもバリアント型で宣言していますが、
  整数型の Integer でもかまいません。
  ただし、キャンセルしたときの戻り値が
  違うので注意してください。

A Type:=1 で,入力されるデータは、
  数値に限定しています。

  したがって、数値以外を入力すると、
  エラーメッセージを返して再入力を促します。
Application.InputBox ( Prompt , [Title] , [Default] , [XPos] , [YPos] , [HelpFile] , [HelpContextId] , [Type]  ← InputBoxメソッドの引数 
( 引数 Type の指定できる値)
 0 → 数式
 1 → 数値
 2 → 文字列
 4 → 論理値( True / False )
 8 → セル参照( Rangeオブジェクト )
16 → エラー値( #N/Aなど )
64 → 数値配列

複数のデータ型を受け取りたいときは、値を加算します。文字列と論理値を受け取りたいときは、2+4で6を指定します。