• ベストアンサー

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

  • エクセルVBAで文字列を判定する方法

    たとえばセルA1に何か入力した時にその入力したものが、数列か文字列かを判定する方法はVBAでありませんか?よろしくお願いします。

  • EXCELで日付を文字列として取り出すには

    EXCELで日付形式のセルの内容を、そのイメージのまま文字列にするにはどうすれば良いでしょうか。何かうまい方法があれば教えてください。 例えば、2006/01/05 と表示されている日付をそのまま文字列として 取り出したいのです。単にセルの書式設定で文字列に変えただけでは 38722とタイムスタンプの値らしきものに化けてしまうので困っています。

  • Excelで日付の書式を指定文字列に変換

    Excelで日付の書式を指定文字列に変換 セルから日付情報を得て、文字列でyyyymmddに変換するには、どのようにすればいいでしょうか。VBA・関数のどちらでもかまいません。よろしくお願いします。

  • excelで日付を文字列として保存したい

    excel(たぶんかなり新しいバーション)を使っています。 最近のexcelはバージョンすら、見方がわかりません。 さて、日付を"2015-01"という書式で、テキストファイルとしてアップロードしないといけなくなりました。2015-09 と入力すると 2015/9/1 として保存されてしまうので、セルの書式を 文字列にし、2015-09  や 2016-12などとうちこんでから.csvで保存しました。 このファイルを開けると、それらがすべて2015/09とか2016/12として保存されています! これを セルの書式を 文字列 に変更すると42248 とかになってしまいます。 そんなこんなで一日つぶしています。マイクロ●●●社は社会に、もはや善よりも悪をもたらしているように信じていますが、それはさておき、2015-01をあるがままの文字列として.csvに保存するにはどうすればよいのでしょうか。' を頭につけるて、ファイルをアップロードすると規則違反なので、別の方法をお教えください。

  • EXCELの日付データを文字列に変換したい

    EXCELの和暦形式の日付データを文字列に変換する方法を教えてください。 たとえば、H17.9.2をそのまま文字列に変換したいのです。 最初から文字列データとして入力すれば問題ないのですが、日付データ(標準)として入力されたデータを書式→セル→文字列で変換するとシリアル値に変わってしまいます。(H17.9.2→38597) どうしたらよいのでしょうか。お願いします。

  • VBAでUnicodeしか存在しない文字の判定について

    VBA初心者の質問ですが、宜しくお願いします。 エクセル上にUnicodeしか存在しない文字が含まれた文字列を入力するとします。 VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定をするにはどのようにしたらいいでしょうか? また、その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得するにはどうしたらいいでしょうか?

  • Excel VBAで、様々な書式設定のセルをyyyymmddの文字列に

    Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたい dim i Columns("A:B").NumberFormatLocal = "@" For i = 1 To 5 If Cells(i, 1)NumberFormat = "@" Then Cells(i, 2) = Aells(i, 1).text Else Cells(i, 2) = Application.text(cells(i, "1"), "yyyymmdd") End If Next Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたいのですが・・ 上記のソースを書いた場合、文字列・日付・ユーザ定義などの書式設定ではうまくいきますが、標準で19990101などと入力されていた場合はエラーになってしまいます。 どのように直せばうまくいくのでしょうか? よろしくお願いします。

  • VBAで文字列検索の方法

    エクセルで実現したいVBAです。 セル内に入力されている文字列に任意の文字が含まれているかどうかを判定したいのです。 例えば, 「特別値引対応商品」と入力されているセルに 「値引」という文字が含まれているかどうか のチェックをしたいのです。 検索する文字列(上記の場合なら「値引」)は固定でかまわないのですが,どのようにすれば実現できるでしょうか。 関数を探してみたのですが,ないように思います・・・。

  • Excel vba 日付の形式判定

    Excelに日付、開始時間の列があります。 セルの形式をチェックしたいのですが、形式が下記のとおりであるか どう記述すればいいのでしょうか? 日付チェックはisdate関数を使いますが、日付の形式がyyyy/mm/dd、時間の形式がhh:mmであるかの 判定方法を教えてほしいです。 例) 日付    時間  2021/05/01 10:00  H33/05/01   ← yyyy/mm/dd形式でない為、NG   10時00分 ← hh:mm形式でない為、NG 

  • セル内に特定の文字列があるか判定したいのですが

    セル内に、「A」という文字列が存在するならば必ず「BAB」であるかということを判定したいと思っています。 実際には、セル内には「A」が存在するとも限らないし、一つとも限りません。 例えば、セル内が以下の文字列の場合 セル=CCCBABBBCCABB 5文字目の「A」は「BAB」ですが後ろから3つめの「A」は条件に当てはまっていないので判定を「否」としたいのです。

専門家に質問してみよう