- ベストアンサー
Excel VBAで文字列の日付を判定
Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>文字列の書式で”19900101”などとセルに入力されている場合 >セルには必ず文字列で"yyyymmdd"入力されます。その日付を判定したいのですが たぶん、ここの時点で質問内容が正しく書かれていないのではないでしょうか。文字列で、書式がyyyymmdd ということはありません。単に数字だけではないでしょうか?もし、書式で変えているなら、IsDate で判定できるし、それ以外は、エラー表示しているはずです。 それに、8桁数字は、IsDate では判定できませんね。 ご質問内容からは、ある程度の想定でコードを作りましたから、以下から必要な部分を抜き出してください。 '// Sub MacroTest1() Dim myDate As Variant myDate = ActiveCell.Text '表示で取得 If IsDate(myDate) Then MsgBox CDate(myDate) ElseIf Len(myDate) = 8 And IsNumeric(myDate) Then '8桁で数字の場合 myDate = Format(myDate, "##/##/##") 'yyyy/mm/dd 型に変換 If IsDate(myDate) Then MsgBox CDate(myDate) '日付型に変換 Else MsgBox "日付に変換できません。", vbExclamation End If Else MsgBox "日付に該当するデータがありません。", vbExclamation End If End Sub
その他の回答 (4)
- layy
- ベストアンサー率23% (292/1222)
既に入力されている値をチェックすることもいいですが、入力される時にチェックする、カレンダー機能で入力、ができればこちらも対応をお薦めします。 エラー時はメッセージでいいんでしょうか。VBAでやるということは何件かまとめた処理では?、それならいちいちメッセージは出せません。
- Sigotoganai
- ベストアンサー率25% (1/4)
dim s$ s="19900101" if isdate(mid$(s,1,4) & "/" & mid$(s,5,2) & "/" & mid$(s,7,2))=false then msgbox "No!"
- jcctaira
- ベストアンサー率58% (119/204)
Formatで変換すれば、日付確認はできると思います。 IsDate(Format(日付, "0000/00/00")) 【例】 IsDate(Format(19900101, "0000/00/00")) … True IsDate(Format(19900132, "0000/00/00")) … False
- qyukip
- ベストアンサー率40% (13/32)
ISDATEは日付型へ変換可能ならTRUEを返すものなので IF ISDATE(入力データ) =FALSE then 入力エラーの処理 end if のように記述してみてはいかがでしょうか
補足
説明不足でした。申し訳ありません。 セルには必ず文字列で"yyyymmdd"入力されます。その日付を判定したいのですが、ほかに方法はありませんでしょうか。