dポイントプレゼントキャンペーン実施中!

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

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

A 回答 (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
    • good
    • 0

既に入力されている値をチェックすることもいいですが、入力される時にチェックする、カレンダー機能で入力、ができればこちらも対応をお薦めします。



エラー時はメッセージでいいんでしょうか。VBAでやるということは何件かまとめた処理では?、それならいちいちメッセージは出せません。
    • good
    • 0

dim s$


s="19900101"
if isdate(mid$(s,1,4) & "/" & mid$(s,5,2) & "/" & mid$(s,7,2))=false then msgbox "No!"
    • good
    • 0

Formatで変換すれば、日付確認はできると思います。


 
 IsDate(Format(日付, "0000/00/00"))
【例】
 IsDate(Format(19900101, "0000/00/00"))  … True
 IsDate(Format(19900132, "0000/00/00"))  … False
    • good
    • 0

ISDATEは日付型へ変換可能ならTRUEを返すものなので


IF ISDATE(入力データ) =FALSE then
入力エラーの処理
end if

のように記述してみてはいかがでしょうか

この回答への補足

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

補足日時:2010/06/09 09:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!