• ベストアンサー

Excel VBAで文字列の日付を判定

Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>文字列の書式で”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)
回答No.5

既に入力されている値をチェックすることもいいですが、入力される時にチェックする、カレンダー機能で入力、ができればこちらも対応をお薦めします。 エラー時はメッセージでいいんでしょうか。VBAでやるということは何件かまとめた処理では?、それならいちいちメッセージは出せません。

回答No.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)
回答No.2

Formatで変換すれば、日付確認はできると思います。    IsDate(Format(日付, "0000/00/00")) 【例】  IsDate(Format(19900101, "0000/00/00"))  … True  IsDate(Format(19900132, "0000/00/00"))  … False

  • qyukip
  • ベストアンサー率40% (13/32)
回答No.1

ISDATEは日付型へ変換可能ならTRUEを返すものなので IF ISDATE(入力データ) =FALSE then 入力エラーの処理 end if のように記述してみてはいかがでしょうか

tarono0123
質問者

補足

説明不足でした。申し訳ありません。 セルには必ず文字列で"yyyymmdd"入力されます。その日付を判定したいのですが、ほかに方法はありませんでしょうか。

関連するQ&A