【プログラミング】VBAのInputBox関数で数値入力のみに制限する方法

プログラミング

以前にInputBox(インプットボックス)を紹介しましたが、InputBoxは2種類存在しており、以下の2つとなります。

  • ApplicationオブジェクトのInputBoxメソッド

  • InputBox関数

VBAをはじめる前の人はこちら

VBAでプログラムを動かす(デバッグ)方法が知りたい人はこちら

VBAでInputBoxの基本的な書き方や種類の解説はこちら

InputBox関数でユーザーからの入力を数値のみに制限する方法

InputBoxで数値のみに入力制限する方法1:Do~Loop Until

結論だけ言えば、このコードを書く事でInputBox関数におけるユーザからの入力を数値のみに制限することが可能です。

Sub InputBox関数で数値入力に制限する方法()
  Dim no As String

  Do
    no = InputBox("数値を入力してください。", , "数値を入力")
  Loop Until IsNumeric(no)

  MsgBox (no)

End Sub
変数は任意のものを使用してください。但しInputBox関数の戻り値は文字列(String)型となります。

または

Sub InputBox関数で数値入力に制限する方法()
  Dim no As String

  Do Until IsNumeric(no)
    no = InputBox("数値を入力してください。", , "数値を入力")
  Loop

  MsgBox (no)

End Sub
変数は任意のものを使用してください。但しInputBox関数の戻り値は文字列(String)型となります。

InputBoxで数値のみに入力制限する方法2:Do~Loop While

Untilの逆説的なWhileを使った場合の書き方は以下です。

Sub InputBox関数で数値入力に制限する方法()
  Dim no As String

  Do
    no = InputBox("数値を入力してください。", , "数値を入力")
  Loop While Not IsNumeric(no)

  MsgBox (no)

End Sub
変数は任意のものを使用してください。但しInputBox関数の戻り値は文字列(String)型となります。

または

Sub InputBox関数で数値入力に制限する方法()
  Dim no As String

  Do While Not IsNumeric(no)
    no = InputBox("数値を入力してください。", , "数値を入力")
  Loop

  MsgBox (no)

End Sub
変数は任意のものを使用してください。但しInputBox関数の戻り値は文字列(String)型となります。

WhileとUntilの関係については下記のようになります。

While Not条件 は Until 条件

●While 条件 は Until Not 条件

繰り返し処理をするDo~Loop UntilまたはWhile文について

Do~Loop文はエクセルVBAで繰り返し処理を行う際につかうコードとなります。

繰り返し構文の代表例としては、最も一般的に使われるものとしてFor~Next構文があります。For文は処理を繰り返す回数を指定する時、今回使用するDo~Loopは条件を指定する時に使いわけができます。

InputBox関数でインプットボックスの入力を数値に制限するために使ったDo~Loopコードの構文を以下に紹介します。

構文

Do ~ Loop Until : 必ず初回は処理を実行し、処理実行後に条件式を満たすまで繰り返す

Do
  処理
Loop [Until 条件式]

Do Until ~ Loop :条件式を満たすまで繰り返す

Do [Until 条件式]
  処理
Loop

Do ~ Loop While : 必ず初回は処理を実行し、処理実行後に条件式を判定し満たしている間繰り返す

Do 
  処理
Loop [While 条件式]

Do While ~ Loop : 条件式を満たしている間繰り返す

Do [While 条件式]
  処理
Loop

解説

前提としてDo~Loop構文は繰り返し処理を使う時に用いるコードとなります。
そしてInputBox関数でユーザーから入力された値を変数の【 no 】に代入し、変数【 no 】に代入された値をIsNumeric関数を使って数値であるか否かの判定をしています。

IsNumeric関数による判定がFalseの条件であり続ける限りDo~Loopのループから抜け出せないため、何度入力してもインプットボックスを表示し続ける処理となり。結果として数値しか入力できない状況を作られています。

InputBox関数で数値のみに入力制限する処理のながれのイメージ

イメージ図
IsNumeric関数

指定した値が数値かどうかを判定して数値なら「True」そうでない場合は「False」を返します。
※文字列の【 10 】などの値など数値に変換できる値の場合はTru
eが返ってきます

変数に代入する値IsNumeric関数の判定結果
100True
“500”True
100 + 1True
“abc”False
“あいうえお”False

これを応用すれば、数値型に留まらず各種データ型をインプットボックスでのユーザーからの入力で値を受け取るプログラムを作成する時の実行時エラーは解消されます。

komori
komori

アプリやシステムを作成する上ではユーザーに多過ぎる選択肢があると、迷いが生じやすい原因となります。
入力時の迷いを減らす事は結果としてナビゲートになりユーザビリティと言えます。

「InputBox関数でユーザーからの入力を数値のみに制限する方法」まとめ

今回はInputBox関数でユーザーからの入力を数値に制限したい場合のコードの書き方と処理の流れを説明しました。

まとめて箇条書きと表にすると以下となります。

組み合わせた処理

  • 値が数値であるか判定するコード ➡ IsNumeric関数 
  • 条件に応じて繰り返す処理コード ➡ Do~Loop[While or Until]
Do~Loopによるループ指定条件式(数値判定)
Do~Loop Until 条件式IsNumeric(no)
Do Until 条件式 ~ LoopIsNumeric(no)
Do~Loop While Not 条件式IsNumeric(no)
Do While 条件式 ~ LoopIsNumeric(no)
While Not 条件 は Until 条件と同じ。While 条件 は Until Not 条件と同じの関係

もちろん今回紹介したもの以外でも同じような事を満たす手段はありますが、コードを複雑化せずにシンプルな書き方で実装したいのであればDo~Loopを使った書き方がおすすめです。

最後までお読み頂きありがとうございます。

コダマのもりブログはにほんブログ村に登録しています。
この記事が役に立ったと感じていただけた人は是非フォローお願いします。
にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村
PVアクセスランキング にほんブログ村コダマのもりブログ - にほんブログ村

コメント

タイトルとURLをコピーしました