【VBA】入力された文字が数字の場合のみ処理を進める方法【InputBox】

2020年4月19日

こんにちは!たけのこさんです!

エクセルマクロ(VBA)InputBox関数で文字入力ができるプログラムを作成したとします。
入力する文字の指定が数字であるのにもかかわらず数字意外の文字を入力されると困りますよね?

今回はこのような問題を解消します!
数字入力以外では再度InputBoxの入力項目に戻す方法を確認していきます!
文字入力を行うときによく使われる手法なのでなので是非覚えましょう!

では、確認してみましょう

この記事を読んで欲しい人

  • InputBoxで入力の理解を深めたい人
  • 入力された文字の指定をしたい人
この記事を読むと出来るようになること
  • 入力された文字の指定が出来る

InputBoxの使用方法がわからない場合は参考記事を確認してください

文字入力の指定方法

文字入力の指定方法

入力された文字が数字の場合だけ処理を進める方法の確認をしていきます。
基本の構文になるのでぜひ確認してください!

数値の時のみ処理が続行される

入力された文字が数字の場合のみだけ処理が続行されるサンプルプログラムです

 Sub onlyNum()
 
   Dim inputNum
   Do
       'inputNumという変数に文字を入力する
       inputNum = InputBox(" 数字の時だけ続行されます")
   '数値意外が入力された場合はループされる
   Loop Until IsNumeric(inputNum)

   MsgBox "数値が入力されました"
 
 End Sub

詳しくはサンプルプログラム内のコメントを確認してください。
大まかなプログラムの流れは以下です

  1. Doループを行う
  2. ループ内でInputBox関数を使用し変数に文字列を受け取る
  3. 変数の中に入っている内容が数字の場合のみループを抜ける

ポイントとしてはUntil句をLoopと同じ列に記載することです。
Doと同じ列に記載しないで下さい。
Loopと同じ列に記載することでDoの内容が一旦実行されるようになります。

文字入力の応用方法

文字入力の応用方法

基本の指定方法では数字の場合のみのサンプルプログラムを作成しました。
応用では数字以外の場合数字の桁数が決まっている場合の指定を確認していきましょう!

数値の時以外処理が続行される

数字以外の場合のみ処理が続行されるサンプルプログラムです。

 Sub notOnlyNum()
 
   Dim inputNum
   Do
       inputNum = InputBox(" 数字以外の時だけ続行されます")
   Loop While IsNumeric(inputNum)

   MsgBox "数値以外が入力されました"
 
 End Sub

本内容のポイントとしては数字のときの反対の処理を行ため、UntilがWhileに変更している点です。

数字のときの反対の処理を行うため、Whileに変更してます!
否定形を使用するなど、いろいろな指定方法が考えられますが今回はこの方法にしています。

数字の時であり、6文字の時だけ続行される

数字の場合であり、文字数が6文字の場合のみ続行させるサンプルプログラムです。
より厳密な入力の規制が可能になります。

 Sub OnlyNumLength6()
 
   Dim inputNum
   Do
       inputNum = InputBox(" 数字(6文字)の時だけ続行されます")
   Loop Until IsNumeric(inputNum) And Len(inputNum) = 6

   MsgBox "数字(6文字)が入力されました"
 
 End Sub

Untilの条件にAndで文字列を追加することにより実装が可能です。
今回のプログラムでは一致の条件式にしましたが以上や以下でも設定が可能です。

別の方法もOrやAndで指定出来るのでいろいろ試してみましょう!

まとめ

まとめ

いかがだったでしょうか。

文字入力指定の方法を確認しました。
ポイントとしての大まかな流れと指定方法を覚えれば応用にも生かせるので絶対に大まかな流れを覚えるようにしましょう!

  1. Doループを行う
  2. ループ内でInputBox関数を使用し変数に文字列を受け取る
  3. 変数の中に入っている内容が数字の場合のみループを抜ける

皆様により良いVBAライフを!

ではでは