「do until loop inputbox 日付」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
VBA(Visual Basic for Applications)で、日付の入力チェックを行う方法を探している方による検索です。
日付が入力されるまで、Do~Loop文を使ってインプットボックスを表示し続けるには、どのようなコードを書けばいいのかを探していらしたのでしょう。
日付が入力されるまでインプットボックスを表示し続けるサンプルマクロ
以下のようなマクロで、日付と認識できる文字列が入力されるまで、インプットボックスを表示し続けることができます。
Dim ans As String
Do
ans = InputBox("日付を入力してください。")
Loop Until IsDate(ans)
End Sub
InputBox関数の戻り値は文字列ですから、String型の変数を用意して、
Dim ans As String
日付に変換できるかどうかを調べるIsDate関数を使って、変数・ansに代入されている値をチェックして、Trueが返されるまで(日付と判断できる文字列が入力されるまで)Do~Loopループを回し続けています。
Do
ans = InputBox("日付を入力してください。")
Loop Until IsDate(ans)
既にご紹介している、数値が入力されるまでインプットボックスを表示し続けるマクロと考え方は同じで、判定に利用しているのがIsNumeric関数かIsDate関数かの違いです。
キャンセル処理入りで日付が入力されるまでインプットボックスを表示し続けるサンプルマクロ
上記のマクロでは、日付と認識できる文字列が入力されるまでインプットボックスが表示されますが、実務では[キャンセル]ボタンが押されたときには、マクロを終了したいという要望が出てくることになるでしょう。
その場合は以下のようなマクロです。
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
End Sub
既にご紹介している、StrPtr関数を使った[キャンセル]ボタンが押されたのかどうかを判定を行えば、日付入力チェックで[キャンセル]ボタンがクリックされた場合にマクロを終了できるようになります。
- Newer:書籍では学べないポイントが
- Older:シートを指定してRangeを取得する
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » InputBoxで日付入力チェックを行うには-IsDate関数・StrPtr関数