Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【Excel VBA】正しい形式で入力されるまで処理を繰り返す方法

f:id:WillSpecter:20200810141628j:plain

 やりたいこと

正しい日付形式で入力されるまで処理を繰り返す

VBA起動後に以下のようなポップアップを表示します。

f:id:WillSpecter:20200830100514p:plain

正しい日付形式で入力が行われた場合は後続処理を行い、

誤った形式で入力が行われた場合は、以下のポップを表示後、再度日付入力を求めるポップアップを表示させるといった処理を行いたいと思います。

f:id:WillSpecter:20200830100705p:plain 

パスワード入力を間違えた場合などにもこのように再入力を求めるロジックは使うことができると思うので、ぜひ使ってみてください!(^^)!

 

コードと解説は以下の通りです。
VBA コード】

Sub 処理日付入力()
    Dim 処理日 As Variant
    
    '3つ目の引数で初期値を指定
    処理日 = InputBox("処理日付を入力してください。", "処理日の入力", Date)
    
    '正しい日付形式になるまで繰り返す
    Do While Not IsDate(処理日)
        MsgBox _
        "入力された値は日付形式ではありません。" & vbCrLf & _
        "再度入力してください。"
        
        処理日 = InputBox("処理日付を入力してください。", "処理日の入力", Date)
    Loop
    
    MsgBox 処理日
End Sub

ポイント

変数「処理日」はVariant型で宣言

変数「処理日」は日付型ではなくVariant型で宣言しています。

「処理日」はInput Box関数で入力された処理日のデータを格納する変数になります。

 

日付以外の文字列などのデータが入力された場合でも即座にエラーにならないようにするため、一旦何でも格納できるVariant型を使用しています。

 

文字列が入力された場合は、後続のIsDate関数で正誤を判定しています。

IsDate関数で日付形式かどうかを調べる

IsDate関数は、変数に日付として有効なデータが格納されているかを調べることのできる関数です。

有効な場合はTrueを返し、無効な場合はFalseを返します。

 

日付として有効なデータとは「2020年9月2日」や「2020/09/02」や「9/2」などのデータのことで、文字列や「13/2」などのように日付として認識されないデータはFalseを返します。

InputBoxの使い方

InputBoxはテキストボックス付きのダイアログボックスを表示する関数です。

InputBox(メッセージ, タイトル, 初期値)

とすることで、表示するメッセージやタイトル、初期値を指定することができます。

 

今回は初期値にDateを入力しているので、ダイアログが表示された時にデフォルトで当日の日付が入力されています。

Do While ~ Loop

While以下の条件に合っている間、処理を繰り返すという意味のステートメントです。

今回はDo While Not IsDate(処理日)とすることで、

変数「処理日」が正しい日付形式ではない場合に処理を繰り返す

という意味になります。

 ひとこと

 

今回のロジックはUiPathでもよく使いますが、InputBoxで初期値を設定できるのはとても便利だと思いました( ..)φ

 

今回の処理は色々と応用して使うことができるので、一つの形として覚えておきたいです(^-^)

 

他にもVBAについて紹介しているのでぜひ参考にしてみてください!

it-rpa.hatenablog.com

it-rpa.hatenablog.com

it-rpa.hatenablog.com

it-rpa.hatenablog.com

it-rpa.hatenablog.com

it-rpa.hatenablog.com

it-rpa.hatenablog.com

できるシリーズはフルカラーでかなり細かいところまで画像を使って解説してあるのでオススメです!