注目キーワード
  1. VBA
  2. 関数
  3. ショートカット

ExcelVBAで条件分岐を学ぼう⑤

  • 2019年3月23日
  • 2019年3月23日
  • VBA
  • 39回
  • 0件
VBA NO IMAGE

①入力画面に入力されたデータの種類を判定する

数値を入力することが前提の入力画面でも、間違って文字列が入力される「可能性はあります。前項のマクロではエラーになりませんでしたが、入力されたデータの種類を判定し、目的に合ったデータでない場合は処理を行わないようにすると安全です。

・数値が入力された場合のみ合否を表示する

VBAでは、状況に応じて、処理するデータの形式が自動的に変換されます。たとえばInputBox関数の戻り値は基本的に文字列を意味するString型のデータですが、条件式では数値に自動変換されて比較が行われています。対象のデータが数値として処理できるかどうかはIsNumeric関数を使って調べることができます。

次の例は、InputBox関数の戻り値を一旦、変数Ansに収め、数値に変換できるデータかどうか判定しています。数tいに変換できる場合はそのまま使用しても問題ありませんが、ここではより確実に、Clnt関数で整数型のデータに変換し、その値が80以上かどうかに応じて合否の判定をC3セルに入力します。数値に変換できないデータの場合は、「入力されたデータが不適切です」というメッセージを表示します。

 

・日付が入力された場合のみ残り日数を表示する

入力されたデータが日付として処理できるかどうかは、IsDate関数を使って調べることができます。次の例は、「締切日を入力してください」というメッセージを表示して、入力されたデータが日付として処理できる場合は、CDate関数で日付データに変換し、その日付からB3セルに入力されている今日の日付を引いて、残り日数を表示させています。日付データに変換できない場合は、「日付データではありません」というメッセージを表示します。

・実行結果

 

②入力画面を使用する

ExcelのVBAには、すべてのアプリケーションのVBAで共通のInputBox関数のほかに、独自のInputBoxメソッドも用意されています。このメソッドには、入力するデータの種類を限定したり、クリックやドラッグでセル参照を入力したりできる利点があります。

・特定のデータのみ入力可能にする

InputBoxメソッドはInputBox関数と同じ名前ですが、Applicationオブジェクトを対象とすることでメソッドとみなされます。InputBox関数と同じPromptやTitleの他に、入力可能なデータの種類を引数Typeで指定できます。この引数に指定できる値と、指定時に入力可能になるデータは、次の表の通りです。

データの種類
0 数式
1 数値
2 文字列
4 論理値
8 セル参照
16 エラー値
64 配列

この指定を行った入力画面に、指定データ以外の値を入力して「OK」をクリックすると、エラーメッセージが表示され、入力画面を完了することができなくなります。なお、複数の種類のデータを入力可能にしたい場合は、そのすべての指定値を加算した数値を指定します。

・実行結果

・InputBoxメソッドの「キャンセル」に対応する

InputBox関数の入力画面で「キャンセル」がクリックされた場合は空白文字列「””」が返されますが、InputBoxメソッドの「キャンセル」では論理値Falseが返されます。上記のコードの場合は、戻り値が整数型の変数Ansに代入された時点でFalseが数値0に変換され、「不合格」と入力されてしまいます。「キャンセル」がクリックされたときに作業を中断したい場合は、戻り値を代入する変数をVariant型にし、IfステートメントでFalseかどうかを判定する必要があります。

・実行結果

NO IMAGE
最新情報をチェックしよう!