Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBox関数で数値のみ入力させたい-Do Loop文・IsNumeric関数

InputBox関数で数値のみ入力させたい-Do Loop文・IsNumeric関数

対象:Excel2003, Excel2007, Excel2010, Excel2013

InputBox関数で数値のみ入力させたい

VBA(Visual Basic for Applications)のInputBox関数について、
「InputBox関数で数値のみ入力してもらうようにするにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。

InputBox関数は、インプットボックスに入力された文字列を返す関数です。

Excel VBA(Visual Basic for Applications)で、ちゃんとしたUI(ユーザーインターフェース)を作るには、フォームモジュールや、ワークシートを利用することになりますが、当然ながら作る手間・コストが増えます。

ユーザーに簡単な入力をしてほしいような場合に、マクロ作成のコストを減らすため、InputBox関数で済ませるというケースは少なくありません。

このInputBox関数で、数値のみを入力させたい・数値だけを入力できるようにしたいというのは、定番の要望です。

InputBox関数の戻り値を、IsNumeric関数で判定すればいいのですが、数値が入力されるまで、何度も何度もインプットボックスを表示させたいというときには、どのようなコードを書けばいいのか戸惑ってしまうという方は少なくないようです。

[スポンサードリンク]

数値が入力されるまでインプットボックスを表示し続けるサンプルマクロ

以下のようなDo~Loop文を使うのがおすすめです。

Sub InputBox関数で必ず数値を入力してもらう()

 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関数

「VBA関数」の記事一覧

検索


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

.