Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBoxで日付入力チェックを行うには-IsDate関数・StrPtr関数

InputBoxで日付入力チェックを行うには-IsDate関数・StrPtr関数

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

InputBoxで日付入力をしてもらうには-IsDate関数・StrPtr関数

「do until loop inputbox 日付」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

VBA(Visual Basic for Applications)で、日付の入力チェックを行う方法を探している方による検索です。

日付が入力されるまで、Do~Loop文を使ってインプットボックスを表示し続けるには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

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

以下のようなマクロで、日付と認識できる文字列が入力されるまで、インプットボックスを表示し続けることができます。

Sub InputBox関数で日付を必ず入力してもらう()
 Dim ans As String

 Do
  ans = InputBox("日付を入力してください。")
 Loop Until IsDate(ans)

 MsgBox CDate(ans)
End Sub

InputBox関数の戻り値は文字列ですから、String型の変数を用意して、
 Dim ans As String

日付に変換できるかどうかを調べるIsDate関数を使って、変数・ansに代入されている値をチェックして、Trueが返されるまで(日付と判断できる文字列が入力されるまで)Do~Loopループを回し続けています。
 Do
  ans = InputBox("日付を入力してください。")
 Loop Until IsDate(ans)

既にご紹介している、数値が入力されるまでインプットボックスを表示し続けるマクロと考え方は同じで、判定に利用しているのがIsNumeric関数かIsDate関数かの違いです。

キャンセル処理入りで日付が入力されるまでインプットボックスを表示し続けるサンプルマクロ

上記のマクロでは、日付と認識できる文字列が入力されるまでインプットボックスが表示されますが、実務では[キャンセル]ボタンが押されたときには、マクロを終了したいという要望が出てくることになるでしょう。

その場合は以下のようなマクロです。

Sub InputBox関数で日付を必ず入力してもらう_キャンセル処理あり()
 Dim ans As String
 Dim flg As Boolean

 flg = False
 Do
  ans = InputBox("日付を入力してください。")
  If StrPtr(ans) = 0 Then Exit Sub
  If IsDate(ans) Then flg = True
 Loop Until flg = True

 MsgBox CDate(ans)
End Sub

既にご紹介している、StrPtr関数を使った[キャンセル]ボタンが押されたのかどうかを判定を行えば、日付入力チェックで[キャンセル]ボタンがクリックされた場合にマクロを終了できるようになります。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBoxで日付入力チェックを行うには-IsDate関数・StrPtr関数

「VBA関数」の記事一覧

検索


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

.