VBA(Visual Basic for Applications)のInputBox関数について、
「InputBox関数で数値のみ入力してもらうようにするにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。
InputBox関数は、インプットボックスに入力された文字列を返す関数です。
Excel VBA(Visual Basic for Applications)で、ちゃんとしたUI(ユーザーインターフェース)を作るには、フォームモジュールや、ワークシートを利用することになりますが、当然ながら作る手間・コストが増えます。
ユーザーに簡単な入力をしてほしいような場合に、マクロ作成のコストを減らすため、InputBox関数で済ませるというケースは少なくありません。
このInputBox関数で、数値のみを入力させたい・数値だけを入力できるようにしたいというのは、定番の要望です。
InputBox関数の戻り値を、IsNumeric関数で判定すればいいのですが、数値が入力されるまで、何度も何度もインプットボックスを表示させたいというときには、どのようなコードを書けばいいのか戸惑ってしまうという方は少なくないようです。
数値が入力されるまでインプットボックスを表示し続けるサンプルマクロ
以下のようなDo~Loop文を使うのがおすすめです。
Dim ans As String
Do
ans = InputBox("数値を入力してください。")
Loop Until IsNumeric(ans)
MsgBox CDbl(ans)
End Sub上記のマクロを実行すると、「数値を入力してください。」と表示されたインプットボックスが表示され、数値が入力されるまでインプットボックスを表示し続け、数値が入力された場合、その入力された数値をメッセージボックスに表示します。
サンプルマクロの解説
InputBox関数の戻り値は文字列ですから、String型の変数を用意し、
Dim ans As String
Do~Loop文の中でInputBox関数の戻りを変数に代入して、
ans = InputBox("数値を入力してください。")
変数に入力された文字列が数値であると判別されるまで、ループを回し続けています。
Loop Until IsNumeric(ans)
データの型変換処理を入れましょう
ちなみにIsNumeric関数は、全角の数値や桁区切りカンマが入った、
1,234
といった文字列データでもTrueを返しますから、数値入力後の処理を開始する前に、何らかのデータ型を変換する処理を入れておくべきでしょう。
参考までに上記のマクロでは、倍精度浮動小数点型に変換するCDbl関数を通した値を、メッセージボックスに、
MsgBox CDbl(ans)
表示しています。
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBox関数で数値のみ入力させたい-Do Loop文・IsNumeric関数